出现 smartctrl 错误时,find 会花费“很长时间”,并发出输入/输出错误

出现 smartctrl 错误时,find 会花费“很长时间”,并发出输入/输出错误

如何加快 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它来执行此操作。

ddrescuedd专门用于处理边缘介质,即使与 一起使用,其性能也明显优于旧版conv=noerror。ddrescue 有两大优势dd

  • 它确保数据位置不会改变。如果数据块位于源上的一个位置,并且可读,它将被放置在目标上的相同位置。这意味着文件系统偏移量等不会改变,从而确保可读性保持一致。
  • 它首先读取大段内容,然后指出哪里有问题,然后返回并读取(和写入)它发现的任何有问题的区域。对于边缘源媒体,这会为您提供包含最多第一次传递时,数据会变得越来越完整。

它还具有很好的进度显示,但您dd也可以从中获取它。

所有这些都不依赖于SMART数据。

获得驱动器(或其所有分区)的映像后,可以以环回方式安装它/它们,以进行进一步分析和数据提取。由于此驱动器只有一个分区,最简单的方法可能是简单地对该分区进行映像,因为它避免了处理环回设备偏移量等问题。您甚至可以制作一个额外的副本,保留一份以防万一,然后尝试通过e2fsck在其上运行来使另一份恢复原状。这样做应该可以让您以最小的附带损害访问数据,尽管由于文件系统元数据的损坏,文件系统的某些部分可能无法访问。

答案2

智能错误表明驱动器有问题,这可能是查找需要这么长时间的原因。

驱动器可能已物理损坏,没有合理的方法可以加快 find 命令的速度。相反,请考虑使用恢复工具来恢复损坏磁盘的映像,然后安装并查找其中的文件。

相关内容