Files
nexus/wiki/sources/Ubuntu服务器通过rsync实现日常增量备份.md

84 lines
4.1 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: [ubuntu, rsync, backup, nas, nfs, fstab]
date: 2026-04-15
---
## Source File
- [[raw/Home Office/Ubuntu服务器通过rsync实现日常增量备份.md]]
## Summary
- 核心主题Ubuntu 服务器通过 rsync 实现对 NAS 的每日增量备份自动化
- 问题域已有机房镜像备份Clonezilla需补充实时增量数据保护方案
- 方法/机制rsync -azR --delete 差异同步lockfile 防重入crontab 凌晨自动执行,/etc/fstab 实现 NFS 永久挂载
- 结论/价值:构建"时间点恢复"能力NAS 掉线时自动中止备份防止本地硬盘爆满
## Key Claims
- rsync 在备份正在写入的二进制文件(如 MySQL时可能导致恢复后无法启动应先用 mysqldump 导出 SQL 再同步
- rsync 返回码 23/24 在备份运行中系统时属于正常(部分文件权限问题或源文件消失),重点检查数据是否大部分已同步
- /etc/fstab 中 _netdev 参数确保网络设备就绪后再执行挂载,防止开机因网络未就绪而挂载失败
- lockfile 机制防止 rsync_backup.sh 重入,脚本开头检查 lockfile 存在则跳过本次执行
## Key Quotes
> "rsync -azR --delete — -a 归档模式保留权限属性,-z 压缩传输,-R 相对路径,--delete 删除目标端多余文件" — rsync 核心参数解析
> "0 3 * * * /usr/local/bin/rsync_backup.sh — 每天凌晨 3 点业务低峰期执行备份" — Crontab 时间配置
> "192.168.3.17:/volume2/backup /mnt/nas_backup nfs defaults,timeo=900,retrans=5,_netdev 0 0" — NFS /etc/fstab 永久挂载条目
> "timeo=90090秒超时retrans=5重连5次_netdev等待网络就绪" — NFS 挂载参数详解
## Key Concepts
- [[rsync]]:远程增量同步工具,通过 Delta-transfer 算法只传输变化部分
- [[增量备份]]:仅备份自上次备份以来变化的文件,相比全量备份节省存储和带宽
- [[NFS永久挂载]]:通过 /etc/fstab 将 NFS 挂载配置为系统启动时自动执行
- [[lockfile]]防止脚本重入的简单机制PID 文件 + kill -0 检测进程存活
- [[Crontab]]Linux 定时任务调度器,支持分钟级精确控制
- [[Clonezilla]]:磁盘镜像备份工具,与 rsync 形成"整机镜像 + 增量数据"二级保护
- [[mysqldump]]MySQL/MariaDB 逻辑备份工具,在 rsync 之前先导出 SQL 文件保证数据库一致性
## Key Entities
- [[Synology NAS]]备份目标端192.168.3.17:/volume2/backup
- [[Ubuntu服务器]]:备份源端,运行 rsync_backup.sh
- [[Docker]]:数据来源之一(/var/lib/docker/volumes/、/etc/docker/、/home/shenwei/Docker/
## Connections
- [[Ubuntu服务器通过rsync实现日常增量备份]] → backups_to → [[Synology NAS]]
- [[Ubuntu服务器通过rsync实现日常增量备份]] ← runs_on ← [[Ubuntu服务器]]
- [[Docker]] ← source_data ← [[Ubuntu服务器通过rsync实现日常增量备份]]
## 备份策略矩阵
| 备份类型 | 工具 | 频率 | 覆盖范围 | 恢复时间 |
|---------|------|------|---------|---------|
| 整机镜像 | Clonezilla | 按需/周 | 全盘扇区级 | 长(全盘还原) |
| 增量数据 | rsync | 每日凌晨3点 | 变化文件 | 短(选择性还原) |
## 关键脚本rsync_backup.sh 防重入逻辑
```bash
LOCKFILE="/tmp/rsync_backup.lock"
if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then
echo "备份任务已在运行中,跳过本次执行。"
exit
fi
echo $$ > ${LOCKFILE}
trap "rm -f ${LOCKFILE}" EXIT
```
## NFS 永久挂载验证流程
```bash
# 1. 卸载当前挂载
sudo umount /mnt/nas_backup
# 2. 模拟开机自动挂载
sudo mount -a
# 3. 验证挂载成功
df -h | grep nas_backup
```
## Contradictions
## 常见问题排查
| 问题 | 原因 | 解决方案 |
|------|------|---------|
| 重启后挂载失效 | nfs-common 启动慢于 mount -a | systemctl enable remote-fs.target |
| rsync 返回码 20 | 进程被手动中断SIGINT/SIGTERM | 使用 nohup 或 screen 后台运行 |
| 备份写满本地硬盘 | NAS 掉线时挂载点变成普通目录 | 脚本开头加 mountpoint -q 检查 |