首页/数据/备份与容灾速查/rsync 硬链接增量快照

rsync 硬链接增量快照

用 --link-dest 让未变化文件硬链接到上一份快照:每份快照看起来都是完整目录树,实际只占用新增数据。

备份与容灾速查数据更新于 2026-10-13

rsync 硬链接快照是什么

用 --link-dest 指定上一份快照作为基准,未变化的文件直接硬链接过去,只有新增或修改的文件才真正占用新空间。结果是每份快照目录看起来都是完整目录树,实际存储开销接近增量,配合每日一份目录即可实现『多份完整视图』的低成本留底。

基本信息

原理未变化文件共享 inode,变化文件写入新数据块
适用需要多份完整视图且存储有限的场景
前提同一文件系统内才能建立硬链接
目录操作通常配合 current 软链接指向最新快照

每日硬链接快照

每日硬链接快照
B=/backup/snap
today=$(date +%F)
rsync -a --delete --link-dest="$B/current" /data/ "$B/$today/"
rm -f "$B/current" && ln -s "$B/$today" "$B/current"
# 统计实际占用:看起来完整的目录树只占新增数据
du -sh --apparent-size "$B/$today" ; du -sh "$B/$today"

快照方案对比

方案空间效率恢复便利性
硬链接快照高,只存变化可直接浏览任意日期目录
每日全量拷贝低,每份都完整最简单,但存储压力大
存储层快照高,依赖存储实现需要存储支持,跨平台性差

使用要点

  • 首次运行必须先有基准目录,current 不存在时会退化为全量复制,第一次耗时最长
  • 快照目录中的文件不能被就地修改:inode 共享,改动会同时污染历史快照,该方案只适合只读保存
  • 保留周期按需要清理旧目录,删除目录只是减少链接计数,被引用的数据块不会立即释放
  • 备份账号需要能创建硬链接与写入目标目录,同时避免对快照目录授予写权限给其他用户
  • 定期抽查任意一份历史快照能否完整读取,验证链接关系没有损坏
快照目录中的文件不能被就地修改:inode 共享,改动会同时污染历史快照,该方案只适合只读保存。
硬链接快照与源数据在同一存储上时仍不是独立副本:存储整体故障会带走全部快照,异地或离线副本仍不可省略。

易错点

  • 首次运行必须先有基准目录,current 不存在时会退化为全量复制
  • 在快照目录里删除文件只减少链接计数,被历史快照引用的数据块不会立即释放
  • 在快照目录里就地修改文件会污染所有引用同一 inode 的历史版本
  • 跨文件系统使用该选项会退化为普通复制,空间效率不达预期

数据来源与参考

  • rsync 手册(--link-dest 选项)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