我的一台 Dell PowerEdge R210 出现了问题。机器使用的是 Centos 6,今天系统日志开始提示硬盘出现故障。
1 月 6 日 03:20:12 centos6 内核:通道 0 ID 0 的 LSI 调试日志信息 31080000 1 月 6 日 03:20:12 centos6 内核:sd 0:1:0:0:[sda] 未处理的感知代码 1 月 6 日 03:20:12 centos6 内核:sd 0:1:0:0:[sda] 结果:hostbyte=invalid driverbyte=DRIVER_SENSE 1 月 6 日 03:20:12 centos6 内核:sd 0:1:0:0:[sda] Sense Key:中等错误 [当前] 1 月 6 日 03:20:12 centos6 内核:信息 fld=0x21a9055 1 月 6 日 03:20:12 centos6 内核:sd 0:1:0:0:[sda] Add. Sense:未恢复的读取错误 1 月 6 日 03:20:12 centos6 内核:sd 0:1:0:0:[sda] CDB:读取(10):28 00 02 1a 90 20 00 00 38 00 1 月 6 日 03:22:17 centos6 内核:mptbase:ioc0:LogInfo(0x31080000):Originator={PL},Code={SATA NCQ 错误后所有命令失败},SubCode(0x0000)cb_idx mptscsih_io_done 1 月 6 日 03:22:17 centos6 内核:通道 0 ID 0 的 LSI 调试日志信息 31080000 1 月 6 日 03:22:17 centos6 内核:mptbase:ioc0:LogInfo(0x31080000):Originator={PL},Code={SATA NCQ 错误后所有命令失败},SubCode(0x0000)cb_idx mptscsih_io_done 1 月 6 日 03:22:17 centos6 内核:通道 0 ID 0 的 LSI 调试日志信息 31080000 1 月 6 日 03:22:17 centos6 内核:mptbase:ioc0:LogInfo(0x31080000):Originator={PL},Code={SATA NCQ 错误后所有命令失败},SubCode(0x0000)cb_idx mptscsih_io_done 1 月 6 日 03:22:17 centos6 内核:通道 0 ID 0 的 LSI 调试日志信息 31080000 1 月 6 日 03:22:17 centos6 内核:mptbase:ioc0:LogInfo(0x31080000):Originator={PL},Code={SATA NCQ 错误后所有命令失败},SubCode(0x0000)cb_idx mptscsih_io_done 1 月 6 日 03:22:17 centos6 内核:通道 0 ID 0 的 LSI 调试日志信息 31080000 1 月 6 日 03:22:17 centos6 内核:mptbase:ioc0:LogInfo(0x31080000):Originator={PL},Code={SATA NCQ 错误后所有命令失败},SubCode(0x0000)cb_idx mptscsih_io_done 1 月 6 日 03:22:17 centos6 内核:通道 0 ID 0 的 LSI 调试日志信息 31080000 1 月 6 日 03:22:17 centos6 内核:sd 0:1:0:0:[sda] 未处理的感知代码 1 月 6 日 03:22:17 centos6 内核:sd 0:1:0:0:[sda] 结果:hostbyte=invalid driverbyte=DRIVER_SENSE 1 月 6 日 03:22:17 centos6 内核:sd 0:1:0:0:[sda] Sense Key:中等错误 [当前] 1月6日 03:22:17 centos6 内核:信息 fld=0x21a7d89 1 月 6 日 03:22:17 centos6 内核:sd 0:1:0:0:[sda] Add. Sense:未恢复的读取错误 1 月 6 日 03:22:17 centos6 内核:sd 0:1:0:0:[sda] CDB:读取(10):28 00 02 1a 7d 80 00 00 18 00 1 月 6 日 03:22:19 centos6 内核:sd 0:1:0:0:[sda] 未处理的感知代码 1 月 6 日 03:22:19 centos6 内核:sd 0:1:0:0:[sda] 结果:hostbyte=invalid driverbyte=DRIVER_SENSE 1 月 6 日 03:22:19 centos6 内核:sd 0:1:0:0:[sda] Sense Key:中等错误 [当前] 1 月 6 日 03:22:19 centos6 内核:Info fld=0x21a7dc0 1 月 6 日 03:22:19 centos6 内核:sd 0:1:0:0:[sda] Add. Sense:未恢复的读取错误 1 月 6 日 03:22:19 centos6 内核:sd 0:1:0:0:[sda] CDB:读取(10):28 00 02 1a 7d c0 00 00 80 00 1 月 6 日 03:28:05 centos6 内核:sd 0:1:0:0:[sda] 未处理的感知代码 1 月 6 日 03:28:05 centos6 内核:sd 0:1:0:0:[sda] 结果:hostbyte=invalid driverbyte=DRIVER_SENSE 1 月 6 日 03:28:05 centos6 内核:sd 0:1:0:0:[sda] Sense Key:中等错误 [当前] 1 月 6 日 03:28:05 centos6 内核:信息 fld=0x21a7d88 1 月 6 日 03:28:05 centos6 内核:sd 0:1:0:0:[sda] Add. Sense:未恢复的读取错误 1 月 6 日 03:28:05 centos6 内核:sd 0:1:0:0:[sda] CDB:读取(10):28 00 02 1a 7d 88 00 00 08 00 1 月 6 日 03:28:09 centos6 内核:sd 0:1:0:0:[sda] 未处理的感知代码 1 月 6 日 03:28:09 centos6 内核:sd 0:1:0:0:[sda] 结果:hostbyte=invalid driverbyte=DRIVER_SENSE
现在我假设这台机器有 RAID 控制器,但不知道配置了什么类型的 RAID(如果有的话)。
lspci 的输出:
01:00.0 SCSI 存储控制器:LSI Logic / Symbios Logic SAS1068E PCI-Express Fusion-MPT SAS(rev 08)
所以这是我的问题:有没有一种方法可以在不重启机器的情况下从 Linux 命令行诊断该问题?从系统级别,我只看到逻辑驱动器,而看不到 RAID 中连接的硬盘驱动器,这通常是好的,但现在我想检查是否有 RAID,哪些硬盘驱动器是此 RAID 的成员,以及哪个硬盘驱动器出现故障。
EDIT1. 目前我只能通过 ssh 访问这台机器,所以我想知道是否可以通过 ssh 来诊断这个问题。
答案1
如果您不愿意重新启动系统来安装制造商的工具,那么您基本上会一直坐在这里,直到机器完全死机。
到那时,您想要什么都无关紧要了。机器将停机,可能永远停机。您不必担心重新启动,因为您必须这样做,这是更换硬盘和从备份中恢复的一部分。(您做有备份吧?)。
讲座结束。
如果您不想安装制造商的诊断工具,您唯一剩下的选择就是亲自走到机器前,寻找闪烁着红色(或黄色)“故障”指示灯的驱动器。更换那个。
当然,这假设 RAID-1、RAID-5、RAID-6 或其他一些允许您更换单个故障驱动器的配置(并且您只有一个故障驱动器)。如果您没有这样的配置,或者发生故障的驱动器数量超过系统的容错级别,那么您将回到“更换所有驱动器并从备份中恢复”的阶段。
缺少备份,你只能陷入“进行备份,如果您没有得到您需要的一切,请致电数据恢复公司并尝试挽救您能挽救的一切”。
答案2
磁盘上有中等错误,这意味着有数据无法读取。LSI 日志信息 (0x31080000) 告诉您,由于 SATA 执行错误恢复的方式,后续 IO 失败。这本身不是问题。
您的磁盘损坏,并且已经丢失了数据,如果您使用的是 RAID,那么它也无法正常工作。尽管您很可能根本没有 RAID,但要知道这一点,您应该查看 lsscsi 的输出,它会告诉您 /dev/sda 设备的品牌和型号。如果它显示硬盘(WD、Hitachi、Seagate),则表示那里有一个单独的 HDD,如果它显示 LSI,则表示您有一个 RAID 设备。
无论哪种方式,您都已经丢失了数据,因为即使它是 RAID 设备,它也无法从底层的中等错误中恢复,并且最后也返回了中等错误。
这之后该怎么办?
您需要找到丢失的文件,尝试逐个读取它们(find、xargs 和 cat 是这方面的好工具),然后查看无法读取哪些文件。您需要从备份中取出它们。
要恢复扇区,只需再次写入它们,它将修复当前的介质错误,您可以删除文件或覆盖它们,文件系统将自行执行这些操作。
要知道 HDD 是否仍然值得使用,您需要查看问题是否重复或扩展,您可以使用 smartctl 来实现这一点,主要查找重新分配的次数,如果它在任何一个月增长超过一次,您就需要更换它。
如果有疑问并且您关心数据,请更换磁盘。有介质错误的磁盘比没有介质错误的磁盘更有可能损坏。