准备

需要的镜像和工具:

(1)系统:中标麒麟7.4 (国产操作系统,类似于CentOS)

(2)虚拟机软件:VMware Workstation 12版本/VirtualBox (windows版本,MAC版本的没有测试)

(3)vmdk转vhd格式转换工具:winima90.exe,也可以使用阿里云 qemu-img 工具,也可以使用 DiskGenius软件 或参考 DiskGenius格式转换

(4)开通阿里云对象存储oss,创建存储空间(Bucket名字)。

镜像格式转换

由于创建 VMware 虚拟机生成的主体文件是 vmdk 后缀格式的,阿里云 ECS 只支持导入RAW、VHD和qcow2格式的镜像文件。其他镜像文件,需要转换格式后再导入。

qemu-img能将RAW、qcow2、VMDK、VDI、VHD(vpc)、VHDX、qcow1或QED格式的镜像转换成VHD格式,也可以实现RAW和VHD格式的互相转换。

winima90.exe 是安装在 windows 系统上的软件,体积小易安装,支持多种格式转换,本次测试使用它来进行虚拟机镜像文件的转换工具。

创建阿里云自定义镜像

主要步骤如下:

创建虚拟机文件

打开 VMware Workstation 软件,创建一个虚拟机,分配动态磁盘空间为 40G ,如下图所示:

说明⚠️:

  • 一般来说平常使用 VMware 创建虚拟机,有两种构建磁盘文件的方式(如上图所示):

第一种:使用单个文件存储虚拟磁盘;

第二种:多个文件存储虚拟磁盘。

其中第二种方式将虚拟磁盘拆分为多个文件,可以更轻松地在计算机之间移动虚拟机,但可能会降低大容量磁盘的性能。第一种方式将虚拟磁盘存储为单个文件,虽然提高了磁盘的读写性能,但是对于对于大文件的移动和存储是一个问题。就该问题本文对于这两种方式之间的转换做了一个总结,并使用具体例子,详解了如何通过VMware自带的磁盘管理工具,来对虚拟磁盘文件进行分割与合并。

  • 本次测试选择多个文件存储虚拟磁盘。

安装麒麟操作系统

中标麒麟操作系统安装与CentOS是一样的,除了 LOGO 不一样,囧~

详细系统分区情况如下:

根目录/:37G

/boot目录:1G

swap:2G

说明⚠️:

  • 这里创建的虚拟机相当于一个模版,当它被制作成自定义镜像,在阿里云实例上启动后,登录启动的实例,你会发现系统分区的大小就是上面你所定义的大小。换句话说,你需要系统盘多大,最好在创建虚拟机时就定义多大。

  • 最好不要挂载数据盘,数据盘可以后期创建阿里云 ECS 实例时挂载或创建阿里云 ECS 实例后挂载,均是可以的。

VMware虚拟机虚拟磁盘的合并

根据上面的两个步骤,我们完成了麒麟操作系统的安装与部署,现在关闭部署好的麒麟虚拟机。这个步骤我们需要了解两点:

  • 虚拟磁盘管理工具使用:vmware-vdiskmanager

  • 多个虚拟磁盘文件合并为单个文件

下面我们一步一步操作,具体步骤如下:

(1)vmware-vdiskmanager

VMware提供了虚拟磁盘管理工具vmware-vdiskmanager。使用命令行可以管理虚拟磁盘文件,包括磁盘的。它有许多功能,使用命令vmware-vdiskmanager.exe -h可以查看它所有的功能(如下图):

说明⚠️:

  • vmware-vdiskmanager.exe 路径默认在 VMware Workstation 虚拟机安装路径目录下。

  • -r 参数指定源磁盘文件;-t 参数指定输出虚拟磁盘文件的类型,其值为以下类型之一:

0:创建一个包含在单一虚拟文件中的可增长虚拟磁盘

1:创建一个被分割为每个文件2GB大小的可增长虚拟磁盘

2:创建一个包含在单一虚拟文件中的预分配虚拟磁盘

3:创建一个被分割为每个文件2GB大小的预分配虚拟磁盘

(2)多文件的合并

如图所示,将图中名为Windows Server 2003 Enterprise Edition.vmdk的文件以及名为Windows Server 2003 Enterprise Edition-sXXX.vmdk的文件合并为一个名为Merged.vmdk的文件。

打开命令行界面并切换到VMware Workstation目录,输入命令:

vmware-vdiskmanager.exe -r "D:\Virtual Machines\Windows Server 2003 Enterprise Edition.vmdk" -t 0 "D:\Virtual Machines\Merged.vmdk"

命令的格式是:vmware-vdiskmanager.exe -r [源文件] -t 0 [目标文件]

其中[源文件]是待转换的文件;[目标文件]是转换后生成的文件(此文件在系统中是不存在的,只有转换后才存在。所以需要自己为其命名,后缀名为.vmdk);-t后的参数是0表示将源文件合并为一个目标文件。

多文件合并为单文件过程如下:

vmdk到vhd文件格式转换

安装winimage支持各种格式互相转换,如下:

选择源,注意红色箭头,选择vmdk

最后再选择保存位置即可得到一个vhd的磁盘文件。

这一步我们也可以使用阿里云提供的 qemu-img 工具

使用阿里云OSS

主要步骤如下:

(1)开通OSS服务

(2)创建存储空间

(3)上传文件

说明⚠️:关于上传文件,我这里说明下,如果待上传文件大小 5G ,可以通过OSS控制台直接上传。反之,需要使用分片上传和断点续传 ossutil 工具。

使用阿里云ossutil

上面我们生成的 vhd 文件大小是 40G ,所以使用阿里云ossutil工具进行文件的上传工作,MAC电脑下操作命令举例如下:

./ossutilmac64 cp /Users/wtf/Documents/操作系统ISO/zhongbiaoqolin7.4.vhd oss://datagrand-iso/iso-qilin

命令格式:./ossutilmac64 cp a.txt oss://bucket/path

关于阿里云ossutil常用命令的使用详见 命令行工具ossutil概述

导入自定义镜像

主要步骤如下:

(1)登录ECS管理控制台。

(2)在左侧导航栏,单击镜像 > 导入镜像。

说明⚠️:

  • 在导入镜像对话框里,单击提示信息第3步中的确认地址。否则会报权限错误~

  • OSS Object地址,可以在OSS管理控制台中,找到你创建的Bucket空间名字,点击该空间中文件后的详情,复制里面的URL即可。

  • 系统平台选择 CentOS(因为本文使用的是中标麒麟7.4系统),当然你也可以选择 Other Linux,但是需要做一定的配置工作。更多的系统平台类型,详见阿里云导入镜像必读

  • 镜像格式本次选择VHD

(3)点击“确定”,等待完成就行。

使用自定义镜像创建实例

根据上面的步骤,我们已经创建好所需的自定义镜像,当我们创建实例选择镜像 --> 自定义镜像 --> 中标麒麟-7.4(上面制作的)即可。

说明⚠️:创建的实例要和自定义的镜像都在同一个区域,如华北2(北京)。

参考文档

(1)VMware虚拟机虚拟磁盘的分割与合并

(2)Vmware(vmdk)虚拟机到hyperv(vhd)虚拟机转换

(3)HOW TO MERGE MULTIPLE VMDK’S INTO SINGLE VMDK