KVM下windows虛擬機使用virtio驅動

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

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.

相關文章
相關標籤/搜索