Rocky 10:rsync --link-dest 做增量备份
在 Rocky Linux 10.2 容器(rsync 3.5.0)中实测:连做三次 rsync -a --link-dest=... 备份,检查 stat 的 inode、du 占用、删除文件后的历史保留。日志:plans/content-expansion/evidence/logs/rocky-rsync-incremental.log。
思路:全量目录 + 硬链接复用
Section titled “思路:全量目录 + 硬链接复用”--link-dest=上一次备份 让 rsync 对未变化的文件创建硬链接,只把新增/修改的文件真正复制。结果是每个备份目录看起来都是完整全量,但磁盘只多出增量部分。
三次备份的实测数据
Section titled “三次备份的实测数据”rsync -a /var/tmp/src/ /var/tmp/bak/data/2026-10-20-01/du -sh /var/tmp/bak/data/2026-10-20-01592K /var/tmp/bak/data/2026-10-20-01改一个文件、加一个新文件后:
rsync -a --link-dest=/var/tmp/bak/data/2026-10-20-01 \ /var/tmp/src/ /var/tmp/bak/data/2026-10-20-02/stat -c '%i %n' /var/tmp/bak/data/2026-10-20-01/file1.bin /var/tmp/bak/data/2026-10-20-02/file1.bin67129114 /var/tmp/bak/data/2026-10-20-01/file1.bin67129114 /var/tmp/bak/data/2026-10-20-02/file1.bininode 相同 = 同一份数据被两个目录共享,这是 --link-dest 生效的直接证据。
每个备份都是「当时的全量」
Section titled “每个备份都是「当时的全量」”cat /var/tmp/bak/data/2026-10-20-02/notes.txtcat /var/tmp/bak/data/2026-10-20-01/notes.txtv1v2v1修改后的文件在新的备份里是新内容(v1+v2),旧备份里仍是旧内容(v1)。每个目录都是独立时间点,恢复时不需要「先全量再增量回放」。
删掉的文件只影响之后的备份
Section titled “删掉的文件只影响之后的备份”删除 file1.bin 后再做第三次:
ls /var/tmp/bak/data/2026-10-20-03du -sh /var/tmp/bak/data /var/tmp/bak/data/2026-10-20-02file2.binfile3.binfile4.binnotes.txt792K /var/tmp/bak/data788K /var/tmp/bak/data/2026-10-20-02第三次里没有 file1.bin,但前两次仍有——这正是备份要的语义:删除不会追溯删除历史。整体只占 792K(增量部分)。
--link-dest用相对路径:rsync 会相对目标目录解析,容易链错;用绝对路径最稳;- 源路径结尾斜杠:
src/是「复制内容」,src是「复制目录本身」,两者结果不同; - 跨文件系统硬链接:备份目录与
--link-dest必须在同一文件系统,否则退化为复制; - 没有
-a:丢权限/时间戳,硬链接复用也会失效。
练习:做三次快照并验证硬链接
Section titled “练习:做三次快照并验证硬链接”rm -rf /var/tmp/src /var/tmp/bak; mkdir -p /var/tmp/src /var/tmp/bak/dataecho v1 > /var/tmp/src/notes.txtrsync -a /var/tmp/src/ /var/tmp/bak/data/01/echo v2 >> /var/tmp/src/notes.txtrsync -a --link-dest=/var/tmp/bak/data/01/ /var/tmp/src/ /var/tmp/bak/data/02/stat -c '%i %n' /var/tmp/bak/data/01/notes.txt /var/tmp/bak/data/02/notes.txtdu -sh /var/tmp/bak/data检查:
notes.txt在两个目录的 inode 不同(内容变了,不是硬链接)- 再放一个不变的文件,两次备份里 inode 相同
du -sh的增长约等于新增数据量cat 01/notes.txt仍是 v1,cat 02/notes.txt是 v1+v2
常见问题
硬链接备份会不会互相影响?
不会。硬链接共享的是同一份数据块,但 rsync 在写入修改过的文件时会先创建新文件再替换链接,所以旧备份内容不受影响。
--link-dest 和 --backup 有什么区别?
--link-dest 让新备份复用旧备份的未变文件(省空间);--backup 是在覆盖目标文件前保留一份旧副本。两者解决不同问题,可以同时用。
备份到另一台机器还能用硬链接吗?
不能,硬链接要求同一文件系统。跨机备份用 rsync 增量传输,但每个目标目录会各存一份完整数据。
- LVM 扩容:LVM 扩容
- 日志轮转:logrotate 实战
- 定时任务:systemd timer