---
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 &`