目标
构建把文件切分为内容定义块、每块按 SHA-256 只存一次、逐快照记录清单、能字节级精确恢复任意快照并修剪无引用块的备份工具。
要点
固定大小分块在插入一个字节后全部边界漂移,滚动哈希让边界由内容决定、一次插入至多移动一个边界;清单是不可变的 JSON(路径、权限、逐块摘要序列),恢复是“清单加存储”的纯函数;verify 重算每个块摘要把静默位腐化为点名告警。
提示
去重不是附加功能而是内容寻址的推论;修剪只是对清单的引用计数。
验证
分块器测试验证前插一字节后边界集合几乎不变;往返测试恢复含空文件与符号链接的整树并逐树哈希比对。 项目目录骨架:
incbackup/
├── bin/incbackup.js
├── src/
│ ├── chunker.js
│ ├── store.js
│ ├── manifest.js
│ └── commands/
│ ├── snapshot.js
│ ├── restore.js
│ ├── verify.js
│ └── prune.js
├── test/
│ ├── chunker.test.js
│ └── roundtrip.test.js
└── package.json
实施阶段:Content-defined chunker → Content-addressed store and manifest → Restore → Verify and prune。