# 阿里云

以下内容来源至阿里云官方文档

# 一、创建自定义镜像

  1. 登录ECS管理控制台。
  2. 在左侧导航栏,单击实例与镜像 > 实例。
  3. 在顶部菜单栏左上角处,选择地域。
  4. 找到目标实例。在操作列中,单击更多 > 磁盘和镜像 > 创建自定义镜像。
  5. 输入镜像名称和描述信息。
  6. 单击创建。

说明 所有磁盘的快照全部创建结束后,镜像才能使用。请耐心等待。

以下示例演示了如何使用实例创建自定义镜像。

image_create_flow

详情请参见使用实例创建自定义镜像

# 二、导出自定义镜像

  1. 登录ECS管理控制台。
  2. 在左侧导航栏,单击实例与镜像 > 镜像。
  3. 在顶部菜单栏左上角处,选择地域。
  4. 授权ECS服务访问OSS的权限。

Ⅰ 找到要导出的目标镜像,在操作栏,单击menu图标,然后单击导出镜像。 Ⅱ 在导出镜像对话框,单击提示信息里的确认地址。 image_export_chart Ⅲ 在云资源访问授权对话框,单击同意授权授权ECS服务访问您的OSS资源。

  1. 在左侧导航栏,单击实例与镜像 > 镜像。
  2. 在自定义镜像列表页签,找到目标镜像,在操作列,再次单击更多 > 导出镜像。
  3. 在导出镜像对话框,配置如下参数。
  • 选择镜像导出的格式,支持RAW、VHD、QCOW2、VDI和VMDK。
  • 选择一个与自定义镜像所属地域相同的OSS Bucket。
  • 为自定义镜像的Object名称设置一个前辍。例如,将Demo设为前辍,则导出自定义镜像文件后,在OSS Bucket中的名称即为Demo-[系统自动生成的文件名]。
  1. 单击确定,开始导出自定义镜像。 在任务完成前,您都可以通过任务管理,在相应地域下找到导出自定义镜像的任务,取消导出自定义镜像。

详情请参见导出镜像

# 三、获取自定义镜像下载链接

  1. 登录OSS管理控制台。
  2. 单击Bucket列表,之后单击目标Bucket名称。
  3. 单击文件管理页签,进行分享文件操作。
  • 单击目标文件的文件名或其右侧的详情,在弹出的详情面板中单击复制文件URL,之后将复制的文件URL发送给对方即可。 文件URL可以用来下载或预览文件。
  • 如果您要分享的是私有文件,则在获取文件URL时还需要设置链接有效时间。默认的链接有效时间为3600秒(1小时),最大值为32400秒(9小时)。

详情请参见下载或分享文件

# 腾讯云

以下内容来源至腾讯云官方文档

# 一、制作自定义镜像

  1. 登陆腾讯云主机。
  2. 安装软件制作主机镜像,制作流程分Linux和Windows两种操作系统。

# Linux

检查 OS 分区和启动方式

  1. 执行以下命令,检查 OS 分区是否为 GPT 分区。
sudo parted -l /dev/sda | grep 'Partition Table'
  • 若返回结果为 msdos,即表示为 MBR 分区,请执行下一步。
  • 若返回结果为 gpt,即表示为 GPT 分区。目前服务迁移不支持 GPT 分区,请 [提交工单]反馈。
  1. 执行以下命令,检查操作系统是否以 EFI 方式启动。
sudo ls /sys/firmware/efi
  • 若存在文件,则表示当前操作系统以 EFI 方式启动,请 [提交工单]反馈。
  • 若不存在文件,请执行下一步。

检查系统关键文件 需检查的系统关键文件包括且不限于以下文件:

请遵循相关发行版的标准,确保系统关键文件位置和权限正确无误,可以正常读写。

  • /etc/grub2.cfg: kernel 参数里推荐使用 uuid 挂载 root,其它方式(如 root=/dev/sda)可能导致系统无法启动。
  • /etc/fstab:请勿挂载其它硬盘,迁移后可能会由于磁盘缺失导致系统无法启动。
  • /etc/shadow:权限正常,可以读写。

卸载软件 卸载会产生冲突的驱动和软件(包括 VMware tools,Xen tools,Virtualbox GuestAdditions 以及一些自带底层驱动的软件)。 检查 virtio 驱动 操作详情请参考 Linux 系统检查 Virtio 驱动安装 cloud-init 安装详情请参考 Linux 系统安装 cloud-init查找分区和大小 执行以下命令,查看当前操作系统的分区格式,判断需要复制的分区以及大小。

mount

以如下返回结果为例:

proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sys on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
dev on /dev type devtmpfs (rw,nosuid,relatime,size=4080220k,nr_inodes=1020055,mode=755)
run on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
systemd-1 on /home/libin/work_doc type autofs (rw,relatime,fd=33,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=12692)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=39,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=12709)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev)
configfs on /sys/kernel/config type configfs (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=817176k,mode=700,uid=1000,gid=100)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=100)

