跳转到内容
搜索 Rocky Linux 文档

    浏览当前文档目录

    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。

    --link-dest=上一次备份 让 rsync 对未变化的文件创建硬链接,只把新增/修改的文件真正复制。结果是每个备份目录看起来都是完整全量,但磁盘只多出增量部分。

    Terminal window
    rsync -a /var/tmp/src/ /var/tmp/bak/data/2026-10-20-01/
    du -sh /var/tmp/bak/data/2026-10-20-01
    592K /var/tmp/bak/data/2026-10-20-01

    改一个文件、加一个新文件后:

    Terminal window
    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.bin
    67129114 /var/tmp/bak/data/2026-10-20-01/file1.bin
    67129114 /var/tmp/bak/data/2026-10-20-02/file1.bin

    inode 相同 = 同一份数据被两个目录共享,这是 --link-dest 生效的直接证据。

    Terminal window
    cat /var/tmp/bak/data/2026-10-20-02/notes.txt
    cat /var/tmp/bak/data/2026-10-20-01/notes.txt
    v1
    v2
    v1

    修改后的文件在新的备份里是新内容(v1+v2),旧备份里仍是旧内容(v1)。每个目录都是独立时间点,恢复时不需要「先全量再增量回放」。

    删除 file1.bin 后再做第三次:

    Terminal window
    ls /var/tmp/bak/data/2026-10-20-03
    du -sh /var/tmp/bak/data /var/tmp/bak/data/2026-10-20-02
    file2.bin
    file3.bin
    file4.bin
    notes.txt
    792K /var/tmp/bak/data
    788K /var/tmp/bak/data/2026-10-20-02

    第三次里没有 file1.bin,但前两次仍有——这正是备份要的语义:删除不会追溯删除历史。整体只占 792K(增量部分)。

    • --link-dest 用相对路径:rsync 会相对目标目录解析,容易链错;用绝对路径最稳;
    • 源路径结尾斜杠:src/ 是「复制内容」,src 是「复制目录本身」,两者结果不同;
    • 跨文件系统硬链接:备份目录与 --link-dest 必须在同一文件系统,否则退化为复制;
    • 没有 -a:丢权限/时间戳,硬链接复用也会失效。

    练习:做三次快照并验证硬链接

    Section titled “练习:做三次快照并验证硬链接”
    Terminal window
    rm -rf /var/tmp/src /var/tmp/bak; mkdir -p /var/tmp/src /var/tmp/bak/data
    echo v1 > /var/tmp/src/notes.txt
    rsync -a /var/tmp/src/ /var/tmp/bak/data/01/
    echo v2 >> /var/tmp/src/notes.txt
    rsync -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.txt
    du -sh /var/tmp/bak/data

    检查:

    1. notes.txt 在两个目录的 inode 不同(内容变了,不是硬链接)
    2. 再放一个不变的文件,两次备份里 inode 相同
    3. du -sh 的增长约等于新增数据量
    4. cat 01/notes.txt 仍是 v1,cat 02/notes.txt 是 v1+v2

    常见问题

    硬链接备份会不会互相影响?

    不会。硬链接共享的是同一份数据块,但 rsync 在写入修改过的文件时会先创建新文件再替换链接,所以旧备份内容不受影响。

    --link-dest 和 --backup 有什么区别?

    --link-dest 让新备份复用旧备份的未变文件(省空间);--backup 是在覆盖目标文件前保留一份旧副本。两者解决不同问题,可以同时用。

    备份到另一台机器还能用硬链接吗?

    不能,硬链接要求同一文件系统。跨机备份用 rsync 增量传输,但每个目标目录会各存一份完整数据。