尝试缩小磁盘错误范围

尝试缩小磁盘错误范围

我遇到了一些硬盘驱动器的奇怪错误,我无法缩小问题范围。它是 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 -fsyslog,到目前为止一直很安静。

我需要几天时间才能自信地报告此事。但到目前为止,情况看起来很有希望。这个问题的答案可能最终结果是“不要在 Linux 上使用 Rosewill RSV-S5 进行热插拔”,祈祷好运。

答案1

虽然我仍然不太了解硬件周围的低级架构或控制它的内核驱动程序,但看起来这种情况下“解决方案”是不热插拔驱动器。

因此,在 Linux 上使用 Rosewill RSV-S5(或任何同类产品,我想)时(可能也适用于其他系统,我不知道),切勿进行热插拔。如果syslog显示PORT_RST已执行,请重新启动以确保安全。

热插拔乍一看似乎可行。驱动器上没有安装 FS,只是一个裸分区,硬件已为其设置了驱动器导轨等,当您放入新驱动器时,系统会识别它并为其分配一个可以与之交互的设备。但syslog为了安全起见,请留意。

相关内容