可得知,根分区在 /dev/sda1 中,/boot/home 没有独立分区,sda1 包含 boot 分区、缺少 mbr,我们只需复制整个 sda。

导出的镜像中至少需要包含根分区以及 mbr。如果导出的镜像缺少 mbr,将无法启动。 在当前操作系统中,如果/boot/home为独立分区,导出的镜像还需要包含这两个独立分区。

使用命令导出镜像

由于使用命令手工导出镜像的风险比较大(如在 IO 繁忙时可能造成文件系统的 metadata 错乱等)。建议您在导出镜像后,检查镜像 完整无误。

您可选择 使用 qemu-img 命令使用 dd 命令 其中一种方式导出镜像:

  • 使用 qemu-img 命令
    1. 执行以下命令,安装所需包。本文以 Debian 为例,不同发行版的包可能不同,请对应实际情况进行调整。例如,CentOS 中包名为 qemu-img
apt-get install qemu-utils
  1. 执行以下命令,将 /dev/sda 导出至 /mnt/sdb/test.qcow2
sudo qemu-img convert -f raw -O qcow2 /dev/sda /mnt/sdb/test.qcow2

其中,/mnt/sdb为挂载的新磁盘或者其他网络存储。 如果您需要转换成其他格式,请修改-O的参数值。可修改的参数值如下:

参数值含义
qcow2qcow2 格式
vpcvhd 格式
vmdkvmdk 格式
raw无格式

  • 使用 dd 命令 例如,执行以下命令,导出 raw 格式的镜像。
sudo dd if=/dev/sda of=/mnt/sdb/test.imag bs=1K count=$count

其中,count 参数即为需要复制分区的数量,您可以通过 fdisk 命令查出该数量值。如果您需要全盘复制,count 参数则可以忽略。 例如,执行以下命令,查看 /dev/sda 的分区数量。

fdisk -lu /dev/sda

返回类似如下结果:

Disk /dev/sda: 1495.0 GB, 1494996746240 bytes
255 heads, 63 sectors/track, 181756 cylinders, total 2919915520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0008f290

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    41945087    20971520   83  Linux
/dev/sda2        41945088    46123007     2088960   82  Linux swap / Solaris
/dev/sda3        46123008    88066047    20971520   83  Linux
/dev/sda4        88066048  2919910139  1415922046   8e  Linux LVM

fdisk 命令的返回结果可得知,sda1 结束位置在41945087 * 512字节处,count设置为20481M即可。

通过 dd 命令导出的镜像为 raw 格式,建议 [转换为 qcow2,vhd 或者其他镜像格式]

镜像格式转换

目前腾讯云的服务迁移支持的镜像格式有:qcow2,vhd,vmdk,raw。建议使用压缩的镜像格式,节省传输和迁移的时间。

使用 qemu-img 命令转换镜像格式。 例如,执行以下命令,将 raw 格式的镜像转换为 qcow2 格式。

sudo qemu-img convert -f raw -O qcow2 test.img test.qcow2
  • -f为源端镜像文件格式。
  • -O 为目的端镜像文件格式,支持的格式请参考 [-O的参数值]

检查镜像

当您未停止服务直接制作镜像或者其它原因,可能导致制作出的镜像文件系统有误,因此建议您在制作镜像后检查是否无误。

当镜像格式和当前平台支持的格式一致时,您可以直接打开镜像检查文件系统。例如,Windows 平台可以直接附加 vhd 格式镜像,Linux 平台可以使用 qemu-nbd 打开 qcow2 格式镜像,Xen 平台可以直接启用 vhd 文件。本文以 Linux 平台为例,检查步骤如下:

  1. 依次执行以下命令,检查是否已有 nbd 模块。
modprobe nbd
lsmod | grep nbd

返回结果如下,则说明已有 nbd 模块。如返回结果为空,则请检查内核编译选项 CONFIG_BLK_DEV_NBD 是否打开。如未开启,则需更换系统或打开 CONFIG_BLK_DEV_NBD 编译选项后重编内核。 2. 依次执行以下命令,检查镜像。

qemu-nbd -c /dev/nbd0 xxxx.qcow2
mount /dev/nbd0p1 /mnt

执行 qemu-nbd 命令后,/dev/nbd0 就映射了 xxx.qcow2 中的内容。而 /dev/nbd0p1 代表该虚拟磁盘的第一个分区,若 nbd0p1 不存在或 mount 不成功,则很可能是镜像错误。 此外,您还可以在上传镜像前,先启动云服务器测试镜像文件是否可以使用。


# Windows

