如何减少进程等待(阻塞)磁盘读取的时间(只是为了发现错误)?

如何减少进程等待(阻塞)磁盘读取的时间(只是为了发现错误)?

当遇到磁盘上无法读取的扇区时等待太久确实很烦人。 (特别是如果您试图从有坏扇区的磁盘中读取尽可能多的数据,并且要快速执行,以进行备份和恢复。)

磁盘报告读取错误(感知错误)。

是否可以对磁盘(ATA)进行设置,使失败的读取不会花费太长时间,以便可以将其删除,并且读取过程和磁盘不会被阻塞,并且可以尝试下一次读取?

或者也许可以设置linux磁盘驱动程序来实现这一点?

或者linux中的读取过程可以做些什么来避免长时间读取?

答案1

是否可以对磁盘(ATA)进行设置,使失败的读取不会花费太长时间,以便可以将其删除,并且读取过程和磁盘不会被阻塞,并且可以尝试下一次读取?

不。

我对此的理解是,这是一个逻辑问题,是由有利于工作硬件的性能和稳定性的设计选择(并非 Linux 所独有)引起的,因为不能合理地期望操作系统能够处理“可能出现故障”的硬件所带来的无限可能性。 。我们确实有关于这个的问答

如果您尝试从有坏扇区的磁盘中读取尽可能多的数据

如果是坏扇区,那么你很幸运;卸载受影响的分区并e2fsck -cy /dev/whatever在其上运行(假设它们是 ext 格式)。交换机-c运行badblocks并将各个地址添加到分区中的“坏块列表”中;当随后安装时,系统将永远不会尝试访问它们。这可能意味着您丢失了一些数据;它的一些部分可以在/lost+found目录中找到。该-y开关使您无需手动对 fsck 的问题说“是的,修复它”,而 fsck 的问题可能有很多。

然而,如果它不是坏块(例如,它是一个失败的控制器),那么你就不走运了。东西坏了,这就是原因定期备份重要数据是如此重要。我不确定在e2fsck -cy控制器损坏的磁盘上运行是否会使情况变得更糟,这是需要考虑的事情,但是OTOH,如果您无论如何都无法获得所需的内容,那么您也没有什么可失去的。

答案2

大多数Unix系统没有实现本地磁盘的异步读取;尝试调用会导致同步读取。特别是,在 Linux 中,本地磁盘的睡眠是不间断的(这对于有划痕的 CD 来说很烦人)。

如果本地磁盘 IO 在您的平台上恰好是可中断的,您可以使用 Alarm();读();设置您愿意等待的最长时间。

相关内容