云计算|OpenStack|社区版OpenStack---基本概念科普(kvm的驱动类别和安装)

news2024/12/24 11:45:03

前言:

云计算里基本都是基于kvm技术作为底层支撑,但,该技术是比较复杂的,首先,需要硬件的 支撑,表现在物理机上,就是需要在BIOS中调整设置虚拟化功能,这个虚拟机功能通常是interVT或者AMD-V,而在VM虚拟机里,也同样如此,只是是虚拟机的CPU属性需要指定:

 那么,如果硬件开启了虚拟化引擎,我们才可以顺利的使用虚拟化技术

例如,我们在VMware虚拟机里测试安装一个kvm虚拟机,通常的,安装命令是这样的(这个是安装window server 2012 r2):

virt-install --name=win2k12r2 --ram 2048 --vcpus=2 --os-type=windows --os-variant win2k12r2 --disk path=/opt/win2k12r2.qcow2,bus=ide,size=15,format=qcow2  --accelerate --disk device=cdrom,path=/opt/cn_windows_server_2012_r2_vl_x64_dvd_2979220.iso --disk device=cdrom,path=/opt/virtio-win-0.1.102.iso   --vnc --vncport=5955 --vnclisten=0.0.0.0 --network bridge=br0 --force --autostart  --boot cdrom

那么,以上命令里的bus是什么意思呢?bus的值可以是什么?

OK,下面将就这些问题做一个详细的解答。

一,

总线的类型

openstack官网文档:Manage images — glance 26.0.0.0b3.dev16 documentation  

截取如下内容:

Disk and CD-ROM bus model values

libvirt_type setting

Supported model values

qemu or kvm

  • fdc

  • ide

  • scsi

  • sata

  • virtio

  • usb

xen

  • ide

  • xen

VIF model values

libvirt_type setting

Supported model values

qemu or kvm

  • e1000

  • ne2k_pci

  • pcnet

  • rtl8139

  • virtio

xen

  • e1000

  • netfront

  • ne2k_pci

  • pcnet

  • rtl8139

vmware

  • VirtualE1000

  • VirtualPCNet32

  • VirtualVmxnet

OK,这些总线驱动(bus)里有一些是非常常用的,例如,IDE,SCSI,SATA,VIRTIO(磁盘和cdrom的驱动),e1000,rtl8139,virtio(网卡驱动)

其它的并不是常用的,从适用范围来说,IDE和e1000的适用范围更广(这里的意思是各种平台都可用,虚拟机一般都能启动起来),但从虚拟机运行效率来说,virtio是最好的(但是如果没有正确的安装这个驱动,虚拟机很可能会启动失败,或者联网的时候遇到各种问题)。

在openstack中,目前,libvirt虚拟化工具根据配置的虚拟机管理程序类型(位于/etc/nova/nova.conf文件中的libvirt_type)来确定磁盘、CD-ROM和VIF设备的型号。为了获得最佳性能,libvirt默认对磁盘和VIF (NIC)模型都使用virtio。这种方法的缺点是无法运行缺少virtio驱动程序的操作系统,例如BSD、Solaris以及Linux和Windows的旧版本

二,

virtio驱动的概念

virtio

virtio 是一个 Linux 的输入/输出(I/O)准虚拟化框架,它简化并加快了 VM 到管理程序的 I/O 通信。virtio 创建了 VM 和用于虚拟块设备,通用的外围组件互连(PCI)设备,网络设备等的管理程序间 I/O 的标准化传输机制。

virtio的优势:

