rsync 实现 每日增量备份 KVM 虚拟机磁盘
明白,你想用 rsync 实现 每日增量备份 KVM 虚拟机磁盘,并保留虚拟机配置。下面我帮你整理一个 完整可执行方案,适合银河麒麟 V11 + KVM + Libvirt + WebVirtCloud 环境。
1️⃣ 前提条件
-
两台服务器:
-
主机:
/var/lib/libvirt/images/存放虚拟机磁盘 -
备份服务器:
/backup/libvirt/
-
-
主机和备份服务器可通过 SSH 密钥免密登录。
-
安装
rsync:
dnf install -y rsync
2️⃣ 备份目录结构
建议在备份服务器上保持如下结构:
/backup/libvirt/
YYYYMMDD/
images/
xml/
-
images/存放虚拟机磁盘(qcow2/raw) -
xml/存放虚拟机配置文件(virsh dumpxml 导出)
3️⃣ 导出虚拟机配置(XML)
备份前导出所有虚拟机配置:
mkdir -p /var/lib/libvirt/backup/xml
for vm in $(virsh list --name); do
virsh dumpxml "$vm" > /var/lib/libvirt/backup/xml/"$vm".xml
done
这样每台虚拟机的配置都有单独的 XML 文件,可在另一台服务器直接
virsh define vm.xml恢复。
4️⃣ rsync 增量备份虚拟机磁盘
假设备份服务器 IP 为 192.168.0.100,用户名 backupuser,执行:
# 创建当天备份目录
BACKUP_DATE=$(date +%Y%m%d)
mkdir -p /var/lib/libvirt/backup/images/$BACKUP_DATE
# 同步虚拟机磁盘(增量)
rsync -avh --progress /var/lib/libvirt/images/ backupuser@192.168.0.100:/backup/libvirt/images/$BACKUP_DATE/
rsync 参数说明:
-
-a:归档模式(保留权限、时间戳、符号链接等) -
-v:显示详细信息 -
-h:人类可读大小 -
--progress:显示传输进度
5️⃣ 自动化脚本示例
创建 /usr/local/bin/libvirt_backup.sh:
#!/bin/bash
# 备份日期
BACKUP_DATE=$(date +%Y%m%d)
# 本地临时目录
LOCAL_BACKUP_DIR=/var/lib/libvirt/backup
mkdir -p $LOCAL_BACKUP_DIR/xml
mkdir -p $LOCAL_BACKUP_DIR/images/$BACKUP_DATE
# 备份虚拟机 XML 配置
for vm in $(virsh list --name); do
virsh dumpxml "$vm" > $LOCAL_BACKUP_DIR/xml/"$vm".xml
done
# 备份虚拟机磁盘
rsync -avh --progress /var/lib/libvirt/images/ backupuser@192.168.0.100:/backup/libvirt/images/$BACKUP_DATE/
# 输出完成信息
echo "Backup completed: $BACKUP_DATE"
赋予执行权限:
chmod +x /usr/local/bin/libvirt_backup.sh
6️⃣ 配置每日定时任务
使用 cron:
crontab -e
添加任务(每天凌晨 2 点执行):
0 2 * * * /usr/local/bin/libvirt_backup.sh >> /var/log/libvirt_backup.log 2>&1
日志记录到
/var/log/libvirt_backup.log,方便排查。
7️⃣ 恢复虚拟机示例
在备份服务器或另一台服务器:
# 复制磁盘和 XML 文件回新服务器
scp backupuser@backupserver:/backup/libvirt/images/20251017/* /var/lib/libvirt/images/
scp backupuser@backupserver:/backup/libvirt/xml/* /var/lib/libvirt/backup/xml/
# 定义虚拟机
for xml in /var/lib/libvirt/backup/xml/*.xml; do
virsh define "$xml"
done
# 启动虚拟机
virsh start vmname
✅ 特点:
-
增量备份:rsync 只同步变化文件,节省带宽和存储
-
自动化:cron 每日执行,无需人工干预
-
可迁移:备份包含虚拟机配置和磁盘,可直接恢复到另一台服务器
我可以帮你写一个 更智能的脚本,支持:
-
自动保留最近 7 天/30 天备份
-
支持在线虚拟机快照备份(减少停机时间)
-
支持多台虚拟机批量备份
你希望我帮你写这个增强版脚本吗?
No Comments