1. 程式人生 > >配置KVM下windows虛擬機器使用virtio驅動

配置KVM下windows虛擬機器使用virtio驅動

一、virtiod的介紹:

(參考官方文件:http://docs.fedoraproject.org/en-US/Fedora/13/html/Virtualization_Guide/chap-Virtualization-KVM_Para_virtualized_Drivers.html)

    Para-virtualized drivers are available for virtualized Windows guests running on KVM hosts. These para-virtualized drivers are included in the virtio package. The virtio package supports block (storage) devices and network interface controllers.
    Para-virtualized drivers enhance the performance of fully virtualized guests. With the para-virtualized drivers guest I/O latency decreases and throughput increases to near bare-metal levels. It is recommended to use the para-virtualized drivers for fully virtualized guests running I/O heavy tasks and applications.
    The KVM para-virtualized drivers are automatically loaded and installed on the following:

  • Any 2.6.27 or newer kernel.
  • Newer Ubuntu, CentOS, Red Hat Enterprise Linux.
  • Those versions of Linux detect and install the drivers so additional installation steps are not required.
    The following Microsoft Windows versions have should work KVM para-virtualized drivers:
  • Windows XP (32-bit only)
  • Windows Server 2003 (32-bit and 64-bit versions)
  • Windows Server 2008 (32-bit and 64-bit versions)
  • Windows 7 (32-bit and 64-bit versions)

預設情況下安裝好windows虛擬機器,採用普通的驅動,即硬碟和網絡卡都採用預設配置情況下,硬碟是 ide 模式;
而網絡卡工作在模擬的rtl 8139 網絡卡下,速度為100M 全雙工。採用 virtio 驅動後,網絡卡工作在 1000M 的模式下,硬碟工作是SCSI模式下

二、Windows安裝VirtIO驅動的兩種方法: 

1、使用IDE方式來安裝系統,安裝系統完成後,在guest中安裝virtio磁碟驅動,然後再修改kvm啟動引數,設定磁碟為virtio
(1)安裝完Windows後,建立一塊臨時的硬碟,將其設定為virtio模式新增到Windows中,並設定網絡卡模式為virio
(2)開機後將提示檢查到新硬體,然後安裝驅動程式後關機
(3)刪除新新增的臨時硬碟,將原來的硬碟設定為virtio模式,開機即可識別到硬碟與網絡卡都為virtio模式
2、在安裝時直接載入virtio驅動
因為已經有做好的windows映象檔案,所以此教程採用第一種方法


三、操作過程(包括前期準備):

1、確定機器是否支援虛擬化:(必要時需要在BIOS開啟VT)

egrep "(vmx|svm)" --color=always /proc/cpuinfo (顯示紅色)

2、安裝kvm、libvirt

apt-get install kvm qemu-kvm bridge-utils libvirt-bin virtinst
kvm:這個是KVM的核心,是一個核心模組。
qemu-kvm:KVM的裝置模擬,由開源虛擬化軟體QEMU中的管理工具演變而來。
bridge-utils:用於橋接網絡卡
libvirt-bin:虛擬機器命令列管理工具
virtinst:虛擬機器建立工具
這裡插一句:kvm已經和qemu合併了,源裡”kvm“和”qemu“都是指向“qemu-kvm”的虛包
PS:如果你的宿主機安裝有圖形介面,推薦你安裝圖形化管理工具 virt-manager,而且這個工具還支援SSH遠端連線(qemu+SSH)

3、配置橋接網絡卡

虛擬機器通過橋接的方式,才更加接近物理環境。配置如下:
vim /etc/network/interfaces
加入br0,把原來與eth0有關的配置註釋掉
然後新增br0,並且將eth0網路配置給br0
例如:以test60(192.168.7.60)為例:
auto br0
iface br0 inet static
  address 192.168.7.60
  netmask 255.255.255.0
  gateway 192.168.7.254
  bridge_ports eth0 # 橋接到eth0網絡卡

4、製作映象的過程不敘述,假設映象已經制作好,並安裝好作業系統

5、為虛擬機器建立xml配置文件,方便libvirt管理,也避免了每次用命令列建立啟動虛擬機器時要寫很多命令

注:也可以安裝virt-manager,使用圖形介面的形式安裝,可參考:
http://www-01.ibm.com/support/docview.wss?uid=swg21587905
http://hi.baidu.com/woailiuxiaomi/item/635361d93898782548e1ddc7#

保證img檔案格式和原來的一致:比如之前為qcow2,但是檔案中寫成raw,就無法啟動
例子:
<domain type='kvm'> 
  <name>win7-32</name>
  <memory>1048576</memory>
  <currentMemory>1048576</currentMemory> 
  <vcpu>1</vcpu>
  <os> 
    <type arch='x86_64' machine='pc'>hvm</type> 
    <boot dev='cdrom'/>
    <boot dev = 'hd'/>
  </os> 
  <features> 
    <acpi/> 
    <apic/> 
    <pae/> 
  </features> 
  <clock offset='localtime'/> 
  <on_poweroff>destroy</on_poweroff> 
  <on_reboot>restart</on_reboot> 
  <on_crash>destroy</on_crash> 
  <devices> 
    <emulator>/usr/bin/kvm</emulator> 
    <disk type='file' device='disk'> 
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/windows-virtio/win7-32.img'/>
      <target dev='hda' bus='ide'/> 
    </disk>
    <interface type='bridge'>
      <source bridge='br0'/>
      <mac address="00:16:3e:5d:aa:a9"/>
    </interface>
    <input type='mouse' bus='ps2'/> 
    <graphics type='vnc' port='-1' autoport='yes' listen = '0.0.0.0' keymap='en-us'/>
  </devices> 
</domain> 

5、準備好virtio驅動:

下載地址:http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/,下載最新的ISO檔案(virtio-win-0.1-81.iso)
在該ISO檔案中,包括好幾個資料夾,具體對應關係如下:

  • wxp: winxp 磁碟驅動
  • wnet: win2003磁碟驅動 
  • win7:win7磁碟驅動
  • wlh: win2008磁碟驅動 
  • xp: win xp/2003 網絡卡驅動
  • vista: win vista/7/2008 網絡卡驅動

6、手動申請一塊硬碟給該虛擬機器掛上,並把下載的iso也掛載在該虛擬機器上

qemu-img ceate -f qcow2 fake.img 10G
修改win-server-08的libvirt的配置檔案。增加如下內容:
<disk type='file' device='disk'> 
  <driver name='qemu' type='qcow2'/>
  <source file='/var/lib/windows-virtio/win7-32.img'/>
  <target dev='hda' bus='ide'/> 
</disk>
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/var/lib/windows-virtio/fake.img'/>
  <target dev='vdb' bus='virtio'/>
</disk>
<disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <source file='/var/lib/windows-virtio/virtio-win-0.1-81.iso'/>
  <target dev='hdc' bus='ide'/>
</disk>
其中cdrom是為了掛載iso檔案,以便安裝virtio的驅動。而fake.img是為了讓win能識別需要安裝virtio的驅動。
網絡卡部分直接新增<model type='virtio'/>就好了

7、重啟虛擬機器

重啟之後,在windows下的硬體管理器之中就能看到有標黃的需要安裝的驅動(硬碟驅動和網絡卡驅動),選擇在檔案系統裡安裝,在iso檔案裡找對應的版本的驅動
注意:在windows xp系統下如果選擇自動安裝會出現不成功,一定要手動選擇具體安裝路徑,具體可參考:http://lvii.github.io/system/2013/11/15/xp-sp3-kvm-network-virtio-install-failed/

8、更新xml檔案,刪掉新新增的磁碟資訊,並使原disk更新為SCSI格式

<disk type='file' device='disk'> 
  <driver name='qemu' type='qcow2'/>
  <source file='/var/lib/windows-virtio/win7-32.img'/>
  <target dev='vda' bus='virtio'/> 
</disk>

改完後,用virsh命令destroy並start重啟。在裝置管理器發現原硬碟項和網絡卡已變成virtio模式,安裝成功!

參考資料:

http://www.cnblogs.com/babybluevino/p/3472996.html
http://blog.chinaunix.net/uid-20776139-id-3481065.html
http://www.361way.com/kvm-windows-virtio/2816.html