在Linux上寻找重复数据删除工具的地方很多,例如,参见此Wiki页面。
所有脚本几乎都只检测,打印重复的文件名或通过将它们硬链接到单个副本来删除重复的文件。
随着btrfs的兴起,将有另一种选择:创建文件的CoW(写时复制)副本(如cp reflink=always
)。我没有找到执行此操作的任何工具,有人知道执行此操作的工具吗?
在Linux上寻找重复数据删除工具的地方很多,例如,参见此Wiki页面。
所有脚本几乎都只检测,打印重复的文件名或通过将它们硬链接到单个副本来删除重复的文件。
随着btrfs的兴起,将有另一种选择:创建文件的CoW(写时复制)副本(如cp reflink=always
)。我没有找到执行此操作的任何工具,有人知道执行此操作的工具吗?
Answers:
我试过了 虽然不错(并且具有一些有用的差异化功能,可能使其成为许多人的最佳选择),但它似乎会扫描所有目标文件的全部以获取校验和。
这太慢了。
另一方面,其他程序(例如rdfind和rmlint)的扫描方式也不同。
rdfind具有使用btrfs reflink的“实验”功能。(以及硬链接,符号链接等的“固定”选项)
rmlint具有btrfs克隆,reflink,常规硬链接,符号链接,删除和您自己的自定义命令的“可靠”选项。
但更重要的是,rdfind和rmlint 明显更快。如数量级。而不是扫描所有目标文件中的校验和,它大约执行此操作:
我知道的rmlint的其他优点:
我将rmlint与deduperemove进行了比较,后者也盲目地扫描了每个目标文件中的校验和。Duperemove用了几天的时间才能完成(我认为是4),完全倾斜。fmlint花了几个小时来确定重复项,然后用不到一天的时间用Btrfs克隆对其进行了消隐。
(也就是说,任何努力编写和支持高质量,健壮软件并免费提供的人,都应该受到大赞!)
顺便说一句:您应该不惜一切代价避免使用常规的硬链接作为“通用”重复数据删除解决方案进行重复数据删除。
尽管在某些特定使用情况下,硬链接可能非常方便(例如,单个文件或使用可以扫描超过最小最小大小的特定文件类型的工具,或者作为许多免费的商业备份/快照解决方案的一部分),但这可能是灾难性的用于大型通用文件系统上的“重复数据删除”。原因是大多数用户的文件系统上可能有成千上万个文件,这些文件是二进制相同的,但功能却完全不同。
例如,许多程序会生成模板和/或隐藏的设置文件(有时在它可以看到的每个文件夹中),它们最初是相同的,而且大多数保持不变,直到您(用户)不需要它们为止。
举一个具体的例子:照片缩略图缓存文件(包含有充分的理由-可移植性)在包含照片的文件夹中生成无数个程序,这些文件可能要花费数小时或数天才能生成,但是使用照片应用程序变得轻而易举。如果所有最初的缓存文件都被硬链接在一起,那么您以后可以在目录上打开该应用程序,它会建立一个大的缓存...然后猜测:现在,每个以前具有硬链接缓存的文件夹现在都有错误的缓存。潜在的灾难性结果可能会导致意外的数据破坏。并且还可能以某种方式爆炸不支持硬链接的备份解决方案。
此外,它可能会破坏整个快照。快照的全部目的是使“实时”版本可以继续更改,并具有回滚到先前状态的能力。如果所有内容都硬链接在一起,则...“回滚”到同一件事。
好消息是,使用Btrfs克隆/ reflink进行重复数据删除可以消除这种损害(我认为-自扫描以来,它应该将硬链接的文件视为相同...除非它有不考虑硬链接的逻辑。这可能取决于进行重复数据删除的特定实用程序。)