Virtio------半虚拟化驱动的方式,可以获得很好的I/O性能,其性能几乎可以达到和native(即:非虚拟化环境中的原生系统,也就是物理机)差不多的I/O性能。所以,在使用KVM之时,如果宿主机内核和客户机都支持virtio的情况下,一般推荐使用virtio达到更好的性能。当然,virtio的也是有缺点的,它必须要客户机安装特定的Virtio驱动使其知道是运行在虚拟化环境中,且按照Virtio的规定格式进行数据传输,不过客户机中可能有一些老的Linux系统不支持virtio和主流的Windows系统需要安装特定的驱动才支持Virtio。不过,较新的一些Linux发行版(如RHEL 6.3、Fedora 17等)默认都将virtio相关驱动编译为模块,可直接作为客户机使用virtio,而且对于主流Windows系统都有对应的virtio驱动程序可供下载使用。

以上说的可能比较模棱两可,OK,那么在现在的主流的云平台例如aws,openstack这些平台上跑的kvm虚拟机,都需要安装有virtio,才可能正常的运行。

Linux的virtio驱动下载

那么,如何知道kvm 镜像是否安装了virtio驱动呢?

随便一个公有云平台都可以查询得到,例如:Linux安装virtio驱动_镜像服务-网宿科技

Linux的镜像:

OK,我还是启动一个kvm虚拟机,演示一下吧(以debian-10-openstack-amd64.qcow2 这个镜像为例,此镜像已经修改过root密码):

1,执行grep -i virtio /boot/config-$(uname -r)检查系统内核是否支持virtio

启动镜像命令:

virt-install --name=debian10 --ram 1024 --vcpus=2 --os-type=linux --os-variant debian10 --disk path=/opt/debian-10-openstack-amd64.qcow2,bus=virtio,size=15,format=qcow2  --accelerate    --vnc --vncport=5966 --vnclisten=0.0.0.0 --network bridge=br0 --force --autostart  --boot hd

以上grep命令的截图,这里CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NETCONFIG_SCSI_VIRTIOCONFIG_VIRTIO_PCI,他们分别表示virtio_blkvirtio_netvirtio_scsivirtio_pci驱动的配置 都是m,因此,还需要继续检查临时文件系统,看看是否正确加载了virtio驱动

 

2,

临时文件系统检查virtio驱动

CentOS执行lsinitrd /boot/initramfs-$(uname -r).img | grep virtio,Ubuntu执行lsinitrd /boot/initrd.img-$(uname -r) | grep virtio,确认上述四个驱动是否包含在临时文件系统中,我这里是Debian10,也算是ubuntu系列的了,因此,是lsinitrd /boot/initrd.img-$(uname -r) | grep virtio 

结果如下:

 OK,这个镜像是可以在云平台使用的,因为包含了virtio驱动嘛,其实也是废话,官方镜像要是不包含virtio驱动,就真的扯淡了。

如果操作系统不支持virtio,比如低版本的centos5 ,centos6 这样的,那么,解决方案为重新编译新的Linux内核,在这里就不啰嗦了。如果临时文件系统没有virtio,以上网址也有解决方案,在这就不废话了。

Windows的镜像:

Windows下的virtio驱动下载地址是:Index of /groups/virt/virtio-win/direct-downloads/archive-virtio

那么,如果是在Linux下,不想下载ISO文件,可以使用yum安装的方式直接安装(虽然等于下载),RPM包下载地址:Index of /groups/virt/virtio-win/repo/stable

yum安装后,存放在一下路径,可以方便的使用:

[root@k8s-node2 virtio-win]# pwd
/usr/share/virtio-win

[root@k8s-node2 virtio-win]# ls
drivers  guest-agent  installer  virtio-win-0.1.229.iso  virtio-win.iso

一般下载下来的virtio ISO文件内容如下:

  NetKVM/: Virtio网络驱动

    visotor/: Virtio块驱动

    vioscsi/: Virtio SCSI驱动

    viorng/: Virtio RNG驱动

    vioser/: Virtio串口驱动

    Balloon/: Virtio 内存气球驱动

    qxl/: 用于Windows 7及之前版本的QXL显卡驱动. (virtio-win-0.1.103-1和之后版本会创建)

    qxldod/: 用于Windows 8及之后版本的QXL显卡驱动. (virtio-win-0.1.103-2和之后版本会创建)

    pvpanic/: QEMU pvpanic 设备驱动 (virtio-win-0.1.103-2和之后版本会创建)

    guest-agent/: QEMU Guest Agent 32bit 和 64bit 安装包

    qemupciserial/: QEMU PCI 串口设备驱动

    *.vfd: 用于Windows XP下的VFD软驱镜像