检查 OS 分区和启动方式

  1. 在操作系统界面,单击 打开 Windows PowerShell 窗口。
  2. 在 Windows PowerShell 窗口中,输入 diskmgmt.msc,按 Enter,打开 “磁盘管理”。
  3. 右键单击需要检查的磁盘 >【属性】,选择【卷】页签,查看磁盘分区形式。
  4. 判断磁盘分区形式是否为 GPT 分区。
  • 是,因服务迁移暂不支持 GPT 分区,请 [提交工单](反馈。
  • 否,请执行下一步。
  1. 使用管理员身份打开 CMD,并执行以下命令,检验操作系统是否以 EFI 方式启动。
bcdedit /enum {current}

以以下返回结果为例:

Windows 启动加载器
标识符                  {current}
device                  partition=C:
path                    \WINDOWS\system32\winload.exe
description             Windows 10
locale                  zh-CN
inherit                 {bootloadersettings}
recoverysequence        {f9dbeba1-1935-11e8-88dd-ff37cca2625c}
displaymessageoverride  Recovery
recoveryenabled         Yes
flightsigning           Yes
allowedinmemorysettings 0x15000075
osdevice                partition=C:
systemroot              \WINDOWS
resumeobject            {1bcd0c6f-1935-11e8-8d3e-3464a915af28}
nx                      OptIn
bootmenupolicy          Standard
  • path 参数中含有 efi,则表示当前操作系统以 EFI 方式启动,请 [提交工单](反馈。
  • path 参数中没有 efi,请执行下一步。

卸载软件

卸载会产生冲突的驱动和软件(包括 VMware tools,Xen tools, Virtualbox GuestAdditions 以及一些自带底层驱动的软件)。

安装 cloud-base

安装详情请参考 cloud-base 安装文档

检查或安装 Virtio 驱动

  1. 打开【控制面板】>【程序和功能】,并在搜索栏中搜索 Virtio。
  • 若返回结果如下图示,则表示已安装了 Virtio 驱动。

  • 若没有安装 Virtio 驱动,则需要手动安装。

使用 disk2vhd 导出镜像

当您的需要导出物理机上的系统或者不想使用平台工具导出时,可以使用 disk2vhd 工具进行导出。

  1. 安装并打开 disk2vhd 工具。 点此下载 disk2vhd 工具 >>
  2. 选择需要导出的镜像存放路径,勾选需要复制的卷,单击【Create】。如下图所示:
  • disk2vhd 需要 Windows 预装 VSS(卷影拷贝服务)功能后才能运行。关于 VSS 功能的更多信息请参见 Volume Shadow Copy Service
  • 请勿勾选 “Use Vhdx”,目前系统不支持 vhdx 格式的镜像。
  • 建议勾选 “Use volume Shadow Copy”,使用卷影复制功能,将能更好地保证数据完整性。

检查镜像

当您未停止服务直接制作镜像或者其它原因,可能导致制作出的镜像文件系统有误,因此建议您在制作镜像后检查是否无误。

当镜像格式和当前平台支持的格式一致时,您可以直接打开镜像检查文件系统。 例如,Windows 平台可以直接附加 vhd 格式镜像,Linux 平台可以使用 qemu-nbd 打开 qcow2 格式镜像,Xen 平台可以直接启用 vhd 文件。 以 Linux 平台为例:

modprobe nbd
qemu-nbd -c /dev/nbd0 xxxx.qcow2
mount /dev/nbd0p1 /mnt

如果 qcow2 镜像的第一个分区导出时文件系统被破坏,mount 时将会报错。 此外,您还可以在上传镜像前,先启动云服务器测试镜像文件是否可以使用。

# 二、上传自定义镜像至对象存储

  1. 安装腾讯云对象存储上传工具,上传工具分为命令行版和桌面版,具体安装和使用教程请参见官方文档。
  1. 将制作好的镜像上传至腾讯云对象存储桶中。

# 三、获取自定义镜像下载链接

  1. 登录 对象存储控制台,单击【存储桶列表】,进入存储桶列表页。
  2. 找到对象所在的存储桶,单击其存储桶名称,进入存储桶管理页。
  3. 在“文件列表”页签下,找到需要下载的对象,如您只需下载单个对象,您有多种方式可选:

I 在所选的对象右侧直接单击【下载】即可下载;或者选中单个对象,在【更多操作】下拉列表中单击【下载】。

II 在对象右侧单击【详情】进入文件详情页,在文件详情页中单击【下载对象】即可下载,或单击【复制临时链接】,将链接粘贴至浏览器地址栏,回车即可下载该对象。

说明

  • 若对象所属存储桶的属性为私有读写,此处复制的地址后会自动计算签名添加后缀。了解签名生成方法,详情请参见 请求签名 文档。 download_object
  • 带有签名的临时链接在查看对象详情起1个小时内有效,也可通过单击【刷新有效期】刷新签名的有效期。 object_detail

详情请参见下载对象