Files
nexus/wiki/sources/ubuntu-fu-wu-qi-tong-guo-rsync-shi-xian-ri-chang-zeng-liang-bei-fen.md
2026-04-14 16:02:50 +08:00

110 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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=90090秒超时
- 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 &`