尽管设置了 RAID,Ubuntu 服务器仍因硬盘问题而无响应

尽管设置了 RAID,Ubuntu 服务器仍因硬盘问题而无响应

我正在 Ubuntu 10.04.4 LTS(Linux xxxx 2.6.32-67-server #134-Ubuntu SMP Wed Sep 24 18:55:00 UTC 2014 x86_64 GNU/Linux)上运行服务器,该服务器在软件 raid 1 中有两个硬盘。

我反复遇到这样的问题:系统在相当长的时间内(超过 1 小时)完全没有响应,导致服务器瘫痪。RAID 将有问题的磁盘保留在阵列中,有时会开始重建。我在三台不同的机器上(相同的设置)都遇到过同样的问题。

有没有简单的方法可以防止这种停机时间?磁盘故障本身并没有给我带来太多困扰(它们已经连续运行了几年),但由此产生的停机时间确实让我很困扰。我原以为即使一个硬盘发生故障,raid 1 也能让系统继续运行。如果 raid 控制器只是将磁盘从阵列中踢出,系统就会继续工作,那就完全没问题了。如果它试图在后台解决问题,而不会冻结,那就更好了。只要系统保持可运行,一些性能下降也不会成为问题。

以下是此类事件的日志条目示例:

Nov 14 14:00:10 xxxx kernel: [2137088.775542] ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Nov 14 14:00:10 xxxx kernel: [2137088.788591] ata2.00: irq_stat 0x40000001
Nov 14 14:00:10 xxxx kernel: [2137088.801879] ata2.00: failed command: READ DMA EXT
Nov 14 14:00:10 xxxx kernel: [2137088.814988] ata2.00: cmd 25/00:80:d1:b9:89/00:00:16:00:00/e0 tag 0 dma 65536 in
Nov 14 14:00:10 xxxx kernel: [2137088.814991]          res 51/40:00:d3:b9:89/00:00:16:00:00/e0 Emask 0x9 (media error)
Nov 14 14:00:10 xxxx kernel: [2137088.867197] ata2.00: status: { DRDY ERR }
Nov 14 14:00:10 xxxx kernel: [2137088.880205] ata2.00: error: { UNC }
Nov 14 14:00:10 xxxx kernel: [2137088.906336] ata2.00: configured for UDMA/133
Nov 14 14:00:10 xxxx kernel: [2137088.906345] sd 1:0:0:0: [sdb] Unhandled sense code
Nov 14 14:00:10 xxxx kernel: [2137088.906347] sd 1:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Nov 14 14:00:10 xxxx kernel: [2137088.906351] sd 1:0:0:0: [sdb] Sense Key : Medium Error [current] [descriptor]
Nov 14 14:00:10 xxxx kernel: [2137088.906356] Descriptor sense data with sense descriptors (in hex):
Nov 14 14:00:10 xxxx kernel: [2137088.906358]         72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00 
Nov 14 14:00:10 xxxx kernel: [2137088.906367]         16 89 b9 d3 
Nov 14 14:00:10 xxxx kernel: [2137088.906371] sd 1:0:0:0: [sdb] Add. Sense: Unrecovered read error - auto reallocate failed
Nov 14 14:00:10 xxxx kernel: [2137088.906376] sd 1:0:0:0: [sdb] CDB: Read(10): 28 00 16 89 b9 d1 00 00 80 00
Nov 14 14:00:10 xxxx kernel: [2137088.906385] end_request: I/O error, dev sdb, sector 378124755
Nov 14 14:00:10 xxxx kernel: [2137088.919172] ata2: EH complete

这是 raid 设置 (cat /proc/mdstat):

Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] [linear] [multipath]
md2 : active raid1 sda3[0] sdb3[1]
      726266432 blocks [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
      2104448 blocks [2/2] [UU]

md0 : active raid1 sdb1[1] sda1[0]
      4200896 blocks [2/2] [UU]

unused devices: <none>

提前谢谢您!

答案1

您使用的是软件 RAID。您没有“RAID 控制器”来“将磁盘从阵列中踢出”。相反,您有内核来管理 ATA 控制器,当磁盘没有响应时(在本例中是因为它们有介质错误),内核会等待。这种情况并不总是会产生可见的症状,但肯定会产生。

最简单的方法是使用硬件 RAID 控制器。即便如此,仍然有可能出现奇怪的边缘故障,从而产生可见的症状,但可能性很小。真正的硬件 RAID 控制器即使在出现介质错误的情况下也能更好地保持机器的响应。

相关内容