Skip to main content

制作系统盘

操作场景

本文档指导您制作本地或其他平台的 Linux 服务器系统盘镜像。

操作步骤

准备工作

制作系统盘镜像导出时,需要进行以下检查:

说明

如果您是通过数据盘镜像导出,则可以跳过此操作。

检查 OS 分区和启动方式

  1. 执行以下命令,检查 OS 分区是否为 GPT 分区。
    • 若返回结果为 msdos,即表示为 MBR 分区,请执行下一步。
    • 若返回结果为 gpt,即表示为 GPT 分区。目前服务迁移不支持 GPT 分区,请通过 在线支持 反馈。
  2. 执行以下命令,检查操作系统是否以 EFI 方式启动。
    • 若存在文件,则表示当前操作系统以 EFI 方式启动,请通过 在线支持 反馈。
    • 若不存在文件,请执行下一步。

检查系统关键文件

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

说明

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

  • /etc/grub2.cfg: kernel 参数里推荐使用 uuid 挂载 root,其它方式(如 root=/dev/sda)可能导致系统无法启动。挂载步骤如下:
    1. 执行以下命令,获取 /root 的文件系统名称。
      返回结果如下图所示,表示 /root 文件系统名称为 /dev/vda1
    2. 执行以下命令,获取 UUID。
      说明

      文件系统 UUID 不固定,请您定期确认及更新。例如,重新格式化文件系统后,文件系统的 UUID 将会发生变化。

    3. 执行以下命令,使用 VI 编辑器打开 /etc/fstab 文件。
    4. 按 i 进入编辑模式。
    5. 将光标移至文件末尾,按 Enter,添加如下内容。结合前文示例则添加:
    6. 按 Esc,输入 :wq,按 Enter。保存设置并退出编辑器。
  • /etc/fstab:请勿挂载其它硬盘,迁移后可能会由于磁盘缺失导致系统无法启动。
  • /etc/shadow:权限正常,可以读写。

卸载软件

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

检查 virtio 驱动

操作详情请参考 Linux 系统检查 Virtio 驱动

安装 cloud-init

安装详情请参考 Linux 系统安装 cloud-init

检查其它硬件相关的配置

上云之后的硬件变化包括但可能不限于:

  • 显卡更换为 Cirrus VGA。
  • 磁盘更换为 Virtio Disk,设备名为 vda、vdb。
  • 网卡更换为 Virtio Nic,默认只提供 eth0。

查找分区和大小

执行以下命令,查看当前操作系统的分区格式,判断需要复制的分区以及大小。

以如下返回结果为例:
可得知,根分区在 /dev/sda1 中,/boot 和 /home 没有独立分区,sda1 包含 boot 分区、缺少 mbr,我们只需复制整个 sda。
注意
  • 导出的镜像中至少需要包含根分区以及 mbr。如果导出的镜像缺少 mbr,将无法启动。
  • 在当前操作系统中,如果/boot/home为独立分区,导出的镜像还需要包含这两个独立分区。

导出镜像

根据实际需求,选择不同的方式导出镜像。

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

  • 使用 qemu-img 命令
  • 执行以下命令,安装所需包。本文以 Debian 为例,不同发行版的包可能不同,请对应实际情况进行调整。例如,CentOS 中包名为 qemu-img
  • 执行以下命令,将 /dev/sda 导出至 /mnt/sdb/test.qcow2
    其中,/mnt/sdb为挂载的新磁盘或者其他网络存储。
    如果您需要转换成其他格式,请修改 -O 的参数值。可修改的参数值如下:
    参数值 含义
    qcow2 qcow2 格式
    vpc vhd 格式
    vmdk vmdk 格式
    raw 无格式
  • 使用 dd 命令
    例如,执行以下命令,导出 raw 格式的镜像。
    其中,count 参数即为需要复制分区的数量,您可以通过 fdisk 命令查出该数量值。如果您需要全盘复制,count 参数则可以忽略。
    例如,执行以下命令,查看 /dev/sda 的分区数量。
    返回类似如下结果:
    由 fdisk 命令的返回结果可得知,sda1 结束位置在41945087 * 512字节处,count 设置为20481M即可。
说明

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

转换镜像格式(可选)

参考 转换镜像镜像,使用 qemu-img 将镜像文件转换为支持的格式。

检查镜像

说明

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

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

  1. 依次执行以下命令,检查是否已有 nbd 模块。
    返回结果如下,则说明已有 nbd 模块。如返回结果为空,则请检查内核编译选项 CONFIG_BLK_DEV_NBD 是否打开。如未开启,则需更换系统或打开 CONFIG_BLK_DEV_NBD 编译选项后重编内核。
  2. 依次执行以下命令,检查镜像。
    执行 qemu-nbd 命令后,/dev/nbd0 就映射了 xxx.qcow2 中的内容。而 /dev/nbd0p1 代表该虚拟磁盘的第一个分区,若 nbd0p1 不存在或 mount 不成功,则很可能是镜像错误。
    此外,您还可以在上传镜像前,先启动云服务器测试镜像文件是否可以使用。