tencent cloud

文档反馈

制作 Linux 镜像

最后更新时间:2022-04-14 14:33:33

    操作场景

    本文档指导您制作本地或其他平台的 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)可能导致系统无法启动。挂载步骤如下:
      1. 执行以下命令,获取 /root 的文件系统名称。
        df -TH
        

    返回结果如下图所示,表示 /root 文件系统名称为 /dev/vda1

    2. 执行以下命令,获取 UUID。

    blkid /dev/vda1
    
    说明

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

    3. 执行以下命令,使用 VI 编辑器打开 `/etc/fstab` 文件。
    vi /etc/fstab
    
    4.**i** 进入编辑模式。
    5. 将光标移至文件末尾,按 **Enter**,添加如下内容。结合前文示例则添加:
    
    UUID=d489ca1c-xxxx-4536-81cb-ceb2847f9954 /data  ext4 defaults     0   0
    
    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。

    查找分区和大小

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

    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为独立分区,导出的镜像还需要包含这两个独立分区。

    导出镜像

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

    使用 VMWare vCenter Converter 或 Citrix XenConvert 等虚拟化平台的导出镜像工具。详情请参见各平台的导出工具文档。

    说明

    目前腾讯云服务迁移支持的镜像格式有:qcow2,vhd,raw,vmdk。

    转换镜像格式(可选)

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

    检查镜像

    说明

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

    当镜像格式和当前平台支持的格式一致时,您可以直接打开镜像检查文件系统。例如,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 不成功,则很可能是镜像错误。
    此外,您还可以在上传镜像前,先启动云服务器测试镜像文件是否可以使用。

    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持