RustVault 是一个小型、可解释的增量备份命令行工具。它为每个文件计算 SHA-256,按内容哈希保存对象,并用 JSON 快照记录目录结构。同一份内容无论出现多少次,都只在仓库中保存一次。
backup:创建目录快照,自动初始化仓库并复用已有对象。list:按时间倒序列出快照。restore:恢复指定快照,写入目标前检查路径、对象大小和 SHA-256,并拒绝覆盖非空目标目录。verify:重新计算所有对象的哈希,检查缺失、损坏及孤立对象。- 保存空目录和 Unicode 路径;符号链接会跳过并给出警告。
- 快照和配置通过临时文件加原子重命名写入。
需要稳定版 Rust:
./scripts/cargo.sh build --release
./target/release/rustvault --help脚本在正常 Rust 环境中等同于 cargo;若本机的 Homebrew/rustup 代理链接缺失,它会自动定位已安装的 stable 工具链。
# 第一次备份会自动创建仓库
rustvault backup ./important-files --repo ./my-vault
# 再次执行只保存发生变化的新内容
rustvault backup ./important-files --repo ./my-vault
rustvault list --repo ./my-vault
rustvault restore 20260702T120000.000000000Z ./restored --repo ./my-vault
rustvault verify --repo ./my-vault仓库结构如下:
my-vault/
├── config.json
├── objects/
│ └── ab/cdef... # SHA-256 前两位作为分片目录
└── snapshots/
└── <snapshot-id>.json
首版只备份常规文件和目录,不跟随符号链接,也不保存权限、扩展属性或符号链接本身。它没有压缩、加密、云同步、自动清理和内容分块。恢复命令会预检本次快照引用的对象,仍建议定期运行 verify 检查整个仓库;RustVault 不是 Time Machine 等成熟备份系统的替代品。
./scripts/cargo.sh fmt --check
./scripts/cargo.sh clippy --all-targets --all-features -- -D warnings
./scripts/cargo.sh test
./scripts/cargo.sh build --releasescripts/demo.sh 会在临时目录完成备份、重复备份、列出、恢复和校验;scripts/benchmark.sh 用重复大文件生成可复现的时间与空间实验。
- clap:命令行参数解析。
- serde 与 serde_json:快照序列化。
- sha2:SHA-256 内容寻址。
- walkdir:递归目录扫描。
- tempfile:同一文件系统内的临时文件与原子落盘。
本项目没有复制上述项目的业务实现;它们仅作为通用基础库使用。