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

2.7 KiB
Raw Blame History

title, type, tags, date, source_file
title type tags date source_file
Ubuntu服务器通过rsync实现日常增量备份 source
rsync
backup
ubuntu
nas
nfs
cron
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=90090秒超时
  • 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 &