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
,如下图
b) 如果是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格式的磁盘了