2.7 KiB
2.7 KiB
title, type, tags, date, source_file
| title | type | tags | date | source_file | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Ubuntu服务器通过rsync实现日常增量备份 | source |
|
2025-11-11 | raw/Technical/Home Office/🟠Ubuntu服务器通过rsync实现日常增量备份.md |
Summary
- 核心主题:使用rsync实现NAS到Ubuntu服务器的增量备份
- 问题域:数据保护、增量同步、自动化备份
- 方法/机制:rsync + cron定时任务 + NFS挂载
- 结论/价值:构建工作室级数据保护体系
Key Claims
- rsync只传输变化的文件,适合增量备份
- NFS挂载需写入/etc/fstab实现永久挂载
- _netdev参数防止开机网络未就绪时卡死
- 备份脚本需检查挂载点防止数据写错位置
Key Concepts
备份目标
- /var/lib/docker/volumes/(Docker卷数据)
- /etc/docker/(Docker配置)
- /home/shenwei/Docker/(自定义Docker配置)
备份脚本
#!/bin/bash
LOCKFILE="/tmp/rsync_backup.lock"
if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then
echo "备份任务已在运行中,跳过本次执行。"
exit
fi
echo $$ > ${LOCKFILE}
trap "rm -f ${LOCKFILE}" EXIT
MOUNT_POINT="/mnt/nas_backup"
DATE=$(date +%Y-%m-%d)
DEST="$MOUNT_POINT/docker_backups/$DATE"
LOG="/var/log/rsync_backup.log"
if ! mountpoint -q "$MOUNT_POINT"; then
echo "$(date): [错误] NAS 未挂载" >> "$LOG"
exit 1
fi
mkdir -p "$DEST"
rsync -azR --delete \
--exclude="venv/" \
--exclude=".venv/" \
--exclude="**/__pycache__/" \
--exclude=".git/" \
/var/lib/docker/volumes/ \
/etc/docker/ \
/home/shenwei/Docker/ \
"$DEST/" >> "$LOG" 2>&1
NFS永久挂载
在/etc/fstab添加:
192.168.3.17:/volume2/backup /mnt/nas_backup nfs defaults,timeo=900,retrans=5,_netdev 0 0
参数说明:
- timeo=900:90秒超时
- retrans=5:重试5次
- _netdev:等待网络就绪
定时任务
sudo crontab -e
# 添加行:
0 3 * * * /usr/local/bin/rsync_backup.sh
每天凌晨3点执行备份。
停止rsync进程
# 优雅停止
sudo killall rsync
# 强制停止
sudo killall -9 rsync
# 停止备份脚本
sudo pkill -f rsync_backup.sh
恢复数据
# 单文件丢失:从NAS备份目录恢复
cp /mnt/nas_backup/.../file /
# 系统崩溃:反向rsync
sudo rsync -aAXz /mnt/nas_backup/daily_sync/ /
注意事项
- 数据库建议先mysqldump再rsync
- 返回码23/24表示部分文件权限问题,可接受
- 先测试手动运行:
sudo nohup /usr/local/bin/rsync_backup.sh > /dev/null 2>&1 &