查看驱动:这个没什么好说的,打开设备管理器,看呗,我这个Windows 是安装好了virtio的:

 

OK,总结起来就是Linux系统对于virtio的支持是比较好的,除了个别的低版本需要编译内核,但Windows操作系统通常是需要手动安装的。

windows的virtio驱动主要包括网卡以及磁盘的驱动,主要有三种方式,第一种是安装时加载virtio驱动,第二种是已有windows的操作系统,需要更新驱动,第三种是直接制作virtio驱动的iso系统镜像。

下面,就Windows系统的virtio驱动安装做一个总结。

三,

Windows操作系统下的virtio驱动安装

https://zskjohn.blog.csdn.net/article/details/129035007  这个是我的上一篇博文,但Windows安装的时候并没有彻底的安装virtio驱动,主要是磁盘驱动。

第一种:

修订版安装命令(也就是第一种啦,安装时加载驱动):

qemu-img create -f qcow2 /opt/win2k12r2-test.qcow2 15G

virt-install --name=win2k12r2-test --ram 2048 --vcpus=2 --os-type=windows --os-variant win2k12r2 --disk path=/opt/win2k12r2.qcow2,bus=virtio,size=15,format=qcow2  --accelerate --disk device=cdrom,path=/opt/cn_windows_server_2012_r2_vl_x64_dvd_2979220.iso --disk device=cdrom,path=/opt/virtio-win-0.1.102.iso   --vnc --vncport=5977 --vnclisten=0.0.0.0 --network bridge=br0 --force --autostart  --boot cdrom

在进入这个界面后,下一步需要选择驱动了: 

 

 

 

 

此时就可以看到磁盘,15G了,剩下的安装和物理机安装是一样的:

 

 第二种情况:

已有windows的操作系统

OK,如果安装命令使用的是IDE,也就是第二种情况,已有windows的操作系统,需要更新驱动,那么,这样的情况下如何安装virtio驱动呢?这里,有一点小技巧了:

假如安装命令使用的是IDE:

virt-install --name=win2k12r2 --ram 2048 --vcpus=2 --os-type=windows --os-variant win2k12r2 --disk path=/opt/win2k12r2.qcow2,bus=ide,size=15,format=qcow2  --accelerate --disk device=cdrom,path=/opt/cn_windows_server_2012_r2_vl_x64_dvd_2979220.iso    --vnc --vncport=5955 --vnclisten=0.0.0.0 --network bridge=br0 --force --autostart  --boot cdrom

这样的情况下,仍然是先把操作系统安装完毕,然后关闭虚拟机(以上面的命令为例):

关闭虚拟机:

virsh destroy win2k12r2
virsh undefine win2k12r2

创建一个临时磁盘:

qemu-img create –f qcow2 /opt/test.img 1G

由于上面是已经安装Windows操作系统完毕的,因此,是可以在/etc/libvirt/qemu目录下找到xml配置文件的

编辑配置文件,挂载光驱和临时磁盘,注意,这里cdrom是指定的IDE,临时磁盘是virtio,原来的磁盘仍然是IDE不改动:

<disk type='file' device='disk'>
    <driver type='qcow2' cache='writeback'/>
      <source file='/opt/test.img'/>
      <target dev='vdc' bus='virtio'/>
    </disk>

    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/opt/virtio-win-0.1.102.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>

启动kvm虚拟机,给临时磁盘安装virtio,驱动如何安装在这废话就不太好了,更新完驱动后,仍然是关闭虚拟机,删除以上增加的内容,此时,win2k12磁盘的IDE更改为virtio即可:

 第三种:

直接制作virtio驱动的iso系统镜像

