外部连接的 ZFS 池挂起,驱动器上没有错误迹象

J C*_*ins 6 sata zfs enclosures

我在 SATA 多路复用器的外部机箱中有一组 5 个 1TB WD Red 驱动器。这被输入到带有 SATA 多路复用器控制器的台式机中。

经过大约一年的服务(这已经发生了两次),阵列将开始自行重置,如本视频所示。没有任何特定驱动器出现故障的迹象,只是机箱关闭并且阵列中的所有驱动器断开连接。

我有两个这样的机箱,当我将它们从一个移动到另一个时,错误总是与冗余阵列有关。多年来,机箱和接口卡一直保持不变,但安装的新驱动器又解决了一年的问题。

可能有很多事情,从嘈杂的电源缓慢杀死驱动电源电路到 ZFS 的糟糕操作系统实现,但很难知道从哪里开始。什么策略可以让我找出问题的实际所在?

  • 操作系统:CentOS 7.0,内核:3.10.0

  • 外壳:SiI 3726 多路复用器

  • 接口卡:SiI 3132解复用器

  • 硬盘:WD10EFRX

留言:

发生复位时:

[ttt.tttt] ata4.03: exception Emask 0x100 SAct 0x0 SErr 0x0 action 0x6 frozen
[ttt.tttt] ata4.03: failed command: WRITE DMA EXT
[ttt.tttt] ata4.03: cmd 35/00:.. ...:00/e0 tag 3 dma 144688 out
[ttt.tttt] ata4.03: status: { Busy }
[ttt.tttt] ata4.03: error: { ICRC UNC AMNF IDNF ABRT }
Run Code Online (Sandbox Code Playgroud)

一旦 zpool 完全停止:

[ttt.tttt] INFO: task txg_sync:xxxxx blocked for more than 120 seconds
[ttt.tttt] INFO: task zpool:xxxxx blocked for more than 120 seconds
Run Code Online (Sandbox Code Playgroud)

一旦第二次发生以响应终端命令,例如

$ zpool status
Run Code Online (Sandbox Code Playgroud)

该系统基本上没有用,需要完全重新启动。

最新视频所示,该问题与驱动器电压下降无关。我认为这是一个关键信息,盒子本身正在重置,所有灯,甚至它自己的电源灯都在重置。

发送到 dmesg 的消息非常庞大,太长而无法附加。

输出badblocks

$ badblocks -vn /dev/sdp1
irq_stat 0x00060002, device error via SDB FIS
SError: { Handshk }
failed command: WRITE FPDMA QUEUED
cmd 61/...
res 41/... ...Emask 0x410 (ATA bus error) <F>
status: { DRDY ERR }
error: { ICRC ABRT }
Run Code Online (Sandbox Code Playgroud)

对于阵列中的所有 5 个驱动器,这种情况同样发生。这就像盒子变得超载并重新设置自己。

更新:06/12/2017

所有驱动器都移至 USB3 互连而非 eSATA 上的第二个机箱。

  • 外壳:冰盒 IB-3810U3
    • 多路复用器芯片:ASMedia ASM1074L
  • 服务器主板USB3主机:技嘉GA-B85-HD3 SKT 1150

将所有驱动器移至新机箱后,badblocks命令在每个驱动器上运行,没有出现任何错误。然后导入池并运行清理。未发现任何错误,擦洗成功完成。然而今天,所有 5 个驱动器都列出了一条消息(无法判断它们是否是这个池/槽/阵列的驱动器):

WARNING: Your hard drive is failing
Device: /dev/sdk [SAT], unable to open device
WARNING: Your hard drive is failing
Device: /dev/sdl [SAT], unable to open device
WARNING: Your hard drive is failing
Device: /dev/sdm [SAT], unable to open device
WARNING: Your hard drive is failing
Device: /dev/sdn [SAT], unable to open device
WARNING: Your hard drive is failing
Device: /dev/sdo [SAT], unable to open device
Run Code Online (Sandbox Code Playgroud)

在此之后,试图列出驱动器的内容,它锁定了终端。一个新终端锁定在任何zpool命令上。top列表txg_sync和一堆z_rd_int_x都有一定 CPU 使用率的进程。另外两个池正在通过 SAMBA 成功地提供文件,一个在zpool status挂起时继续重新同步(仅由高清灯证明)。

smartctl 数据:12/12/2017

作为每评注,以下是smartctl用于数据UDMA_CRC_Error_Count

对于当前失败的数组的第二次迭代:

4193, 4030, 3939, 2869, 3977
Run Code Online (Sandbox Code Playgroud)

对于原始阵列(已换出驱动器 3):

3003, 3666,    0, 4536, 5309
Run Code Online (Sandbox Code Playgroud)

对于同一机箱和连接中的 RAID0 条带

 523,  504,  526,  553,  476
Run Code Online (Sandbox Code Playgroud)

对于主机内部托管的带有热备件的 ZFS 镜像:

   0,    0,    0
Run Code Online (Sandbox Code Playgroud)

在 Seagate Archive 驱动器上,似乎是胡说八道。:

Temperature_Celsius   UDMA_CRC_Error_Count   Head_Flying_Hours
   40  (0 16 0 0 0)                      0      57501022168585
Run Code Online (Sandbox Code Playgroud)

这可能只是表明 eSATA 和 USB 3.0 本质上是嘈杂的,数据损坏是不可避免的。

Ger*_*erg 2

SMART 统计数据表明硬盘驱动器在其链接上发现了 CRC 错误。(要验证这不是以前已解决的问题,您应该监控UDMA_CRC_Error_Count一段时间内的值 - 它是磁盘生命周期内的错误总数)

我以前见过这种情况,涉及到坏的 SATA 电缆。更换电缆已经解决了问题(计数器仍然有其值,但值保持不变)。但这是一个相当复杂的设置,问题可能出在电缆、复用器/解复用器或外壳中的某处。

  • eSATA 电缆可能是更可能出现的问题 - 它是所有驱动器所共有的。Demux 似乎不是 SiI 3132 的正确术语 - 它似乎是一个普通的 SATA 接口 IC。(在同一 SATA 电缆上连接单个驱动器(包含不重要的数据),并 `dd if=/dev/disk of=/dev/null` 和 `dd if=/dev/zero of=/dev/disk # 这将擦除不过,生成大量活动来检查计数器增加是一种测试方法) (2认同)