我有一台 Linux 服务器 (CentOS 5.5),它有两个相同的 IDE 硬盘。我使用软件 RAID (mdadm) 为每个文件系统创建镜像,这样即使任何一个硬盘发生故障,也不会丢失数据。
今天我的一个硬盘坏了。RAID 的整个目的应该是让系统在发生这种情况时继续运行;但事实是,控制台开始一遍又一遍地重复同样的 4 行:
hdb: task_out_intr: status=0x61 { DriveReady DeviceFault Error }
hdb: task_out_intr: error=0x04 { DriveStatusError }
ide: failed opcode was: unknown
ide0: reset: success
由于错误率很高,控制台无法使用。我能够通过 SSH 登录,但我尝试的第一个命令就挂了。我再次通过 SSH 登录并尝试重新启动,但同样挂了。最终我不得不物理重置机器。
我知道如何从 MD 中移除故障驱动器并替换它等等。但在这种情况下让机器锁定并变得无法使用似乎首先违背了 RAID 镜像的全部意义。
这只是 Linux 内核在这种情况下的一贯行为吗?或者是否有某种方法可以配置内核,以便当硬盘驱动器发生故障时,它会限制产生的错误率,并且不会阻止机器的使用和干净地重新启动?
答案1
我还没有遇到过这种情况,但由于你使用的是软件 RAID,所以可能的硬盘故障导致磁盘控制器的 I/O 受到干扰,因此您会遇到其他故障,例如命令锁定。
数据应该是完整的(除非数据已损坏,在这种情况下,您有重复损坏)。如果驱动器本身发生故障,您应该能够关闭电源,移除损坏的驱动器,然后重新启动电源,希望一切能够通过损坏的镜像集重新上线。
在我看来,故障的性质与控制器不符。取出坏的驱动器。把它留在里面对你没有任何好处,而且可能会造成更大的伤害。
答案2
当 IDE 磁盘遇到读取错误时,大多数情况下它会拒绝响应读取命令。
您的错误消息(显示hdb
)暗示两个硬盘驱动器位于同一根电缆上。这可能是导致问题的原因:故障磁盘阻塞了整个 ide 总线 - Linux 内核只是有等待超时,因此没有机会访问工作磁盘。