KVM下windows虚拟机默认disk使用的是Qemu IDE硬盘,网卡默认是rtl8139网卡。为了使kvm主机在相同的配置下,有更好的效率,能够将网卡和磁盘替换成virtio的驱动。html
windows的virtio驱动主要包括网卡以及磁盘的驱动,主要有三种方式,第一种是已有windows的操做系统,须要更新驱动,第二种是是安装时加载virtio驱动,第三种是直接制做virtio驱动的iso系统镜像。ios
一:更新virtio驱动es6
1.修改xml文件windows
原始xml文件dom
<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>
ide
<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类型。ui
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驱动
备注:xp/sp3使用virtio-win-0.1.96_x86.vfd的驱动,win7使用virtio-win-0.1.102.iso的驱动
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),本人尝试未果。
磁盘cache改成writeback
<driver name='qemu' type='qcow2' cache='writeback'/>
添加qemu支持可是libvirt不支持的优化选项
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
<qemu:commandline>
<qemu:arg value='-cpu'/>
<qemu:arg value='host,-hypervisor'/>
</qemu:commandline>
其实virt-install 中有—cpu host选项,只是若是新建虚拟机时加上此选项,生成的xml文件中会带有cpu的model和features
<cpu mode='custom' match='exact'> |
这样移植虚拟机到不一样的芯片组的机器时就会有问题,比较好的解决方法就是添加qemu的commandline,具体差异体如今设备管理器中以下:
左图是是qemu模式,右图是host模式,将宿主机的cpu暴露出来
--cpu host Expose the host CPUs configuration to the guest. This enables the guest to take advantage of many of the host CPUs features (better performance), but may cause issues if migrating the guest to a host without an identical CPU.