释放存储空间,提升系统效率:探索 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 及其同类工具将成为我们数字生活中的得力助手。让我们拥抱这些创新的工具,以更智能的方式管理数据,享受更高效的数字体验。
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/