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 共享,改动会同时污染历史快照,该方案只适合只读保存。
硬链接快照与源数据在同一存储上时仍不是独立副本:存储整体故障会带走全部快照,异地或离线副本仍不可省略。