Proxmox VE QEMU 虚拟机备份与还原操作手册

一、概述

Proxmox VE 使用 vzdump 作为核心备份工具,为 QEMU/KVM 虚拟机和 LXC 容器创建完整备份,备份内容同时包含虚拟机配置和全部磁盘数据。备份文件默认存储在 /var/lib/vz/dump/ 目录。

本手册涵盖 Web 界面和命令行两种操作方式,并补充了备份策略、压缩加密、自动调度、验证测试等最佳实践内容。

二、准备工作

2.1 备份存储配置

在执行备份之前,需要先配置备份存储目标。常见选项包括本地目录、NFS 共享或 Proxmox Backup Server (PBS)。

通过 Web 界面添加存储数据中心存储添加,选择存储类型并配置参数。

通过命令行添加 NFS 存储

pvesm add nfs backup-nas --server 192.168.1.50 --export /backups --content backup

通过命令行添加 PBS 存储

pvesm add pbs pbs-main --server 192.168.1.60 --datastore main \
  --username backup@pbs --password YOUR_PASSWORD --content backup

重要建议:不要将备份文件保存在与虚拟机磁盘相同的 RAID 组上,避免单点故障导致备份数据与生产数据同时丢失。

2.2 安装并启用 QEMU Guest Agent(强烈推荐)

为获得更高一致性的备份,应在虚拟机内安装 QEMU Guest Agent。

Debian/Ubuntu

sudo apt update && sudo apt install qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent

RHEL/CentOS/Fedora

sudo dnf install qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent

Windows:挂载 virtio-win 驱动 ISO,运行 virtio-win-guest-tools.exe 安装。

安装后,在 PVE Web 界面中进入虚拟机 选项QEMU Guest Agent → 勾选 启用

三、备份操作

3.1 三种备份模式对比

vzdump 提供三种备份模式,在一致性和停机时间之间各有取舍:

模式 工作原理 一致性 停机时间 适用场景
snapshot(快照) 虚拟机持续运行,通过 QEMU 实时备份 高(配合 Guest Agent 可达文件系统一致性) 生产环境首选
suspend(暂停) 短暂暂停虚拟机,备份后恢复 数秒至数分钟 快照模式不可用时的备选
stop(停止) 关闭虚拟机,备份完成后重启 最高 最长 数据完整性要求极高且可接受停机

生产环境推荐snapshot 模式 + QEMU Guest Agent。

3.2 通过 Web 界面备份

  1. 登录 PVE Web 管理界面,在左侧面板选择对应的节点,点击要备份的虚拟机
  2. 进入虚拟机的 备份 选项卡,点击 立即备份 按钮。
  3. 在弹出的窗口中配置参数:
  4. 存储:选择备份文件的存放位置(如 local、NFS 或 PBS)。
  5. 模式:推荐选择 snapshot(快照模式)。
  6. 压缩:推荐选择 ZSTD
  7. 保留策略:可设置保留最近备份数量。
  8. 点击 开始,在任务日志中查看备份进度。

3.3 通过命令行备份

基本语法

vzdump <VMID> --mode <模式> --storage <存储位置> --compress <压缩方式>

示例:快照模式备份 VM 100 到 local 存储,使用 ZSTD 压缩

vzdump 100 --mode snapshot --storage local --compress zstd

示例:停止模式备份(最高一致性)

vzdump 100 --mode stop --storage backup-nfs --compress zstd

示例:暂停模式备份

vzdump 100 --mode suspend --storage backup-nfs --compress zstd

示例:备份时设置保留策略

vzdump 100 --storage backup-nfs --prune-backups keep-daily=7,keep-weekly=4,keep-monthly=6

四、还原操作

还原工具是 qmrestore还原前注意事项: - 如果还原的目标 VMID 已存在且正在运行,需要先关闭该虚拟机。 - 还原操作会覆盖目标虚拟机当前的所有数据,请提前确认。

4.1 通过 Web 界面还原

  1. 在 PVE Web 界面中,导航到存放备份文件的存储位置(如 local)。
  2. 点击该存储的 备份 选项卡,列出所有备份文件。
  3. 选择要还原的备份文件,点击 还原 按钮。
  4. 在弹出的窗口中配置参数:
  5. VMID:指定还原后的虚拟机 ID(需唯一)。
  6. 存储:选择磁盘数据恢复到的目标存储。
  7. 唯一性:勾选后将为新虚拟机生成新的 MAC 地址,避免网络冲突。
  8. 恢复后启动:勾选后还原完成自动启动虚拟机。
  9. 点击 还原 并确认,等待任务完成。

4.2 通过命令行还原

基本语法

qmrestore <备份文件路径> <新VMID> [选项]

示例 1:还原为 VMID 101

qmrestore /var/lib/vz/dump/vzdump-qemu-100-2024_07_24-15_09_44.vma.zst 101

示例 2:还原到指定存储

qmrestore /path/to/vzdump-qemu-100.vma.zst 101 --storage local-lvm

示例 3:还原后自动启动

qmrestore /path/to/vzdump-qemu-100.vma.zst 101 --start true

示例 4:从 PBS 实时还原(后台进行,虚拟机立即可用)

qmrestore /path/to/vzdump-qemu-100.vma.zst 101 --live-restore true

4.3 跨节点迁移场景

将虚拟机迁移到另一台 PVE 主机: 1. 在源节点备份虚拟机。 2. 将备份文件拷贝到目标节点: bash scp /mnt/pve/dir-133/dump/vzdump-qemu-375-2025_09_10-13_36_56.vma.zst root@目标IP:/mnt/pve/dir-21-212/dump/ 3. 在目标节点使用 qmrestore 还原。

五、压缩与加密

5.1 压缩算法选择

算法 速度 文件大小 推荐场景
lzo 最快 最大 CPU 是瓶颈、存储充足
gzip 中等 中等 传统默认选项
zstd 快(多线程) 接近 gzip 推荐,速度与压缩比最佳平衡

性能建议:备份到快速存储(如本地 SSD),慢速 NFS 目标会成为整个备份过程的瓶颈。CPU 密集型压缩(如高等级 zstd)或纯软件加密会拖慢节点运行速度。

5.2 备份加密(PBS)

当使用 Proxmox Backup Server 时,可启用客户端加密,即使备份存储被攻破也能保护数据:

# 生成加密密钥
proxmox-backup-client key create /etc/pve/priv/backup-encryption.key

# 配置 PBS 存储使用加密(Web界面:数据中心 > 存储 > 编辑 PBS 存储 > 加密密钥)

六、自动化备份调度

6.1 通过 Web 界面配置

数据中心备份 中添加备份任务,可配置: - 计划时间:如每天凌晨 2:00(0 2 * * *) - 备份模式:推荐 snapshot - 压缩方式:推荐 zstd - 保留策略:设置保留备份数量 - 重复错过:主机离线时错过备份后的补执行策略

6.2 通过配置文件(/etc/pve/jobs.cfg)

vzdump: daily-backup
    schedule 0 2 * * *
    storage backup-nas
    mode snapshot
    compress zstd
    all 1
    mailnotification always
    mailto admin@example.com

6.3 生产环境调度建议

  • 将每个备份任务的启动时间错开 5-10 分钟,避免多个备份同时运行造成 I/O 拥塞。
  • 根据工作负载的 RPO(恢复点目标)确定备份频率:
  • 关键系统(数据库、认证服务):每天多次(每 4-6 小时)
  • 标准生产:每天一次
  • 开发/测试环境:按需或每天一次

七、保留策略(Prune)

7.1 保留参数

Proxmox 支持以下保留参数,可组合使用:

参数 说明
keep-last N 保留最近 N 个备份
keep-daily N 保留 N 天内的每日备份
keep-weekly N 保留 N 周内的每周备份
keep-monthly N 保留 N 月内的每月备份
keep-yearly N 保留 N 年内的每年备份

一个备份只要满足任意一条保留规则即会被保留。

7.2 不同环境的保留策略建议

环境类型 keep-daily keep-weekly keep-monthly keep-yearly
开发/测试 3 1
小型生产 7 4 3
中型企业 14 8 6 1
合规环境(HIPAA/PCI) 30 52 12 7

7.3 命令行设置保留策略

# 在存储上设置保留策略
pvesm set backup-nfs --prune-backups keep-daily=7,keep-weekly=4,keep-monthly=6

7.4 Prune 与 GC 调度

  • Prune(修剪)作业:在备份作业完成后运行,建议每天凌晨 3:00
  • GC(垃圾回收)作业:在 Prune 之后运行,建议每天凌晨 4:00 或周末

八、备份验证与恢复测试

8.1 验证备份完整性

检查备份日志

tail -n 200 /var/log/vzdump.log
journalctl -u pvedaemon -n 200 --no-pager

验证备份文件(适用于 tar 格式的配置文件备份):

tar -tzvf /path/to/backup.tar.gz > /dev/null && echo "备份有效"

8.2 定期恢复测试

核心原则:在真正需要恢复之前,永远不知道自己是否能成功恢复。定期测试恢复是备份策略中最重要但最容易被忽视的一环。

推荐做法: 1. 每月至少执行一次恢复测试。 2. 将备份恢复到独立的 VMID(不覆盖生产虚拟机)。 3. 启动恢复的虚拟机,验证应用程序和服务状态。 4. 测试完成后删除测试虚拟机。

自动化测试:可使用脚本从 PBS 仓库中随机选择虚拟机自动执行恢复测试。

九、灾难恢复与 3-2-1 策略

9.1 灾难恢复规划

在规划备份策略之前,应先明确恢复需求:

  • RTO(恢复时间目标) :系统可接受的最长停机时间
  • RPO(恢复点目标) :可接受的最大数据丢失量

根据 RTO/RPO 确定备份频率、存储位置和验证频率。

9.2 3-2-1 备份策略

  • 3 份数据副本(1 份生产 + 2 份备份)
  • 2 种不同的存储介质
  • 1 份备份存放在异地(Offsite)

9.3 远程灾备

  • 在远程灾备站点保存虚拟机备份副本
  • 可使用 rclone 或 S3 将备份同步到云端
  • 对于 PBS,可利用其“即时还原”(Live Restore)功能直接从备份启动 VM,同时后台迁移数据

十、常用命令速查

操作 命令
快照模式备份 vzdump <VMID> --mode snapshot --storage <存储> --compress zstd
停止模式备份 vzdump <VMID> --mode stop --storage <存储> --compress zstd
带保留策略备份 vzdump <VMID> --storage <存储> --prune-backups keep-daily=7,keep-weekly=4
还原虚拟机 qmrestore <备份文件路径> <新VMID>
还原到指定存储 qmrestore <备份文件> <VMID> --storage <存储>
还原后自动启动 qmrestore <备份文件> <VMID> --start true
PBS 实时还原 qmrestore <备份文件> <VMID> --live-restore true
添加 NFS 存储 pvesm add nfs <名称> --server <IP> --export <路径> --content backup
添加 PBS 存储 pvesm add pbs <名称> --server <IP> --datastore <名称> --username <用户>
设置存储保留策略 pvesm set <存储名称> --prune-backups keep-daily=7,keep-weekly=4
查看备份日志 tail -n 200 /var/log/vzdump.log

十一、最佳实践总结

  1. 生产环境始终使用 snapshot 模式 + QEMU Guest Agent,实现零停机备份。
  2. 压缩算法首选 ZSTD,在速度和压缩率之间取得最佳平衡。
  3. 备份存储与生产存储分离,避免单点故障。
  4. 配置自动化备份调度,根据 RPO 确定备份频率。
  5. 设置合理的保留策略,平衡存储成本与恢复需求。
  6. 定期执行恢复测试,每月至少一次。
  7. 遵循 3-2-1 备份策略,确保异地有备份副本。
  8. 错开备份任务启动时间,避免 I/O 拥塞。
  9. 对核心数据库,除虚拟机级备份外,还应使用数据库原生工具(如 mysqldump)进行逻辑备份。
  10. 备份完成后检查日志,确认任务成功执行。