3 个版本 (重大更改)
0.3.0 | 2024年4月11日 |
---|---|
0.2.0 | 2024年4月2日 |
0.1.0 | 2024年3月30日 |
#149 in 压缩
155KB
2.5K SLoC
Backup Deduplicator
一个备份去重工具。它为指定目录中的所有文件和文件夹构建一个哈希树。可选地还可以遍历zip或tar等存档文件(开发中的功能)。然后使用哈希树查找重复的文件和文件夹。输出是最小重复集。因此,工具可以发现整个重复的文件夹结构,而不仅仅是单个文件。
Backup Deduplicator 解决了具有相同数据多个备份的问题,而数据的一些部分是重复的。可以审查和删除重复项以节省磁盘空间(开发中的功能)。
特性
- 多线程:该工具能够使用多个线程来加速哈希计算过程。
- 暂停和继续:该工具可以在任何时候暂停(终止)并继续。当前状态将保存到磁盘,以后可以加载。这对于长时间的分析过程(大目录)很有用。
- 缓存和继续:该工具可以在稍后运行,重新使用之前运行的缓存。这对于在目录更改后重新分析目录很有用。
- 跟随或不跟随符号链接:该工具可以配置为跟随或不跟随符号链接。
- 哈希冲突鲁棒性:该工具使用哈希来检测重复项。存在哈希冲突的概率。对于最终的重复检测,不仅比较哈希,还比较文件大小和文件类型,以减少误报的概率。当选择弱哈希函数(具有许多误报重复项)时,该工具可能会运行得更慢。
计划中的功能
- 存档支持:该工具将能够遍历zip或tar等存档文件,以找到其中的重复结构。
- 命令行界面:将添加图形命令行界面,以便轻松处理重复项(删除/排除/...)。
- 多机分析:该工具将能够并行分析多个机器上的(共享)目录,以加快分析过程。
- 合并:该工具将能够合并分析文件,以便将来自不同机器的分析结果合并。
- 硬链接:该工具将能够检测硬链接,并将它们视为非重复项(如果通过标志设置)。
- 评估模式:不同的分析模式。例如,允许设置一个真实目录(存档目录)进行比较。在真实目录中已经存在的每个文件/文件夹,在其他地方找到的将被标记为重复项以删除。
使用方法
该工具是一个命令行工具。有两个阶段:build
和 analyze
。
- 构建:该工具将构建目标目录的哈希树。这通过运行
backup-deduplicator build [OPTIONS] <target>
来完成。哈希树将保存到磁盘上,并在下一阶段使用。 - 分析:该工具通过分析哈希树来查找重复项。这通过运行
backup-deduplicator analyze [OPTIONS]
来完成。工具将输出一个重复结构列表到分析结果文件。
构建
构建目录哈希树的示例用法
backup-deduplicator
--threads 16
build
--working-directory /parent
--output /parent/hash.bdd
/parent/target
这将构建 /path/to/parent/target
目录的哈希树,并将其保存到父目录中的 hash.bdd
。工具将使用 16 个线程来分割哈希计算工作。
分析
分析哈希树的示例用法
backup-deduplicator
analyze
--output /parent/analysis.bdd
/parent/hash.bdd
这将分析 hash.bdd
中的哈希树,并将分析结果保存到 analysis.bdd
。分析文件将包含一个 JSON 对象列表(每行一个),每个对象代表一个找到的重复结构。
使用该工具的进一步处理正在开发中。
安装
该工具是用 Rust 编写的,可以使用 cargo
进行安装。
cargo install backup-deduplicator
预编译的二进制文件可在发布页面下载 https://github.com/0xCCF4/BackupDeduplicator/releases。
功能标志
该工具使用 Rust 功能标志来启用或禁用某些功能。以下标志可用:
hash-sha1
:使用 sha1 模块启用 SHA1 哈希函数hash-sha2
:使用 sha2 模块启用 SHA512、SHA256 哈希函数hash-xxh
:使用 xxhash-rust 模块启用 XXH3(32/64)哈希函数
贡献
欢迎对该项目的贡献!如果您有功能请求、错误报告或想为代码做出贡献,请打开一个 issue 或 pull request。
许可证
本项目根据 GPLv3 许可证授权。有关详细信息,请参阅 LICENSE 文件。
依赖
~2–13MB
~112K SLoC