这个我是没有制作成功,但网上能找到个别的其他人制作好的ISO镜像文件,例如,virtio_cn_windows_7_professional_with_sp1_vl_build_x64_dvd_u_677816.iso 这样的文件,这种文件使用起来非常的方便,简单。例如,以这个文件为例,启动一个win7,命令如下:

virt-install --name=win7 --ram 2048 --vcpus=2 --os-type=windows --os-variant win7 --disk path=/opt/win7.qcow2,bus=virtio,size=15,format=qcow2  --accelerate --disk device=cdrom,path=/opt/virtio_cn_windows_7_professional_with_sp1_vl_build_x64_dvd_u_677816.iso    --vnc --vncport=5999 --vnclisten=0.0.0.0 --network bridge=br0 --force --autostart  --boot cdrom

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/356148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Fastjson2基础使用以及底层序列化/反序列化实现探究

1 Fastjson2简介 Fastjson2是Fastjson的升级版&#xff0c;特征&#xff1a; 协议支持&#xff1a;支持JSON/JSONB两种协议部分解析&#xff1a;可以使用JSONPath进行部分解析获取需要的值语言支持&#xff1a;Java/Kotlin场景支持&#xff1a;Android8/服务端其他特性支持&a…

python基础知识有哪些需要背(记住是基础知识)我是初学者

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;一个有趣的事情&#xff0c;一个有趣的事情&#xff0c;今天让我们一起来看看吧&#xff01; 1、python基础知识有哪些需要背&#xff08;记住是基础知识&#xff09;我是初学者 或看好Python的广阔前景&#xff0c;或…

RabbitMQ 入门到应用 ( 五 ) 应用

6.更多应用 6.1.AmqpAdmin 工具类 可以通过Spring的Autowired 注入 AmqpAdmin 工具类 , 通过这个工具类创建 队列, 交换机及绑定 import org.springframework.amqp.core.AmqpAdmin; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.Di…

python基于django微信小程序的适老化老人健康预警小程序

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代, 适老化老人健康预警微信小程序就是信息时代变革中的产物之一。 任何系统都要遵…

Spring国际化实现

Java国际化 Java使用Unicode来处理所有字符。 Locales 国际化主要涉及的是数字、日期、金额等。 有若干个专门负责格式处理的类。为了对格式进行控制&#xff0c;可以使用Locale类。它描述了&#xff1a; 一种语言一个位置(通常包含)一段脚本(可选&#xff0c;自Java SE7开…

CMMI之需求开发流程

需求开发&#xff08;Requirement Development, RD&#xff09;的目的是通过调查与分析&#xff0c;获取用户需求并定义产品需求。需求开发过程域是SPP模型的重要组成部分。本规范阐述了需求开发过程域的两个主要规程&#xff1a; 需求调查 [SPP-PROC-RM-SURVEY] 需求定义 [SPP…

消失的数字【C语言】

题目&#xff1a; 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 解法&#xff1a; int missingNumber(int* nums, int numsSize){int val0;for(int i0;i<numsSize;i){val^nums[i];}fo…

Vue3之条件渲染

1.何为条件渲染 条件渲染就是在指定的条件下&#xff0c;渲染出指定的UI。比如当我们显示主页的时候&#xff0c;应该隐藏掉登录等一系列不相干的UI元素。即UI元素只在特定条件下进行显示。而在VUE3中&#xff0c;这种UI元素的显示和隐藏可以通过两个关键字&#xff0c;v-if 和…

Qt动画框架详解

目录1.前言2.原理3.属性动画4.并行执行的动画5.顺序执行的动画6.扩展属性动画支持的数据类型1.前言 为软件适当的添加一些动画&#xff0c;能够提高软件的用户体验。在使用Qt框架开发软件时&#xff0c;我们可以用Qt提供的动画框架来为QWidget等UI元素添加动画效果。本文从动画…

程序员和他的女朋友一起创建了价值 150,000,000 美元的网站

