--- title: "Ubuntu服务器通过rsync实现日常增量备份" type: source tags: [rsync, backup, ubuntu, nas, nfs, cron] date: 2025-11-11 source_file: raw/Technical/Home Office/🟠Ubuntu服务器通过rsync实现日常增量备份.md --- ## Summary - 核心主题:使用rsync实现NAS到Ubuntu服务器的增量备份 - 问题域:数据保护、增量同步、自动化备份 - 方法/机制:rsync + cron定时任务 + NFS挂载 - 结论/价值:构建工作室级数据保护体系 ## Key Claims - rsync只传输变化的文件,适合增量备份 - NFS挂载需写入/etc/fstab实现永久挂载 - _netdev参数防止开机网络未就绪时卡死 - 备份脚本需检查挂载点防止数据写错位置 ## Key Concepts - [[增量备份]]:rsync只同步变化部分 - [[NFS挂载]]:网络文件系统永久挂载 - [[定时任务]]:cron自动化执行 - [[数据保护]]:备份策略 ## 备份目标 - /var/lib/docker/volumes/(Docker卷数据) - /etc/docker/(Docker配置) - /home/shenwei/Docker/(自定义Docker配置) ## 备份脚本 ```bash #!/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:等待网络就绪 ## 定时任务 ```bash sudo crontab -e # 添加行: 0 3 * * * /usr/local/bin/rsync_backup.sh ``` 每天凌晨3点执行备份。 ## 停止rsync进程 ```bash # 优雅停止 sudo killall rsync # 强制停止 sudo killall -9 rsync # 停止备份脚本 sudo pkill -f rsync_backup.sh ``` ## 恢复数据 ```bash # 单文件丢失:从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 &`