#target-directory #tree-hash #deduplication #cleanup #deduplicate #disk-space #archive-management

bin+lib backup-deduplicator

一个备份去重工具。它为目标目录中的所有文件和文件夹构建一个哈希树。可选地还可以遍历zip或tar等存档文件。然后使用哈希树查找重复的文件和文件夹。

3 个版本 (重大更改)

0.3.0 2024年4月11日
0.2.0 2024年4月2日
0.1.0 2024年3月30日

#149 in 压缩

GPL-3.0-or-later

155KB
2.5K SLoC

Backup Deduplicator

一个备份去重工具。它为指定目录中的所有文件和文件夹构建一个哈希树。可选地还可以遍历zip或tar等存档文件(开发中的功能)。然后使用哈希树查找重复的文件和文件夹。输出是最小重复集。因此,工具可以发现整个重复的文件夹结构,而不仅仅是单个文件。

Backup Deduplicator 解决了具有相同数据多个备份的问题,而数据的一些部分是重复的。可以审查和删除重复项以节省磁盘空间(开发中的功能)。

特性

  • 多线程:该工具能够使用多个线程来加速哈希计算过程。
  • 暂停和继续:该工具可以在任何时候暂停(终止)并继续。当前状态将保存到磁盘,以后可以加载。这对于长时间的分析过程(大目录)很有用。
  • 缓存和继续:该工具可以在稍后运行,重新使用之前运行的缓存。这对于在目录更改后重新分析目录很有用。
  • 跟随或不跟随符号链接:该工具可以配置为跟随或不跟随符号链接。
  • 哈希冲突鲁棒性:该工具使用哈希来检测重复项。存在哈希冲突的概率。对于最终的重复检测,不仅比较哈希,还比较文件大小和文件类型,以减少误报的概率。当选择弱哈希函数(具有许多误报重复项)时,该工具可能会运行得更慢。

计划中的功能

  • 存档支持:该工具将能够遍历zip或tar等存档文件,以找到其中的重复结构。
  • 命令行界面:将添加图形命令行界面,以便轻松处理重复项(删除/排除/...)。
  • 多机分析:该工具将能够并行分析多个机器上的(共享)目录,以加快分析过程。
  • 合并:该工具将能够合并分析文件,以便将来自不同机器的分析结果合并。
  • 硬链接:该工具将能够检测硬链接,并将它们视为非重复项(如果通过标志设置)。
  • 评估模式:不同的分析模式。例如,允许设置一个真实目录(存档目录)进行比较。在真实目录中已经存在的每个文件/文件夹,在其他地方找到的将被标记为重复项以删除。

使用方法

该工具是一个命令行工具。有两个阶段:buildanalyze

  1. 构建:该工具将构建目标目录的哈希树。这通过运行 backup-deduplicator build [OPTIONS] <target> 来完成。哈希树将保存到磁盘上,并在下一阶段使用。
  2. 分析:该工具通过分析哈希树来查找重复项。这通过运行 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