服务器整盘备份迁移教程:RAW 转 QCOW2 并导入阿里云自定义镜像

AI摘要

正在生成中……


服务器迁移最省事的办法,不是重装系统重配环境,而是直接整盘备份
这样网站程序、环境、配置、数据都能尽量原样保留,后续还能上传到阿里云、腾讯云这类平台做自定义镜像。

本文记录一套实用流程:

  • 原服务器做迁移前处理
  • 整盘备份到另一台服务器
  • 接收服务器保存 .raw.gz
  • 解压为 .raw
  • 转换为 .qcow2
  • 上传云厂商导入为自定义镜像

一、整体流程

整个迁移思路很简单:

  1. 原服务器做兼容性处理
  2. dd + gzip + ssh 备份整块系统盘到接收服务器
  3. 接收服务器保存为 .raw.gz
  4. 解压为 .raw
  5. 按需转换成 .qcow2
  6. 上传到云平台做自定义镜像

二、原服务器需要做哪些前置工作

1. 确认系统盘名称

先确认你要备份的是哪块盘:

1
lsblk

常见有:

  • /dev/vda
  • /dev/sda
  • /dev/nvme0n1

2. 尽量停止业务写入

为保证数据一致性,建议备份前尽量停掉网站和数据库服务:

1
2
3
4
systemctl stop nginx
systemctl stop php-fpm
systemctl stop mysql
systemctl stop postgresql

停止所有的docker容器

1
docker stop $(docker ps -q)

尤其是数据库业务,最好停掉后再做整盘备份。


3. 清理无用文件

减少镜像体积:

1
2
3
apt clean
journalctl --vacuum-time=3d
rm -rf /tmp/*

4. 将磁盘空闲空间置零,提升后续 qcow2 压缩率

1
2
3
4
dd if=/dev/zero of=/ZERO.FILL bs=1M status=progress || true
sync
rm -f /ZERO.FILL
sync

4. 安装 cloud-init

这一步很重要。
如果后续准备把镜像上传到阿里云、腾讯云,建议提前安装 cloud-init

原因是:

  • 阿里云明确建议:本地自定义镜像如果没有安装 cloud-init,使用该镜像创建 ECS 实例后,将无法自动完成主机名、网络等初始化配置。
  • 腾讯云文档写得更直接:如果导入镜像没有安装 cloud-init,基于该镜像启动的实例将无法正常初始化,导致镜像无法正常导入。

安装方式一般是:

Debian / Ubuntu

1
2
3
apt update
apt install -y cloud-init
systemctl enable cloud-init

CentOS / Rocky / AlmaLinux

1
2
yum install -y cloud-init
systemctl enable cloud-init

5. 建议检查这些系统项

为了后续更容易在云平台启动,建议顺手检查:

  • /etc/fstab 是否使用 UUID,避免磁盘名变化后挂载失败
  • 网络配置不要写死旧网卡名
  • 引导模式要清楚是 BIOS 还是 UEFI
  • 系统内核和启动器是否正常

因为镜像格式转对了,不代表一定能在云上直接启动。


6. 建议用 screentmux

整盘备份时间可能很长,建议先开会话:

1
screen -S backup

三、接收服务器需要做什么

1. 创建接收目录

1
mkdir -p /data/backup

2. 检查磁盘空间

1
df -h

要确保空间足够存放:

  • .raw.gz
  • 解压后的 .raw
  • 转换后的 .qcow2

3. 安装转换工具

1
2
apt-get update
apt-get install -y qemu-utils

四、原服务器如何备份到接收服务器

假设:

  • 原服务器系统盘是 /dev/vda
  • 接收服务器 IP 是 47.98.76.54
  • 接收目录是 /data/backup

在原服务器执行:

1
dd if=/dev/vda bs=64M status=progress | gzip -1 | ssh root@47.98.76.54 "mkdir -p /data/backup && cat > /data/backup/debian-vda.raw.gz"

这条命令的作用就是:

  • 读取整块系统盘
  • 实时压缩
  • 通过 SSH 传到另一台服务器保存

五、接收服务器查看备份结果

1
2
cd /data/backup
ls -lh

你会看到类似:

1
-rw-r--r-- 1 root root 2.4G Mar 20 15:13 debian-vda.raw.gz

说明压缩镜像已经接收完成。


六、解压成 RAW 镜像

1
2
cd /data/backup
gunzip -k debian-vda.raw.gz

解压后会得到:

1
debian-vda.raw

-k 表示保留原压缩包。


七、转换成 QCOW2 镜像

如果后续准备导入虚拟化平台,或者想用更常见的虚拟磁盘格式,可以转成 qcow2:

1
2
cd /data/backup
qemu-img convert -p -c -f raw -O qcow2 -o compat=1.1 /data/backup/debian-vda.raw /data/backup/debian-vda.qcow2

检查一下:

1
qemu-img info debian-vda.qcow2

八、上传到阿里云的流程

阿里云当前支持导入 QCOW2、VHD、RAW、VMDK 格式的镜像文件。

标准流程是:

  1. 把镜像文件上传到 OSS
  2. ECS 控制台 里选择 导入镜像
  3. 填写 OSS 中的镜像文件 URL
  4. 导入后生成 自定义镜像
  5. 再基于这个自定义镜像创建 ECS 实例

阿里云还有几个关键要求:

  • OSS Bucket 地域必须和导入镜像的 ECS 地域一致
  • 系统盘大小不能小于镜像文件大小
  • 启动模式建议与原镜像保持一致(BIOS/UEFI)
  • 如果系统版本不在平台支持列表里,可以选择 Customized LinuxOthers Linux

也就是说,阿里云这部分你记得没错,确实是:

先传 OSS,再导入成自定义镜像。


九、腾讯云这类平台要注意什么

腾讯云这类平台也一样,cloud-init 基本是必要项
腾讯云官方文档明确说明:未安装 cloud-init 的 Linux 自定义镜像,实例首次初始化会失败,甚至可能影响镜像导入。

所以如果你的目标不是只做离线备份,而是真的要上传到云厂商使用,那原服务器最好提前把 cloud-init 装好。


十、完整命令汇总

原服务器清理磁盘空间

1
2
3
4
5
6
7
8
apt clean
journalctl --vacuum-time=3d
rm -rf /tmp/*

dd if=/dev/zero of=/ZERO.FILL bs=1M status=progress || true
sync
rm -f /ZERO.FILL
sync

原服务器整盘备份

1
dd if=/dev/vda bs=64M status=progress | gzip -1 | ssh root@47.98.76.54 "mkdir -p /data/backup && cat > /data/backup/debian-vda.raw.gz"

接收服务器安装转换工具以及查看文件

1
2
3
apt-get update
apt-get install -y qemu-utils
ls -lh /data/backup

解压 RAW

1
gunzip -k /data/backup/debian-vda.raw.gz

转换 QCOW2

1
qemu-img convert -p -c -f raw -O qcow2 -o compat=1.1 /data/backup/debian-vda.raw /data/backup/debian-vda.qcow2

查看镜像信息

1
qemu-img info /data/backup/debian-vda.qcow2

总结

如果你的目标只是做完整备份,raw.gz 就已经够用了。
如果你的目标是迁移到阿里云、腾讯云这类平台,那建议额外做好这两件事:

  • 原服务器提前安装 cloud-init
  • 镜像生成后按云厂商流程上传并导入自定义镜像

其中阿里云的标准流程就是:

上传到 OSS → ECS 导入镜像 → 生成自定义镜像 → 创建实例