title, type, tags, date
| title |
type |
tags |
date |
| Ubuntu服务器通过rsync实现日常增量备份 |
source |
| ubuntu |
| rsync |
| backup |
| nas |
| nfs |
| fstab |
|
2026-04-15 |
Source File
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=900(90秒超时),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
备份策略矩阵
| 备份类型 |
工具 |
频率 |
覆盖范围 |
恢复时间 |
| 整机镜像 |
Clonezilla |
按需/周 |
全盘扇区级 |
长(全盘还原) |
| 增量数据 |
rsync |
每日凌晨3点 |
变化文件 |
短(选择性还原) |
关键脚本:rsync_backup.sh 防重入逻辑
NFS 永久挂载验证流程
Contradictions
常见问题排查
| 问题 |
原因 |
解决方案 |
| 重启后挂载失效 |
nfs-common 启动慢于 mount -a |
systemctl enable remote-fs.target |
| rsync 返回码 20 |
进程被手动中断(SIGINT/SIGTERM) |
使用 nohup 或 screen 后台运行 |
| 备份写满本地硬盘 |
NAS 掉线时挂载点变成普通目录 |
脚本开头加 mountpoint -q 检查 |