如何加快 find 命令的速度?我所寻求的只是一个尽可能完整的目录列表,其中有问题的文件带有注释。
我有一个 2002 年的旧 IDE 硬盘,其中一个 EXT3 分区中有 156GB 的数据。几年前我将其标记为有 smartctrl 错误。我的主板上不再有 IDE 端口,而且 smartctrl 无法与我的 IDE 转 USB 适配器配合使用。
我的目标是销毁该驱动器。在此之前,我想确认(通过哈希值比较)故障驱动器上的文件是否位于另一个健康的驱动器上(几年前复制的,当时两个驱动器都没有错误)
到目前为止,在 63404 个文件中,有 348 个导致输入/输出错误。1/2%。我很高兴盲目地摆脱它们。
更新:查找大约需要 5 个小时。它找到了 115000 个文件,其中 800 个有输入/输出错误。
答案1
您将此驱动器称为至少“几年前”的“旧 IDE HDD”,这让我认为与现代驱动器相比,它的存储容量非常有限。(编辑:您将问题编辑为 156 GB。按照今天的标准,这绝对很小。)
find
可能不会发出 I/O 错误;它可能是报告它们。错误来自内核,它正在响应驱动器报告的问题。
假设您有足够的可用空间来制作驱动器的映像,最好的方法可能是使用ddrescue
它来执行此操作。
ddrescue
dd
专门用于处理边缘介质,即使与 一起使用,其性能也明显优于旧版conv=noerror
。ddrescue 有两大优势dd
:
- 它确保数据位置不会改变。如果数据块位于源上的一个位置,并且可读,它将被放置在目标上的相同位置。这意味着文件系统偏移量等不会改变,从而确保是可读性保持一致。
- 它首先读取大段内容,然后指出哪里有问题,然后返回并读取(和写入)它发现的任何有问题的区域。对于边缘源媒体,这会为您提供包含最多第一次传递时,数据会变得越来越完整。
它还具有很好的进度显示,但您dd
也可以从中获取它。
所有这些都不依赖于SMART数据。
获得驱动器(或其所有分区)的映像后,可以以环回方式安装它/它们,以进行进一步分析和数据提取。由于此驱动器只有一个分区,最简单的方法可能是简单地对该分区进行映像,因为它避免了处理环回设备偏移量等问题。您甚至可以制作一个额外的副本,保留一份以防万一,然后尝试通过e2fsck
在其上运行来使另一份恢复原状。这样做应该可以让您以最小的附带损害访问数据,尽管由于文件系统元数据的损坏,文件系统的某些部分可能无法访问。
答案2
智能错误表明驱动器有问题,这可能是查找需要这么长时间的原因。
驱动器可能已物理损坏,没有合理的方法可以加快 find 命令的速度。相反,请考虑使用恢复工具来恢复损坏磁盘的映像,然后安装并查找其中的文件。