为什么坏块会出现段错误?

为什么坏块会出现段错误?

我正在尝试检查已安装的分区以查看驱动器是否有错误:

[root@virtuality ~]# /sbin/badblocks -v /dev/sdb1
Segmentation fault

呃哦。这是什么意思?为什么会badblocks出现段错误?我可以修复它吗?

(系统是CentOS版本4.6,驱动器是SATA驱动器)

编辑:使用strace

[root@virtuality ~]# strace /sbin/badblocks -v /dev/sdb1
...[snip]...
open("/dev/sdb1", O_RDONLY)             = 3
ioctl(3, BLKGETSIZE, 0x7fbffff878)      = 0
close(3)                                = 0
open("/dev/sdb1", O_RDONLY)             = 3
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++

答案1

最后几行strace讲述了一个相当无聊的故事:badblocks打开驱动设备,获取其大小,关闭它,重新打开它,然后去做一些工作,但以某种方式失败strace并没有显示出来。您必须使用gdb或类似的工具才能更深入地挖掘。

如果卸载分区,您的症状可能会消失,这样badblocks就有一个稳定的工作可以处理。显然,这不应该仅仅为了执行您正在尝试的只读测试而需要,但这并不是第一次出现某些低级不常用操作无法正常工作的情况。

额外好处:如果卸载分区,您可以使用badblocks -n,这在查找和修复磁盘表面问题方面要有效得多。

答案2

事实证明这是一个愚蠢的错误,看起来我的副本badblocks可能刚刚有一个错误。

我跑了yum update,之后badblocks就不再出现段错误了。

相关内容