制作Aliyun vhd镜像

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
  1. 准备好制作虚拟机镜像的工具,可以是:
    a) 打包好的虚拟机镜像
    b) 能在qemu-kvm运行的虚拟机
  2. 使用vhd-util创建符合要求大小的vhd虚拟磁盘
  3. 启动qemu-kvm虚拟机,硬盘格式选VirtIO
    a) 如果是linux shell console用户,注意/etc/libvirt/qemu/${VM_NAME}.xml中的driver type字段应该是vpcbus字段为virtio,如下图
    制作Aliyun vhd镜像_第1张图片
    libvirt config

b) 如果是virt-manager,对应的窗口应该如下图


制作Aliyun vhd镜像_第2张图片
virt-manager
  1. 通过任何方法,将虚拟机操作系统安装在vhd虚拟磁盘上。对于手头有qemu-kvm虚拟机镜像的朋友,建议不要图省事直接dd拷贝磁盘。这样会使制作出来的vhd磁盘大小直逼raw。建议将源系统打包,然后在分好区的vhd虚拟磁盘中解包,最后装bootloader
  2. 测试镜像是否能在qemu-kvm环境成功运行。如果没有问题,便可以将vhd拷出来,传到Aliyun上了
Trouble shooting

Q: driver type选择vpc后启动虚拟机报错Driver 'vpc' can only be used for read-only devices
A: 这个问题与qemu的配置有关系,需要重新编译qemu

  1. 从这篇有关qemu介绍的文章中可知,默认情况下的vpc格式是只读的,因此不支持制作dynamic vhd的kvm虚拟机镜像
  2. CentOS中支持kvm的qemu主要是通过yum install qemu-kvm安装,该qemu-kvm是不支持vpc的
  3. 手动编译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`安装的有区别)
  1. 安装libvirt virt-install virt-manager等工具,注意一定不要安装qemu-kvmqemu-kvm-ev之类有qemu-kvm字样的包,否则会覆盖手动编译的qemu,成为libvirt首选的emulator
  2. 现在应该可以使用virt-install/virt-manager(GUI)挂载vhd格式的磁盘了

你可能感兴趣的:(制作Aliyun vhd镜像)