我遇到了一些硬盘驱动器的奇怪错误,我无法缩小问题范围。它是 RAID 阵列(Linux 软件 RAID,廉价硬件)的一部分,因此当它从阵列中掉线时,我的第一反应是简单地用备用硬盘驱动器替换它。但重建一直失败。
这些驱动器位于 5 个驱动器的外部 SATA 机箱中(4 个机箱,每个机箱 5 个驱动器),我注意到这个机箱也出现了奇怪的症状。通常,当添加驱动器时,指示灯会以某种方式闪烁,因为机箱的 SATA 端口复制器会检测到新驱动器。重建期间这种情况一直发生,这对我来说意味着端口复制器的硬件可能是真正的罪魁祸首。
我有一个备用机箱,可以解决此类问题,所以我将其换出并将驱动器放入新的机箱中。但此时mdadm
根本无法重建驱动器。它总是失败立即地启动后。我尝试了几个不同的备用驱动器,症状相同。当然我没有遇到多个驱动器故障完全一样的方式在同一时间?
机箱连接到安装在主机上的 2 个 SATA 控制器卡,每个卡有 2 个端口。也许是其中一个卡出了问题?所以我移动了 SATA 电缆,以便“有问题的”机箱位于另一张卡上。但同一个机箱中的同一个驱动器托架仍然存在同样的问题。
此时我已经没什么可测试的了。主机中有 2 个驱动器、2 个机箱和 2 个控制卡。它们的任何组合都会产生相同的问题。
此时mdadm
,正在尝试重建驱动器(不确定为什么这次没有失败),但显著地速度降低。速度在正常速度的 1/2 和 1/4 之间波动。更换的机柜也像之前的机柜一样重新检测驱动器。
现在,我对硬件诊断不太了解。对于商品硬件,通常有一个更换周期。但在这种情况下,所有更换部件的行为都一样,所以我不确定什么问题是。我一直在谷歌搜索我看到的一些东西,/var/log/syslog
但到目前为止还没有理解太多。我可以告诉你......
当机箱“重新检测”驱动器时,将显示以下内容syslog
:
Oct 3 17:43:52 gibson kernel: [ 1478.755088] ata5: controller in dubious state, performing PORT_RST
Oct 3 17:43:54 gibson kernel: [ 1480.909415] ata5.05: limiting SATA link speed to 1.5 Gbps
其他令人不安且经常重复的消息如下syslog
:
Oct 3 17:46:05 gibson kernel: [ 1612.163891] ata5.00: exception Emask 0x0 SAct 0x0 SErr 0x400000 action 0x6
Oct 3 17:46:05 gibson kernel: [ 1612.163894] ata5.00: irq_stat 0x00060002, device error via D2H FIS
Oct 3 17:46:05 gibson kernel: [ 1612.163897] ata5.00: SError: { Handshk }
Oct 3 17:46:05 gibson kernel: [ 1612.163899] ata5.00: failed command: WRITE DMA
Oct 3 17:46:05 gibson kernel: [ 1612.163904] ata5.00: cmd ca/00:00:00:29:87/00:00:00:00:00/e0 tag 0 dma 131072 out
Oct 3 17:46:05 gibson kernel: [ 1612.163905] res 51/84:90:70:29:87/00:00:00:00:00/e0 Emask 0x10 (ATA bus error)
Oct 3 17:46:05 gibson kernel: [ 1612.163907] ata5.00: status: { DRDY ERR }
Oct 3 17:46:05 gibson kernel: [ 1612.163909] ata5.00: error: { ICRC ABRT }
有时是这样的:
Oct 3 18:07:10 gibson kernel: [ 2877.073010] ata5.00: failed to read SCR 1 (Emask=0x40)
Oct 3 18:07:10 gibson kernel: [ 2877.073015] ata5.00: failed to read SCR 0 (Emask=0x40)
Oct 3 18:07:10 gibson kernel: [ 2877.073017] ata5.01: failed to read SCR 1 (Emask=0x40)
Oct 3 18:07:10 gibson kernel: [ 2877.073020] ata5.01: failed to read SCR 0 (Emask=0x40)
Oct 3 18:07:10 gibson kernel: [ 2877.073022] ata5.02: failed to read SCR 1 (Emask=0x40)
Oct 3 18:07:10 gibson kernel: [ 2877.073024] ata5.02: failed to read SCR 0 (Emask=0x40)
Oct 3 18:07:10 gibson kernel: [ 2877.073026] ata5.03: failed to read SCR 1 (Emask=0x40)
Oct 3 18:07:10 gibson kernel: [ 2877.073028] ata5.03: failed to read SCR 0 (Emask=0x40)
Oct 3 18:07:10 gibson kernel: [ 2877.073030] ata5.04: failed to read SCR 1 (Emask=0x40)
Oct 3 18:07:10 gibson kernel: [ 2877.073032] ata5.04: failed to read SCR 0 (Emask=0x40)
Oct 3 18:07:10 gibson kernel: [ 2877.073034] ata5.05: failed to read SCR 1 (Emask=0x40)
还有其他测试可以进行吗?还有其他我可以尝试的事情吗?可以不管使用什么硬件,都会出现这样的错误症状吗?
多年来,该阵列运行良好,偶尔需要更换驱动器。主机上没有进行任何软件更改(除非我被入侵而不知道,这当然是可能的)。但几个月前的一次驱动器故障导致我不断重建,最终让我处于当前状态。
编辑:我刚刚意识到的另一种模式,不确定它是否意味着什么。阵列中的驱动器是sdb1
通过sdu1
。启动操作系统并不总是以相同的顺序看到它们,因此任何给定的驱动器都可能在重新启动时更改其字母。当驱动器持续出现故障时立即地重建后mdadm
,它是/dev/sdq1
。但从目前的症状来看(重建缓慢、机箱反复“重新检测”它,以及基本上上面记录的错误),它一直是/dev/sdu1
。
编辑:我下载了 Knoppix 7.2,看看能否启动阵列并在那里添加驱动器。只是想看看这是否是软件问题。症状完全相同。所以……更换了硬件,更换了软件,但问题仍然存在。这让我现在陷入了困境。
编辑:我也尝试过用这个将驱动器清零:
dd if=/dev/zero of=/dev/sdu bs=1M
但同样的症状仍然存在。此时我怀疑控制器可能出了问题,但我不明白是怎么回事。两张卡都可以工作,但不知何故两张卡一起无法管理这么多驱动器?可能没有任何意义,我只是想在这里识别模式。
编辑:输出smartctl -a -d ata /dev/sdu
:
smartctl 5.40 2010-10-16 r3189 [x86_64-slackware-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF INFORMATION SECTION ===
Model Family: Western Digital Caviar Green family
Device Model: WDC WD20EADS-00S2B0
Serial Number: WD-WCAVY0536607
Firmware Version: 01.00A01
User Capacity: 2,000,398,934,016 bytes
Device is: In smartctl database [for details use: -P show]
ATA Version is: 8
ATA Standard is: Exact ATA specification draft version not indicated
Local Time is: Sat Oct 5 07:04:21 2013 EDT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
General SMART Values:
Offline data collection status: (0x84) Offline data collection activity
was suspended by an interrupting command from host.
Auto Offline Data Collection: Enabled.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: (42900) seconds.
Offline data collection
capabilities: (0x7b) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new
command.
Offline surface scan supported.
Self-test supported.
Conveyance Self-test supported.
Selective Self-test supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: ( 2) minutes.
Extended self-test routine
recommended polling time: ( 255) minutes.
Conveyance self-test routine
recommended polling time: ( 5) minutes.
SCT capabilities: (0x303f) SCT Status supported.
SCT Error Recovery Control supported.
SCT Feature Control supported.
SCT Data Table supported.
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 179 179 051 Pre-fail Always - 90370
3 Spin_Up_Time 0x0027 149 149 021 Pre-fail Always - 9525
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 22
5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0
9 Power_On_Hours 0x0032 092 092 000 Old_age Always - 6170
10 Spin_Retry_Count 0x0032 100 253 000 Old_age Always - 0
11 Calibration_Retry_Count 0x0032 100 253 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 18
192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 9
193 Load_Cycle_Count 0x0032 001 001 000 Old_age Always - 610025
194 Temperature_Celsius 0x0022 117 073 000 Old_age Always - 35
196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 125
198 Offline_Uncorrectable 0x0030 200 200 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 62927
200 Multi_Zone_Error_Rate 0x0008 090 090 000 Old_age Offline - 22176
SMART Error Log Version: 1
No Errors Logged
SMART Self-test log structure revision number 1
No self-tests have been logged. [To run self-tests, use: smartctl -t]
SMART Selective self-test log data structure revision number 1
SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS
1 0 0 Not_testing
2 0 0 Not_testing
3 0 0 Not_testing
4 0 0 Not_testing
5 0 0 Not_testing
Selective self-test flags (0x0):
After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.
更新:我可能在这次行动中第一次取得了有希望的突破。在过去的 6 个小时左右的时间里(断断续续)更换驱动器/机箱/电缆/卡并系统地尝试寻找一种模式后,我终于找到了一种模式。而且我可以始终如一地重现这种模式。
它不喜欢热插拔。
它说它确实如此。它声称如此。它尽一切努力来信守这一承诺。但这是谎言。我不会假装知道任何有关在此过程中发挥作用的低级硬件架构和/或内核架构的知识,但我至少可以从逻辑上确定一个可重现的模式。
我敢打赌,今年夏天我无意中引发了热插拔灾难,而且很可能造成结果造成了整个混乱。syslog
显示我看到的错误始于 6 月,就在发生重大故障之前,就在我去旧金山过暑假之前,无法处理它。
但是如果我在需要移动磁盘时重新启动,到目前为止我还没有看到错误。第 20 个磁盘已重新添加并以正确的速度重建(对于 2TB 磁盘,这仍然需要大约 36 小时),我正在观察(tail -f
)syslog
,到目前为止一直很安静。
我需要几天时间才能自信地报告此事。但到目前为止,情况看起来很有希望。这个问题的答案可能最终结果是“不要在 Linux 上使用 Rosewill RSV-S5 进行热插拔”,祈祷好运。
答案1
虽然我仍然不太了解硬件周围的低级架构或控制它的内核驱动程序,但看起来这种情况下“解决方案”是不热插拔驱动器。
因此,在 Linux 上使用 Rosewill RSV-S5(或任何同类产品,我想)时(可能也适用于其他系统,我不知道),切勿进行热插拔。如果syslog
显示PORT_RST
已执行,请重新启动以确保安全。
热插拔乍一看似乎可行。驱动器上没有安装 FS,只是一个裸分区,硬件已为其设置了驱动器导轨等,当您放入新驱动器时,系统会识别它并为其分配一个可以与之交互的设备。但syslog
为了安全起见,请留意。