linux – 硬盘读取错误……停止?

前端之家收集整理的这篇文章主要介绍了linux – 硬盘读取错误……停止?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的故事很简单.我有一台轻型服务器,运行Arch Linux,它将大部分数据存储在由两个SATA驱动器组成的RAID-1上.它大约4个月没有任何问题.然后,我突然开始在其中一个驱动器上读取错误.总是,消息看起来很像这样:
Apr 18 00:20:15 hope kernel: [307085.582035] ata5.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Apr 18 00:20:15 hope kernel: [307085.582040] ata5.01: Failed command: READ DMA EXT
Apr 18 00:20:15 hope kernel: [307085.582048] ata5.01: cmd 25/00:08:08:6a:34/00:00:27:00:00/f0 tag 0 dma 4096 in
Apr 18 00:20:15 hope kernel: [307085.582050]          res 51/40:00:0c:6a:34/40:00:27:00:00/f0 Emask 0x9 (media error)
Apr 18 00:20:15 hope kernel: [307085.582053] ata5.01: status: { DRDY ERR }
Apr 18 00:20:15 hope kernel: [307085.582056] ata5.01: error: { UNC }
Apr 18 00:20:15 hope kernel: [307085.621301] ata5.00: configured for UDMA/133
Apr 18 00:20:15 hope kernel: [307085.640972] ata5.01: configured for UDMA/133
Apr 18 00:20:15 hope kernel: [307085.640986] sd 4:0:1:0: [sdd] Unhandled sense code
Apr 18 00:20:15 hope kernel: [307085.640989] sd 4:0:1:0: [sdd]  Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Apr 18 00:20:15 hope kernel: [307085.640993] sd 4:0:1:0: [sdd]  Sense Key : Medium Error [current] [descriptor]
Apr 18 00:20:15 hope kernel: [307085.640998] Descriptor sense data with sense descriptors (in hex):
Apr 18 00:20:15 hope kernel: [307085.641001]         72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00 
Apr 18 00:20:15 hope kernel: [307085.641010]         27 34 6a 0c 
Apr 18 00:20:15 hope kernel: [307085.641020] sd 4:0:1:0: [sdd]  Add. Sense: Unrecovered read error - auto reallocate Failed
Apr 18 00:20:15 hope kernel: [307085.641023] sd 4:0:1:0: [sdd] CDB: Read(10): 28 00 27 34 6a 08 00 00 08 00
Apr 18 00:20:15 hope kernel: [307085.641027] end_request: I/O error,dev sdd,sector 657746444
Apr 18 00:20:15 hope kernel: [307085.641035] ata5: EH complete
Apr 18 00:20:15 hope kernel: [307085.641672] md/raid1:md16: read error corrected (8 sectors at 657744392 on sdd1)
Apr 18 00:20:17 hope kernel: [307087.505082] md/raid1:md16: redirecting sector 657742336 to other mirror: sdd1

每个错误都抱怨不同的扇区号,并伴随着用户(我)访问磁盘几秒钟的延迟.

我检查了smartctl输出,并看到以下输出(不相关的部分被剪裁):

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_Failed RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   193   193   051    Pre-fail  Always       -       1606
  5 Reallocated_Sector_Ct   0x0033   194   194   140    Pre-fail  Always       -       0
196 Reallocated_Event_Count 0x0032   162   162   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       51

回顾日志,我发现错误实际上已经发生了几天,主要是在备份期间,但也经常在非常轻的使用期间(意味着大约每5次我试图保存一个文本文件).我得出结论,我的磁盘正在死亡,RAID-1正在适当地处理它,并且是时候订购替换磁盘了.我订购了一个新磁盘.

令我惊讶的是,一天后,错误……停止了.我没有做任何事来解决它们.我没有重新启动,没有将驱动器脱机,没有.但错误才刚刚停止.

此时,好奇地看到坏扇区现在是否只是在磁盘的空闲部分,我将磁盘从RAID中取出,将其放回RAID中,并允许它完成随后的完全重新同步. 9小时后重新同步完成没有任何错误(2TB磁盘需要一段时间).

此外,smartctl输出稍有变化,如下所示:

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_Failed RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   193   193   051    Pre-fail  Always       -       1606
  5 Reallocated_Sector_Ct   0x0033   194   194   140    Pre-fail  Always       -       43
196 Reallocated_Event_Count 0x0032   162   162   000    Old_age   Always       -       38
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0

所以,当然,这个部分让我感到高兴的是“从什么时候坏磁盘自我修复?”

我想这可能是驱动器的一小部分区域自然坏了,驱动器只需要3天(!)就可以在扇区重新分配代码开始之前将其映射到磁盘的坏区域…但我不能说我见过这种事.

有没有人见过这种行为?如果是这样,您之后对驱动器的体验是什么?它又发生了吗?磁盘最终完全失败了吗?或者它只是一个无法解释的故障仍然无法解释?

在我的情况下,我已经有了替换驱动器(在保修期内获得),所以我可能只是更换驱动器.但我很想知道我是否以某种方式误诊了这一点.如果有帮助,我会在问题发生时提供完整的’smartctl -a’输出.它只是有点长,所以我没有在这里发布.

解决方法

如果驱动器表面的某个特定物理区域变坏,那么直到可以成功映射这些扇区,当您尝试读取写入该区域的任何数据时,您将获得未恢复的读取错误.驱动器知道扇区是坏的(在访问扇区失败之后)但由于它们已经保存数据而无法重新映射扇区.如果格式化驱动器或覆盖“坏”扇区,则驱动器将有机会映射坏扇区.

一旦坏扇区被绘制出来,并且只要更多的驱动器表面没有失效,你就会处于良好的状态.

我不太了解当前驱动器的驱动器故障模型,以了解介质表面的一部分变坏与问题传播或再次发生之间是否有很多相关性.如果没有相关性,那么一旦坏扇区被映射出来,你就会处于良好的状态.如果存在相关性,那么这是驱动器结束的开始.

猜你在找的Linux相关文章