我正在尝试检查已安装的分区以查看驱动器是否有错误:
[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
就不再出现段错误了。