Preface
阿里云僅支持raw和vhd兩種鏡像格式的導入,而且對這兩種格式都有較為嚴格的要求。
- vhd格式:阿里云完全適配使用vhd-util制作出來的vhd格式,但不支持qemu-img制作或者轉換得到的vhd。因此,手頭有qcow2等鏡像格式的沒有必要嘗試轉成vhd了,不大可能成功
- raw格式:鏡像文件必須是1M對齊,分區建議4K對齊
vhd Creator Application字段必須是"tap" (可以使用
vhd-util read -n ${VHD_NAME}.vhd -p
查看),ECS存儲完全適配的是使用vhd-util2
工具做出來的vhd文件
Environment
因為raw格式制作出來的鏡像很大 (一般raw的鏡像要幾十G左右,而qcow2或vhd在幾G左右),延長了debug周期,不做考慮。
選擇vhd格式的鏡像就要先打造虛擬化環境,有下面兩種開發環境可供選擇:
- qemu-kvm + xen-runtime (推薦):采用qemu-kvm虛擬化平臺便于對做好的vhd格式的鏡像進行校驗,而
vhd-util
是Xen平臺提供的管理虛擬塊設備的工具
vhd-util CentOS環境推薦用
yum
安裝
yum install xen-runtime.x86_64
也可以通過搜索vhd-util
依賴的so及elf的方式進行精簡安裝,但從網上能搜到的elf來看,64位系統有可能需要解決multilab的問題,故不推薦
- Xenserver + kvm:需要兩臺物理機,一臺安裝Citrix Xenserver用于制作vhd格式的鏡像,另一臺安裝kvm用于驗證。對于怕把現有虛擬化環境搞壞的朋友,這是一種好的選擇
以第一種環境為例,一般需要安裝如下幾個軟件包:
- qemu-kvm (注意,使用CentOS的朋友不要采取
yum
安裝的方式,要手動編譯,見Troubleshooting) - xen-runtime
- libvirt和virt-manager (Optional, 可以方便管理虛擬機)
Install
- 準備好制作虛擬機鏡像的工具,可以是:
a) 打包好的虛擬機鏡像
b) 能在qemu-kvm運行的虛擬機 - 使用
vhd-util
創建符合要求大小的vhd虛擬磁盤 - 啟動qemu-kvm虛擬機,硬盤格式選VirtIO
a) 如果是linux shell console用戶,注意/etc/libvirt/qemu/${VM_NAME}.xml
中的driver type
字段應該是vpc
,bus
字段為virtio
,如下圖
libvirt config
b) 如果是virt-manager,對應的窗口應該如下圖
virt-manager
- 通過任何方法,將虛擬機操作系統安裝在vhd虛擬磁盤上。對于手頭有qemu-kvm虛擬機鏡像的朋友,建議不要圖省事直接
dd
拷貝磁盤。這樣會使制作出來的vhd磁盤大小直逼raw。建議將源系統打包,然后在分好區的vhd虛擬磁盤中解包,最后裝bootloader - 測試鏡像是否能在qemu-kvm環境成功運行。如果沒有問題,便可以將vhd拷出來,傳到Aliyun上了
Trouble shooting
Q: driver type選擇vpc后啟動虛擬機報錯Driver 'vpc' can only be used for read-only devices
A: 這個問題與qemu的配置有關系,需要重新編譯qemu
- 從這篇有關qemu介紹的文章中可知,默認情況下的vpc格式是只讀的,因此不支持制作dynamic vhd的kvm虛擬機鏡像
- CentOS中支持kvm的qemu主要是通過
yum install qemu-kvm
安裝,該qemu-kvm是不支持vpc的 - 手動編譯qemu(下載qemu-kvm源碼)并將vpc加入configure的
--block-drv-rw-whitelist
列表,下面是一個例子
```bash
./configure --enable-kvm --block-drv-rw-whitelist=vpc,qcow2
```
> **注** CentOS中,手動編譯的qemu并沒有`/usr/libexec/qemu-kvm`(和`yum`安裝的有區別)
- 安裝
libvirt
virt-install
virt-manager
等工具,注意一定不要安裝qemu-kvm
和qemu-kvm-ev
之類有qemu-kvm字樣的包,否則會覆蓋手動編譯的qemu,成為libvirt首選的emulator - 現在應該可以使用
virt-install/virt-manager(GUI)
掛載vhd格式的磁盤了