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對應的文件夾,較老的驅動目錄結構有點變化,如下所示

image

其中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

reference:http://wenku.baidu.com/link?url=g2-ZYBvADYEq1xOrn0B0teST-hSMvvbRHxP4A4aDEjjHoiKvoN0JBI3bpWkj01s_mIXSjVUvzOZScMdLUPwJJM4p0-WWbHj3eBgVMNbpBmy

二:安裝時加載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,彈出如下界面

image

輸入S,選擇合適的scsi設備(virtio)

image

然后按兩下回車就OK。剩下的就是一般的操作系統安裝步驟,不再贅述。

安裝完成效果如下

virtio_xpsp2

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連接,彈出如下安裝界面

image

使用virtio接口的硬盤,我們必須加載virtio硬盤驅動。如果不加載該驅動windows installer會無法找到虛擬磁盤,點擊加載驅動程序,瀏覽,選擇virtio驅動光盤,找到viostor下對應的版本驅動,

image

image

點擊下一步,安裝virtio磁盤驅動,隨后多出來一塊硬盤,同時安裝網卡的virtio驅動

image

剩下的就是一般的操作系統安裝步驟,不再贅述。效果如下:

image

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'>
  <model fallback='allow'>SandyBridge</model>
  <vendor>Intel</vendor>
  <feature policy='require' name='vme'/>
  <feature policy='require' name='dtes64'/>
  <feature policy='require' name='vmx'/>
  <feature policy='require' name='erms'/>
  <feature policy='require' name='xtpr'/>
  <feature policy='require' name='smep'/>
  <feature policy='require' name='pcid'/>
  <feature policy='require' name='est'/>
  <feature policy='require' name='monitor'/>
  <feature policy='require' name='smx'/>
  <feature policy='require' name='tm'/>
  <feature policy='require' name='acpi'/>
  <feature policy='require' name='osxsave'/>
  <feature policy='require' name='ht'/>
  <feature policy='require' name='dca'/>
  <feature policy='require' name='pdcm'/>
  <feature policy='require' name='pdpe1gb'/>
  <feature policy='require' name='fsgsbase'/>
  <feature policy='require' name='f16c'/>
  <feature policy='require' name='ds'/>
  <feature policy='require' name='tm2'/>
  <feature policy='require' name='ss'/>
  <feature policy='require' name='pbe'/>
  <feature policy='require' name='ds_cpl'/>
  <feature policy='require' name='rdrand'/>
</cpu>

這樣移植虛擬機到不同的芯片組的機器時就會有問題,比較好的解決方法就是添加qemu的commandline,具體差別體現在設備管理器中如下:

virtio_xpsp2virtio

左圖是是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.


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM