当磁盘处于只读状态且 strace 输出为“总线错误”时,如何分析系统调用?

当磁盘处于只读状态且 strace 输出为“总线错误”时,如何分析系统调用?

我们的磁盘存在硬件问题,导致所有挂载点都变为只读。输出dmesg

end_request: I/O error, dev sda, sector 15574609
sd 0:0:0:0: SCSI error: return code = 0x00040000

我们想分析一个当前正在运行的程序,因为它应该在无法写入文件系统时就死掉了。因此,我们想用它strace来调试系统调用。

但输出strace是:

Bus error

似乎有些资源无法供机器使用,或者出现了一些低级错误。在系统管理员修复磁盘之前,我不知道该如何分析程序。

答案1

您的磁盘(可能,实际上几乎肯定)正在死亡。听起来您的系统管理员已经得出了这个结论。
准备好葬礼吧,将您的备份涂成黑色并执行恢复测试。


回复:总线错误 - 这应该会立即对相关程序造成致命影响。这相当于“WTF?这不可能!”的信号(请参阅此问题- 他们说的是内存,但同样的事情可能发生在磁盘或任何可寻址组件上)。我不记得你是否能捕捉到 SIGBUS,但如果你的程序正在这样做,它就不应该。
关于如何跟踪/调试你的软件的更多问题应该在堆栈溢出或者程序员

答案2

听起来你的系统甚至无法加载进行跟踪所需的实用程序/库。

此处正确的做法是:

  • 修复磁盘(例如从备份恢复等)
  • 让系统恢复到最佳状态
  • 以可控的方式正确测试你的程序(通过在正确的时间使文件系统只读)

相关内容