释放存储空间,提升系统效率:探索 Duperemove 的去重能力

文摘   2024-08-10 12:36   江苏  

释放存储空间,提升系统效率:探索 Duperemove 的去重能力

前言:

在数字化时代,数据的激增带来了存储空间的挑战。重复文件不仅浪费了宝贵的磁盘资源,还可能降低了系统的运行效率。为了解决这一问题,Duperemove,一款基于 Linux 的去重工具,以其高效和简便的特性,走进了我们的视野。本文将深入探讨 Duperemove 的工作原理、使用场景以及如何通过它优化我们的存储策略。

Duperemove 是一个简单的工具,用于发现文件中的重复区域并提交它们进行去重。当给定一个文件列表时,它会基于区域逐个计算它们的哈希值,并将这些哈希值相互比较,找出并归类匹配的区域。可选地,可以应用每个块的哈希以进行进一步的重复查找。当使用 -d 选项时,duperemove 将使用 Linux 内核的 FIDEDUPRANGE ioctl 提交这些区域进行去重。

Duperemove 可以将计算出的哈希值存储在 'hashfile' 中。如果提供了现有的 hashfile,duperemove 将只计算自上次运行以来已更改的文件的哈希值。因此,您可以在数据变化时反复运行 duperemove,而无需重新校验未更改的数据。

Duperemove 还可以从 fdupes[1] 程序接收输入。

有关运行 duperemove 的更多详细信息,请参见 duperemove 手册页[2]

要求

最新稳定代码可以在 发布页面[3] 找到。

  • Linux 内核 3.13 或更高版本
  • GNU make
  • pkg-config
  • glib2
  • sqlite3
  • util-linux(用于 libuuid, libmount, libblkid)

然后运行 make 来构建 Duperemove。

常见问题解答

请参见 duperemove 手册页[4] 中的常见问题解答部分。

对于错误报告和功能请求,请使用 github 问题跟踪器[5]

示例

请参见 duperemove 手册页[6] 中的示例部分,了解完整的使用示例,包括 hashfile 的使用。

一个简单的示例,包括程序输出

Duperemove 接收要扫描去重的文件和目录列表。如果指定了目录,其中的所有常规文件都将被扫描。Duperemove 还可以使用 '-r' 开关被告知递归扫描目录。如果提供了 '-h',duperemove 将以 1024 的幂(例如,“128K”)打印数字。

假设以下是以下示例的任意布局。

.
├── dir1
│   ├── file3
│   ├── file4
│   └── subdir1
│       └── file5
├── file1
└── file2

这将对 'file1' 和 'file2' 进行去重:

duperemove -dh file1 file2

这做相同的事情,但添加了 dir1 中的任何文件(file3 和 file4):

duperemove -dh file1 file2 dir1

这将与上述操作完全相同,但将递归遍历 dir1,从而添加 file5。

duperemove -dhr file1 file2 dir1/

实际运行,输出将根据 duperemove 版本而异。

使用 128K 块
使用哈希:murmur3
使用 4 个线程进行文件哈希阶段
csum: /btrfs/file1  [1/5] (20.00%)
csum: /btrfs/file2  [2/5] (40.00%)
csum: /btrfs/dir1/subdir1/file5  [3/5] (60.00%)
csum: /btrfs/dir1/file3  [4/5] (80.00%)
csum: /btrfs/dir1/file4  [5/5] (100.00%)
总文件数:5
总哈希数:80
从 hashfile 加载重复的哈希。
哈希完成。计算重复区域 - 这可能需要一些时间。
简单读取和比较文件数据发现有 3 个区域可能受益于去重。
显示 2 个长度为 512.0K 的相同区域,id 为 0971ffa6
开始  文件名
512.0K "/btrfs/file1"
1.5M "/btrfs/dir1/file4"
显示 2 个长度为 1.0M 的相同区域,id 为 b34ffe8f
开始  文件名
0.0 "/btrfs/dir1/file4"
0.0 "/btrfs/dir1/file3"
显示 3 个长度为 1.5M 的相同区域,id 为 f913dceb
开始  文件名
0.0 "/btrfs/file2"
0.0 "/btrfs/dir1/file3"
0.0 "/btrfs/dir1/subdir1/file5"
使用 4 个线程进行去重阶段
[0x147f4a0] 尝试去重 id 为 0971ffa6 的区域
[0x147f770] 尝试去重 id 为 b34ffe8f 的区域
[0x147f680] 尝试去重 id 为 f913dceb 的区域
[0x147f4a0] 去重 1 个区域(id: 0971ffa6)目标:(512.0K, 512.0K), "/btrfs/file1"
[0x147f770] 去重 1 个区域(id: b34ffe8f)目标:(0.0, 1.0M), "/btrfs/dir1/file4"
[0x147f680] 去重 2 个区域(id: f913dceb)目标:(0.0, 1.5M), "/btrfs/file2"
内核处理数据(不包括目标文件):4.5M
区域信息比较显示共享区域的净变化为:5.5M

相关链接

  • Duperemove 维基[7]包含设计和性能文档。

  • duperemove-tests[8]有不断增加的回归测试集合。

  • Duperemove 网页[9]

结语:

通过本文的介绍,我们了解到 Duperemove 不仅是一款强大的去重工具,更是一个优化存储资源的有效解决方案。它通过智能识别和处理重复数据,帮助我们释放了磁盘空间,提高了数据管理的效率。随着技术的不断进步和存储需求的日益增长,Duperemove 及其同类工具将成为我们数字生活中的得力助手。让我们拥抱这些创新的工具,以更智能的方式管理数据,享受更高效的数字体验。

参考资料
[1]

fdupes: https://github.com/adrianlopezroche/fdupes

[2]

duperemove 手册页: http://markfasheh.github.io/duperemove/duperemove.html

[3]

发布页面: https://github.com/markfasheh/duperemove/releases

[4]

duperemove 手册页: http://markfasheh.github.io/duperemove/duperemove.html#10

[5]

github 问题跟踪器: https://github.com/markfasheh/duperemove/issues

[6]

duperemove 手册页: http://markfasheh.github.io/duperemove/duperemove.html#7

[7]

Duperemove 维基: https://github.com/markfasheh/duperemove/wiki

[8]

duperemove-tests: https://github.com/markfasheh/duperemove-tests

[9]

Duperemove 网页: http://markfasheh.github.io/duperemove/


编程悟道
自制软件研发、软件商店,全栈,ARTS 、架构,模型,原生系统,后端(Node、React)以及跨平台技术(Flutter、RN).vue.js react.js next.js express koa hapi uniapp Astro
 最新文章