在 Proxmox VE(PVE)环境中进行宿主机迁移时,正确区分“系统数据”和“虚拟机数据”是关键。宿主机应当只包含操作系统、Proxmox 配置、网络与服务状态,而虚拟机磁盘(qcow2、raw、LVM-thin 等)应交由 PBS 或单独备份处理。这样可以在迁移、恢复或硬件更换时保持高可控性和可恢复性。

本文介绍一种稳定、可重复的做法:
在运行中的 PVE 上备份宿主机系统,同时排除虚拟机磁盘文件。


一、系统与虚拟机数据的分离原则

在典型 PVE 安装中,虚拟机磁盘可能以 qcow2 文件的形式存在于:

/var/lib/vz/images/<VMID>/vm-XXX-disk-0.qcow2

这类文件往往单个就有数 TB 大小,且已经通过 Proxmox Backup Server(PBS)等方式被单独备份,因此在迁移宿主机时应明确排除。

应当备份的内容包括:

  • /etc/usr/var/lib/pve-cluster
  • systemd、网络配置
  • 存储定义、虚拟机与容器配置(不含磁盘)

不应当备份的内容包括:

  • qcow2 或 raw 虚拟磁盘
  • /proc/sys/run/dev
  • 运行时的 lxcfs 内容

二、推荐方式:使用 rsync 在线备份宿主机

rsync 非常适合做“可恢复的系统复制”,在宿主机运行时也可安全执行。

示例命令

rsync -aAXHv --numeric-ids --one-file-system \
  --exclude={"/proc/*","/sys/*","/dev/*","/run/*","/tmp/*","/mnt/*","/media/*","/lost+found"} \
  --exclude={"/var/cache/*","/var/tmp/*"} \
  --exclude=/etc/pve/.members.lock \
  --exclude={"/var/lib/vz/images/100/*","/var/lib/vz/images/101/*","/var/lib/vz/images/102/*","/var/lib/vz/images/104/*","/var/lib/vz/images/106/*","/var/lib/vz/images/107/*"} \
  / /mnt/backup/pve-rootfs/

参数说明

  • -aAXH:保持权限、ACL、xattr 和硬链接
  • --numeric-ids:避免 UID/GID 在新系统上错位
  • --one-file-system:防止递归进入挂载的备份盘、NFS 等
  • --exclude=/var/lib/vz/images/...:跳过指定 VM 磁盘目录

该方式不会影响正在运行的虚拟机,只会产生少量“运行中变更文件”的时间差,这在系统迁移场景中是可接受的。


三、tar 打包方式(需要注意排除运行态目录)

如果需要生成一个单一的归档文件(如 .tar.gz),可以使用 tar,但必须排除动态伪文件系统和 lxcfs。

稳定可用的 tar 模板

tar --xattrs --acls --numeric-owner \
  -cpvzf /pbs-system.tar.gz \
  --one-file-system \
  --exclude=/proc \
  --exclude=/sys \
  --exclude=/dev \
  --exclude=/run \
  --exclude=/tmp \
  --exclude=/mnt \
  --exclude=/media \
  --exclude=/lost+found \
  --exclude=/var/lib/lxcfs \
  --exclude=/var/lib/vz/images/100 \
  --exclude=/var/lib/vz/images/101 \
  --exclude=/var/lib/vz/images/102 \
  --exclude=/var/lib/vz/images/104 \
  --exclude=/var/lib/vz/images/106 \
  --exclude=/var/lib/vz/images/107 \
  /

为什么要排除 /var/lib/lxcfs

lxcfs 是 LXC 容器使用的运行时虚拟文件系统,用于显示 CPU、内存等动态状态。这些文件:

  • 会在读取过程中变化
  • 不支持 xattr
  • 不应被系统备份

若不排除,会看到大量类似:

file changed as we read it
Operation not supported

这类警告不是磁盘损坏,也不是 tar 失败,只是 tar 正在读取一个动态伪文件系统。


四、tar 运行结果的判断

tar 完成后应检查返回码:

echo $?
返回值含义
0完全成功
1有警告(通常是动态文件变化),归档可用
2错误,需重做

只要不是 2,通常可以用于系统恢复。


五、迁移后的恢复思路(概述)

在新硬件上:

  1. 创建与原系统同名的 LVM 结构(例如 VG=pveLV=root
  2. 创建相同类型的文件系统(ext4 或 xfs)
  3. 挂载 LV 到 /mnt
  4. 将 rsync 目录或 tar 内容恢复到 /mnt
  5. chroot 并重装 grub
  6. 重启
  7. 通过 PBS 或单独方式恢复虚拟机磁盘

这种“宿主机 + 虚拟机磁盘分离”的结构,是企业级虚拟化平台的标准设计。


结语

通过 rsync 或 tar 对 Proxmox VE 宿主机进行系统级迁移时,只要正确排除虚拟机磁盘与运行态文件系统,就可以获得:

  • 可启动
  • 可恢复
  • 可重复部署

的高质量系统备份。

这种方式不仅适用于硬件更换,也适用于灾难恢复、跨机房迁移与长期系统归档。

Leave a Reply

Your email address will not be published. Required fields are marked *