媒介:
云盘算里根本都是基于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
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_BLK、CONFIG_VIRTIO_NET、CONFIG_SCSI_VIRTIO、CONFIG_VIRTIO_PCI,他们分别表现virtio_blk、virtio_net、virtio_scsi、virtio_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
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |