×

PVE备份三板斧:vzdump 命令行参数、快照模式 vs 挂起模式、IO 负载控制

hqy hqy 发表于2025-10-18 01:37:18 浏览4 评论0

抢沙发发表评论

0. 前言:为什么必须懂 vzdump

Proxmox VE 自带备份工具 vzdump,WebUI 里点点鼠标就能跑,但——

  • • 默认设置往往把生产盘打到 90 % IO Util;
  • • 快照失败时自动回退“挂起模式”,VM 会卡 5–30 s;
  • • 多节点并行备份,NAS 直接被打穿。

把命令行参数、模式差异、节流手段三招练成三板斧,备份窗口缩短 50 %,业务零感知。


1. 命令行骨架一览

维度
说明
作用对象
KVM(qemu)(OpenVZ 已退出历史舞台)
存储后端
local-lvm、NFS、Ceph、PBS、本地目录
输出格式
tar(LXC 默认)或 zstd(KVM 默认)
调用入口
vzdump 
或 pvesh / REST API
日志位置
/var/log/vzdump/

最简可行备份

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

2. 快照模式 vs 挂起模式:一张表看懂

对比项
snapshot(默认)
stop
suspend
停机时间
0 ms(qemu-guest-agent 在线)
整机关闭
5–30 s(内存写盘)
一致性
文件系统级,依赖 QGA
离线一致
内存状态一致
失败回退
自动 → suspend
适用场景
7×24 业务、数据库
非关键/开发机
老旧系统无 QGA
性能影响
短暂 IO 尖峰
0(关机时)
双倍的内存写入

经验:数据库 VM 先打开 QGA + 快照模式;若备份失败日志出现 “snapshot failed: fs-freeze failed”,再手动改 suspend,别等自动回退。


3. 关键参数速查表(收藏级)

参数
示例值
作用
--mode
snapshot / suspend / stop
一致性策略
--storage
backup_pbs
目标存储 ID(WebUI 里定义的)
--compress
zstd / lzo / gzip / 0
压缩算法,zstd 单核 400 MB/s
--zstd-level
3(1-19)
越高 CPU 越满,3 是带宽/CPU 甜点
--ionice
5(0-7)
给备份进程戴 IO 口罩,7 最礼让
-- bwlimit
81920(KB/s)
单任务限速,80 MB/s 写 NAS 不卡
--node
node2
在指定节点跑,避免 Corosync 脑裂
--pigz
4
并行 gzip,4 核压缩,仅 tar 格式
--exclude-path/mnt/cache/*
LXC 排除目录,KVM 无效
--script/etc/vzdump/backup-hook.pl
前/后置钩子,可接钉钉通知


4. 实战:零感知备份一条命令

场景:VM 101 是 MySQL 主库,800 GB,SSD 池,夜间 02:00 备份,不允许超过 60 MB/s。

vzdump 101 \
  --mode snapshot \
  --storage pbs_remote \
  --compress zstd \
  --zstd-level 3 \
  --ionice 6 \
  --bwlimit 61440 \
  --quiet 1 \
  --mail-to dba@xxx.com

解释

  • • ionice 6 让备份进程排在 SSD 缓存之后;
  • • bwlimit 61440 ≈ 60 MB/s,NAS 千兆口不堵;
  • • quiet 1 减少日志刷屏,搭配 --mail-to 失败才报警。

5. 并行备份 + 全局限速:xargs 组合拳

需求:一次 dump 10 台,但 NAS 总写带宽只有 150 MB/s。

# /root/batch-backup.sh
cat vm-list.txt | xargs -P 4 -I {} vzdump {} \
  --mode snapshot \
  --storage nas_backup \
  --compress zstd \
  --bwlimit 38400 \
  --ionice 6
  • • -P 4 最多 4 并发,单任务 37.5 MB/s,总线 150 MB/s 封顶;
  • • vm-list.txt 每行一个 VMID,支持 # 注释。

6. 钩子脚本模板:备份前优雅刷表

/etc/vzdump/backup-hook.pl

#!/usr/bin/perl
if ($ENV{PHASE} eq 'backup-start') {
    system("ssh mysql@$ENV{HOSTNAME} 'mysql -e \"SET GLOBAL innodb_flush_log_at_trx_commit=2\"'");
}
if ($ENV{PHASE} eq 'backup-end') {
    system("ssh mysql@$ENV{HOSTNAME} 'mysql -e \"SET GLOBAL innodb_flush_log_at_trx_commit=1\"'");
}

记得 chmod +x 并在 vzdump 加 --script /etc/vzdump/backup-hook.pl


7. 常见失败码与急救

日志关键词
含义
急救
snapshot failed: fs-freeze failed
QGA 未装或冻结超时
VM 内 apt install qemu-guest-agent
timeout waiting on suspend
内存 128 GB,写入>30 s
改为 --mode stop 或分片备份
no space left on device
目标存储不足
pvesm status
 看剩余,清理旧备份
got timeout
NAS 断连
降低 bwlimit,开 ionice 7


8. 性能调优 checklist(随手打钩)

  • • SSD 池开启 zstd + level 3,机械盘用 lzo
  • • 备份窗口前执行 pvesm prune 清理旧链,避免边删边写
  • • 10 GbE 环境把 bwlimit 调到 0,ionice 保持 5 即可
  • • Ceph 后端加 --tmpdir /tmp 指向 NVMe,减少跨池读写的 scrub 冲击

9. 一行总结(背下来)

vzdump <VMID> --mode snapshot --storage <DST> --compress zstd --zstd-level 3 --ionice 6 --bwlimit <MB/s*1024>

把参数做成 Ansible 变量模板,从此备份窗口不再背锅。祝各位数据常青,vzdump 一路绿灯!


打赏

本文链接:https://kinber.cn/post/5723.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客