本篇文章讲述了Otis和Elizabeth Chandler创办Goodreads.com的故事。他们从小就爱读书&#xff0c;创办网站前他们的困惑是没有很多人在线分享书评。Otis和Elizabeth觉得如果有一个地方把所有人的评论和评价收集起来&#xff0c;那将会很有价值。奥蒂斯和伊丽莎白从小就喜欢读书…

MMKV与mmap:全方位解析

概述 MMKV 是基于 mmap 内存映射的移动端通用 key-value 组件&#xff0c;底层序列化/反序列化使用 protobuf 实现&#xff0c;性能高&#xff0c;稳定性强。从 2015 年中至今&#xff0c;在 iOS 微信上使用已有近 3 年&#xff0c;其性能和稳定性经过了时间的验证。近期已移植…

海量数据相似数据查询方法

1、海量文本常见 海量文本场景&#xff0c;如何寻找一个doc的topn相似doc&#xff0c;一般存在2个问题&#xff0c; 1)、两两对比时间o(n^2) 2)、高维向量比较比较耗时。 文本集可以看成(doc,word)稀疏矩阵&#xff0c;一般常见的方法是构建到排索引&#xff0c;然后进行归并…

论文投稿指南——中文核心期刊推荐(社会学)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

【论文精读】DeepWalk: Online Learning of Social Representations

DeepWalk: Online Learning of Social Representations 本文是我参加Datawhale的CS224W图机器学习时的笔记&#xff0c;第一次学习图机器学习&#xff0c;对DeepWalk这篇开山之作的理解。 论文的三位作者均来自纽约州立大学石溪分校&#xff0c;杨振宁和丘成桐也曾在此教学。 …

JavaScript内存泄露和垃圾回收机制

1、是什么&#xff1f;内存泄露&#xff08;Memory leak&#xff09;是在计算机科学中&#xff0c;由于疏忽或错误造成程序未能释放已经不再使用的内存。并非指内存在物理上的消失&#xff0c;而是应用程序分配某段内存后&#xff0c;由于设计错误&#xff0c;导致在释放该段内…

Spring Boot 项目介绍

Spring Boot 项目介绍 作为学习过 Java 的软件开发者&#xff0c;相信都知道 Spring 这一伟大的框架&#xff0c;它所拥有的强大功能之一就是可以集成各种开源软件。但随着互联网的高速发展&#xff0c;各种框架层出不穷&#xff0c;这就对系统架构的灵活性、扩展性、可伸缩性…

【项目精选】基于JSP物流信息网(论文+源码+视频)

点击下载源码 近年来&#xff0c;随着时代的进步&#xff0c;社会随之不断发展&#xff0c;经济也快速发展起来了&#xff0c;人民的消费水平在不断地提高&#xff0c;平常的实体店消费已经不能满足人们的需求&#xff1b;在者&#xff0c;互联网技术的不断发展也为电子商务的兴…

CSS Houdini

前言 最近看了几篇文章&#xff0c;是关于 CSS Houdini 的。作为一个前端搬砖的还真不知道这玩意&#xff0c;虽然不知道的东西挺多的&#xff0c;但是这玩意有点高大上啊。 Houdini 是一组底层 API&#xff0c;它们公开了 CSS 引擎的各个部分&#xff0c;从而使开发人员能够通…

Matlab搭建AlexNet实现手写数字识别

Matlab搭建AlexNet实现手写数字识别 个人博客地址 文章目录Matlab搭建AlexNet实现手写数字识别环境内容步骤准备MNIST数据集数据预处理定义网络模型定义训练超参数网络训练和预测代码下载环境 Matlab 2020aWindows10 内容 使用Matlab对MNIST数据集进行预处理&#xff0c;搭建…

基于Spring Boot框架的人事管理系统的设计与实现(程序+详细文档)

大家好✌&#xff01;我是CZ淡陌。这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路&#xff01; &#x1f345;更多优质项目&#x1f447;&am…