stat()系统调用被阻止

时间:2014-07-21 11:15:27

标签: c linux multithreading shell

当我尝试对已损坏的文件执行统计时,

stat()系统调用需要很长时间。幻数已损坏。 在我的源代码中调用之后我有一个打印件,经过一段时间的延迟后会打印出来。 我不确定stat()是否正在对呼叫进行任何重试。如果有任何文件,请分享。这将是很大的帮助。

它返回输入输出错误。错误5 EIO。所以我不确定文件或文件系统是否已损坏

1 个答案:

答案 0 :(得分:0)

这可能是由于老化或损坏的旋转磁盘上的坏块造成的。还有两种可能同时发生的症状:

  • 内核在系统日志中报告了大量显式I / O错误。

  • load average突然飙升。发生这种情况是因为等待I / O的进程处于uninterrupted sleep,而内核忙于尝试与硬件交互,导致系统暂时变得迟缓。你不能阻止这种情况发生,或者在不间断的睡眠中杀死进程。这是一种OS Achille的脚跟。

如果是这种情况,请卸载所涉及的文件系统并对其运行e2fsck -c -y。如果它是根文件系统,您将需要,例如,使用Live CD启动系统并从那里执行。来自man e2fsck

  

-c

     

此选项使e2fsck使用badblocks(8)程序对设备进行只读扫描                 为了找到任何坏块。如果找到任何坏块,它们将被添加到坏块中                 inode以防止将它们分配给文件或目录。如果指定此选项两次,则使用非破坏性读写测试完成坏块扫描。

请注意,-cc需要时间; -c应该足够了。 -y会自动回答所有问题,因为可能会有很多这样的问题。

您可能会丢失一些数据(之后查看/lost+found);希望系统仍然可以启动。至少,文件系统现在可以安装。磁盘本身可能会或可能不会持续一段时间。我已经完成了这个并且让它们保持了好几个月,但不依赖它

如果这是一个SMART驱动器,你可以使用pparently some other tools来诊断和处理同样的问题,虽然我在这里概述的可能还不错。