KVM下windows虚拟机使用virtio驱动
KVM下windows虚拟机默认disk使用的是Qemu IDE硬盘,网卡默认是rtl8139网卡。为了使kvm主机在相同的配置下,有更好的效率,可以将网卡和磁盘替换成virtio的驱动。
windows的virtio驱动主要包括网卡以及磁盘的驱动,主要有三种方式,第一种是已有windows的操作系统,需要更新驱动,第二种是是安装时加载virtio驱动,第三种是直接制作virtio驱动的iso系统镜像。
一:更新virtio驱动
1.修改xml文件
原始xml文件
<disk type=‘file‘ device=‘disk‘>
<driver name=‘qemu‘ type=‘qcow2‘ cache=‘writeback‘/>
<source file=‘/polydata/image/winxp_sp2.qcow2‘/>
<target dev=‘hda‘ bus=‘ide‘/>
<address type=‘drive‘ controller=‘0‘ bus=‘0‘ target=‘0‘ unit=‘0‘/>
</disk>
<interface type=‘bridge‘>
<mac address=‘52:54:00:33:a4:19‘/>
<source bridge=‘br0‘/>
<model type=‘rtl8139‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/>
</interface>
输入命令virsh edit winxp_sp2修改如下
<disk type=‘file‘ device=‘disk‘>
<driver name=‘qemu‘ type=‘qcow2‘ cache=‘writeback‘/>
<source file=‘/polydata/image/winxp_sp2.qcow2‘/>
<target dev=‘hda‘ bus=‘ide‘/>
<address type=‘drive‘ controller=‘0‘ bus=‘0‘ target=‘0‘ unit=‘0‘/>
</disk>
<disk type=‘file‘ device=‘cdrom‘>
<driver name=‘qemu‘ type=‘raw‘/>
<source file=‘/tmp/virtio-win-0.1.96.iso‘/>
<target dev=‘hdc‘ bus=‘ide‘/>
<readonly/>
<address type=‘drive‘ controller=‘0‘ bus=‘1‘ target=‘0‘ unit=‘0‘/>
</disk>
<disk type=‘file‘ device=‘disk‘>
<driver type=‘qcow2‘ cache=‘writeback‘/>
<source file=‘/tmp/test.img‘/>
<target dev=‘vdc‘ bus=‘virtio‘/>
</disk>
<interface type=‘bridge‘>
<mac address=‘52:54:00:33:a4:19‘/>
<source bridge=‘br0‘/>
<model type=‘virtio‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/>
</interface>
其实原始disk不用修改,只需要添加virtio-win.iso的cdrom、virtio类型的临时disk,以及将网卡修改为virtio类型。
2.创建磁盘:qemu-img create –f qcow2 /tmp/test.img 1G,将驱动复制到/tmp/virtio-win-0.1.96.iso,驱动下载地址 https://fedoraproject.org/wiki/Windows_Virtio_Drivers,可以打开https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/下载不同版本的驱动
3.更新驱动:virsh start winxp_sp2,使用vnc连接,系统会提示找到新硬件,弹窗安装驱动的窗口(SCSI和网卡),安装时尽量不要自动搜索,而是手动搜索,不同的操作系统路径如下:
磁盘 | 网卡 | |
XP | viostor\xp\x86\viostor.inf | NetKVM\xp\x86\netkvm.inf |
2k3 | viostor\2k3\x86\viostor.inf | NetKVM\2k3\x86\netkvm.inf |
win7 | viostor\w7\x86\viostor.inf | NetKVM\w7\x86\netkvm.inf |
如果是64位的OS,则寻找amd64对应的文件夹,较老的驱动目录结构有点变化,如下所示
其中WLH对应win2008,WNET对应win2003,WXP对应XP,XP文件夹里则只包含XP的网卡驱动
注1:如果打开虚拟机后未弹出自动更新驱动的对话框,则右击我的电脑—>管理—>设备管理器,会看到感叹号的SCSI以及网卡,右击更新驱动,按照上述步骤更新virtio驱动。
注2:对于xp系统来说virtio-win驱动版本很重要,一开始一直安装不成功就是因为驱动版本信息不对,如果安装过程很慢则基本就是驱动版本不对,换个驱动试试,经测试,针对xpsp2/xpsp3的操作系统,virtio-win-0.1.96版本可用,而针对win7sp1的操作系统,稳定版virtio-win-0.1.102可用。
4.关闭虚拟机,virsh edit winxp_sp2修改xml文件,删除cdrom和临时装载的disk内容,原始disk内容修改如下
<disk type=‘file‘ device=‘disk‘>
<driver name=‘qemu‘ type=‘qcow2‘ cache=‘writeback‘/>
<source file=‘/polydata/image/winxp_sp2.qcow2‘/>
<target dev=‘vda‘ bus=‘virtio‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x05‘ function=‘0x0‘/>
</disk>
5.启动虚拟机可发现磁盘和网卡的驱动都已更新
二:安装时加载virtio驱动
1.xp/2k3
1.1 新建磁盘镜像 qemu-img create -f qcow2 /polydata/image/winxp_sp2_backup.qcow2 10G
1.2 准备驱动软盘(/tmp/virtio-win-0.1.96_x86.vfd)以及系统iso安装文件(/tmp/xpsp2_netkvm.iso,最好是已经集成virtio网卡驱动的镜像)
1.3 安装系统
virt-install --virt-type kvm --name winxp_sp2_backup --ram 512 --os-type=windows --os-variant=winxp --disk path=/polydata/image/winxp_sp2_backup.qcow2,format=qcow2,bus=virtio,cache=writeback --disk path=/tmp/virtio-win-0.1.96_x86.vfd,device=floppy --network bridge=br0,model=virtio --cdrom=/tmp/xpsp2_netkvm.iso --graphics vnc,listen=0.0.0.0 –noautoconsole
安装2k3系统时需要将--os-variant设置为win2k3
1.4 vnc连接,虚拟机起来后按F6,弹出如下界面
输入S,选择合适的scsi设备(virtio)
然后按两下回车就OK。剩下的就是一般的操作系统安装步骤,不再赘述。
安装完成效果如下
2.win7
1.1 新建磁盘镜像 qemu-img create -f qcow2 /polydata/image/win7_sp1_backup.qcow2 20G
1.2 准备驱动光盘(/tmp/virtio-win-0.1.102)以及系统iso安装文件(/tmp/win7sp1.iso)
1.3 安装系统
virt-install --virt-type kvm --name win7_sp1_backup --ram 1024 --os-type=windows --os-variant=win7 --disk path=/polydata/image/win7_sp1_backup.qcow2,bus=virtio,format=qcow2,cache=writeback --network bridge=br0,model=virtio --cdrom=/tmp/win7sp1.iso --disk path=/tmp/virtio-win-0.1-102.iso,device=cdrom --graphics vnc,listen=0.0.0.0 --noautoconsole
1.4 vnc连接,弹出如下安装界面
使用virtio接口的硬盘,我们必须加载virtio硬盘驱动。如果不加载该驱动windows installer会无法找到虚拟磁盘,点击加载驱动程序,浏览,选择virtio驱动光盘,找到viostor下对应的版本驱动,
点击下一步,安装virtio磁盘驱动,随后多出来一块硬盘,同时安装网卡的virtio驱动
剩下的就是一般的操作系统安装步骤,不再赘述。效果如下:
reference:http://www.mamicode.com/info-detail-126255.html
三:制作virtio驱动的iso系统镜像
此方法主要使用nlite(xp/2k3)和dism(win7/20008…)工具,具体参见https://miefen.com/201405/how-to-install-virtio-drivers-for-windows
按照教程使用nlite添加磁盘和网卡的virtio驱动,但是安装的时候始终提示找不到scsi的驱动,驱动版本也是用的virtio-win-0.1.96.iso。但却有人制作成功过(用的是virtio-win-0.1-74.iso),本人尝试未果。