在计算机虚拟化中,Virtio是一种半虚拟化解决方案,即需要对Guest OS进行一定的修改(安装相应的驱动程序),能够对虚拟机的I/O性能进行大幅的提升。在QEMU+KVM的环境中,Virtio的后端驱动由QEMU程序提供,不需要额外的安装,而前端驱动则位于Guest OS中,需要将相应OS类型的驱动程序安装到Guest OS中。

本文以QEMU+KVM为VMM,以Win 7为Guest OS,展示如何在Guest OS上安装Virtio SCSI驱动。

由于在Guest OS在没有安装Virtio驱动的时候,无法使用Virtio设备,同时Guest OS在没有VIrtio设备的时候,也可能无法正确安装Virtio驱动,故需要一定的方法绕过该问题,即先给虚拟机一个空的Virtio SCSI设备用于安装Virtio SCSI驱动程序,等安装完毕后,再将虚拟机镜像绑定到Virtio SCSI控制器上。如果在虚拟机没有安装Virtio SCSI驱动的情况下,直接将虚拟机镜像绑定到Virtio SCSI设备上的话,将会导致虚拟机无法启动。

 

1. 按照正常的步骤创建虚拟机,并启动。

执行下列命令创建一个容量为40GB的磁盘文件,用作虚拟机的磁盘

qemu-img create -f qcow2 win7.img 40G

执行下列命令启动虚拟机,并将win7系统安装到win.img所制定的虚拟机磁盘中。

qemu-system-x86_64 -enable-kvm -smp 2 -m 2048 -hda win7.img -cdrom cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso

2. 下载virtio驱动

下载地址页面:https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html 如:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

3. 利用下列命令启动虚拟机,虚拟机镜像先还是以传统的hda形式传进去,并且将下载的virtio-win.iso以cdrom的形式传进虚拟机,最后还得给虚拟机创建一个virtio的设备那样windows才能正确安装virtio驱动(好像,如果没有virtio设备,windows是无法正确安装virtio驱动的,这点很重要)

这里以virtio-blk-pci设备为例(virtio是一类I/O设备的统称,可以有很多中,如block、net、serial等),并且virtio-blk-pci设备在传进虚拟机的时候,得有个对应的磁盘文件,这里就创建一个10GB的空的磁盘文件。

qemu-img create -f qcow2 fake.img 10G

然后执行下列命令

qemu-system-x86_64 -enable-kvm -smp 2 -m 2048 -hda win7.img -cdrom virtio-win.iso -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0 -drive file=fake.img,format=qcow2,if=none,id=drive-virtio-disk0,cache=writeback

启动虚拟机后发现在CDROM中已经自动加载了virtio-win.iso镜像

虚拟机里面下载kvm虚拟机厚为什么ping不通 kvm虚拟机驱动_虚拟化

同时在设备管理器中找到了带感叹号的SCSI控制器

虚拟机里面下载kvm虚拟机厚为什么ping不通 kvm虚拟机驱动_I/O虚拟化_02

右击该设备,选择更新驱动程序,然后选择“浏览计算机以查找驱动程序软件”,在搜索位置上选择加载的CDROM(可以发现,在该iso镜像中包含了很多种I/O设备的virtio驱动,并且每种virtio驱动的目录下都对应有不同的OS类型),这里不需要自己手动选择这些,只需要选择“CD驱动器”即可,让系统自动搜索合适的驱动程序。

虚拟机里面下载kvm虚拟机厚为什么ping不通 kvm虚拟机驱动_Virtio_03

然后下一步,自动搜索到了Virtio SCSI controller的驱动程序了,选择安装。

虚拟机里面下载kvm虚拟机厚为什么ping不通 kvm虚拟机驱动_虚拟化_04

至此驱动程序安装完毕

虚拟机里面下载kvm虚拟机厚为什么ping不通 kvm虚拟机驱动_虚拟化_05

关闭虚拟机。

4. 将虚拟机镜像win7.img绑定到Virtio SCSI设备上,重新启动虚拟机,执行如下命令(不需要cdrom和fake.img了):

qemu-system-x86_64 -enable-kvm -smp 2 -m 2048 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0 -drive file=win7.img,format=qcow2,if=none,id=drive-virtio-disk0,cache=writeback

会发现,虚拟机启动快多了,这是因为虚拟机使用了半虚拟化的Virtio SCSI控制器,大大加快了虚拟机磁盘读写的速度。