之前都是在用Linux 虛機,現在有需要用到Win7 虛機,才發現在 KVM 上安裝 Win7 的過程遠比想象中的復雜。本文就把其過程做個簡單總結。
1. 在 Virtual Machine Manager 里面安裝
首先嘗試在 Virtual Machine Manager 里面安裝。遇到的問題如下:
(1)一直停留在 starting windows 界面。
解決方法:修改 video model 為 Cirrus,問題解決。
(2)開始安裝后,對鼠標和鍵盤無響應。
google,發現需要使用 <input type=’tablet’ bus=’usb’/>。添加一個:
但是鍵盤還是不好使。。算了,還是轉到使用 qemu-system-x86_64 命令啟動虛機吧。
2. 使用 qemu-system-x86_64 啟動 Win 7 虛機
2.1 環境准備
(1)下載 Windows virtio driver iso:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.102/,因為要將磁盤掛接為 virtio 磁盤。
(2)創建系統盤 qemu-img create -f raw win7.img 30G,這將作為Win7的操作系統盤。
(3)創建啟動腳本
#!/bin/sh DISKIMG=/home/s1/win7.img WIN7IMG=/home/s1/en_windows_7_enterprise_x64_dvd_x15-70749.iso VIRTIMG=/home/s1/virtio-win-0.1.102.iso qemu-system-x86_64 --enable-kvm -drive file=${DISKIMG},if=virtio -m 2048 \ -net nic,model=virtio -net user -cdrom ${WIN7IMG} \ -drive file=${VIRTIMG},index=3,media=cdrom \ -rtc base=localtime,clock=host -smp cores=2,threads=4 \ -usbdevice tablet -cpu host -name win7 -vnc :5 -device cirrus-vga,id=video0,bus=pci.0,addr=0x4
(4)可以運行腳本了,然后通過 VNC 進入界面,進入下面部分。
2.2 安裝 Win 7
(1)選擇 Custom(advanced)
(2)選擇 virtio 磁盤
(3)選擇 virtio disk driver
(4)安裝 Win7 Virtio SCSI Driver
(5)安裝好以后,就可以看到安裝的目標磁盤了
(6)進入常規的 Win7 安裝流程
3. 安裝其它 Virtio 驅動
(1)網絡驅動
但是安裝失敗:
嘗試 device manager:
但是還是失敗:
(2)Baloon driver
Device manager, 右鍵 root device, add legacy hardware, next, install manually (advanced), next, have disk, browse, select inf, install.
改成此方法安裝 network 驅動成功。注意將虛機重啟從而使得安裝生效。
(3)詭異的問題
通過上面方法得到的 Win7 raw 格式的鏡像文件可以直接使用來創建新的虛機,這些新的虛機會使用 virtio network driver。
但是,在 OpenStack 環境和中,Nova 首先將 qcow2 格式的鏡像從glance 中下載到計算節點上,然后將它轉化為 raw 格式作為 backfing file,再創建一個 qcow2 文件,它使用 raw 文件作為 backing file。如下圖所示:
root@linuxkvm1:/home/s1# qemu-img info /var/lib/nova/instances/1d157798-848d-4dc0-9663-7343083ec943/disk image: /var/lib/nova/instances/1d157798-848d-4dc0-9663-7343083ec943/disk file format: qcow2 virtual size: 30G (32212254720 bytes) disk size: 1.3G cluster_size: 65536 backing file: /var/lib/nova/instances/_base/d074d3233a25bf3d10fdc4915e2c7913aebf39ee Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false root@linuxkvm1:/home/s1# qemu-img info /var/lib/nova/instances/_base/d074d3233a25bf3d10fdc4915e2c7913aebf39ee image: /var/lib/nova/instances/_base/d074d3233a25bf3d10fdc4915e2c7913aebf39ee file format: raw virtual size: 30G (32212254720 bytes) disk size: 7.1G
詭異的是,OpenStack 中新建的虛機不能使用 virtio network driver:
但是,
- 如果使用backing file 直接啟動虛機,則沒有這個問題。
- 使用同樣的 backing file 創建一個新的 qcow2 文件,則沒有這個問題
具體原因應該和 Nova 的具體邏輯有關,將來再查,現在暫時使用 SCSI network driver。
參考文檔: