硬件 RAID1 配置 - 一个物理磁盘上可能有故障扇区。操作系统是否会自动从另一个磁盘读取?

硬件 RAID1 配置 - 一个物理磁盘上可能有故障扇区。操作系统是否会自动从另一个磁盘读取?

我不是专业的系统管理员,但由于我研究了一段时间后仍找不到针对我的具体案例的答案,所以我希望在这里能得到一些帮助。我们的服务器使用 P222 - RAID1 配置中的 HP 智能控制器阵列。我相信其中一个物理硬盘上的某些扇区已发生故障。我使用了该hpacucli工具,输出如下所示:-

 $ hpacucli ctrl all show config 

 Smart Array P222 in Slot 1                (sn: PDSXH0ARH5I0SW)

 array A (SATA, Unused Space: 0  MB)


  logicaldrive 1 (2.7 TB, RAID 1, Ready for Rebuild)

  physicaldrive 2I:1:1 (port 2I:box 1:bay 1, SATA, 3 TB, OK)
  physicaldrive 2I:1:2 (port 2I:box 1:bay 2, SATA, 3 TB, Predictive Failure)

我又运行了几次相同的工具来检查状态,有一次我注意到“预测失败”被“重建 1%”取代,后来增加到 2%。我不认为我做了任何启动重建的事情。无论如何,我让它运行并在一段时间后检查了状态,此时它又回到了“预测失败”。

运行 smartctl 长测试和短测试时 - 自检日志报告:-

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       90%     14368         334201968
# 2  Short offline       Completed: read failure       90%     14367         625082211

我们正在此服务器上运行 MySQL 实例,但它始终无法启动,并抱怨读取错误,这表明可能是由于硬盘故障/坏扇区导致的,因此使用了上述工具。我有几个问题:-

  1. 我不太确定,但看起来其中一个硬盘部分出现故障。在这种情况下,操作系统(Ubuntu 12.04)不应该只从镜像硬盘读取数据吗?(这意味着 MySQL 应该继续运行)
  2. 我按照步骤进行操作http://sg.danny.cz/scsi/badblockhowto.html。LBA 334201968(长测试读取失败的 LBA)对应于 MySQL 的数据文件。但我不想覆盖此文件的任何部分,因为我不确定 MySQL 是否会永久地将该文件视为已损坏。修复磁盘损坏部分的最佳选择是什么?

很高兴报告诊断/修复此问题可能需要的任何其他详细信息

编辑 1:根据要求,MySQL 错误日志如下:-

150824 10:27:00 InnoDB: Completed initialization of buffer pool
150824 10:27:00 InnoDB: highest supported file format is Barracuda.
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
150824 10:27:00  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
150824 10:27:00  InnoDB: Waiting for the background threads to start
150824 10:27:01 InnoDB: 5.5.35 started; log sequence number 2723867081864
150824 10:27:01 [Note] Server hostname (bind-address): <ip and port here>;
150824 10:27:01 [Note]   - <ip here> resolves to <ip here>;
150824 10:27:01 [Note] Server socket created on IP: <ip here>.
InnoDB: Error: tried to read 16384 bytes at offset 70 1898921984.
InnoDB: Was only able to read -1.
150824 10:27:01  InnoDB: Operating system error number 5 in a file operation.
InnoDB: Error number 5 means 'Input/output error'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/operating-system-error-codes.html
InnoDB: File operation call: 'read'.
InnoDB: Cannot continue operation.

编辑2:根据评论https://serverfault.com/a/716471/306555,我开具了更换磁盘的票据,并更换了磁盘并重建了 RAID。hpacucli 的输出如下:-

  physicaldrive 2I:1:1 (port 2I:box 1:bay 1, SATA, 3 TB, OK)
  physicaldrive 2I:1:2 (port 2I:box 1:bay 2, SATA, 3 TB, OK)

因此预测性故障消失了。但是,MySQL 一直给我读错误,所以我再次运行了 smartctl 长测试和短测试。虽然短测试通过了,但长测试失败并出现读错误:-

Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       90%     14393         625116232
# 2  Short offline       Completed without error       00%     14392         -

我还检查了系统日志,发现每次 MySQL 尝试启动时,系统日志中都会出现此错误

Aug 25 14:23:41 kernel: [ 1603.911185] sd 6:0:0:1: [sda] Unhandled sense code
Aug 25 14:23:41 kernel: [ 1603.911186] sd 6:0:0:1: [sda]  Result: hostbyte=invalid driverbyte=DRIVER_SENSE
Aug 25 14:23:41 kernel: [ 1603.911188] sd 6:0:0:1: [sda]  Sense Key : Medium Error [current] 
Aug 25 14:23:41 kernel: [ 1603.911190] sd 6:0:0:1: [sda]  Add. Sense: Unrecovered read error
Aug 25 14:23:41 kernel: [ 1603.911192] sd 6:0:0:1: [sda] CDB: Read(10): 28 00 46 a2 d5 a0 00 00 08 00

这表明什么?(看起来像是磁盘上的一个坏扇区?)如果是这种情况,有什么办法可以解决吗?

答案1

好的。这是一个很长的问题,但我会简短地回答:

如果看到“预测失败”或“失败”,请更换磁盘。

这两个条件对于建立支持凭单和/或 HP 保修部件更换均有效。

“故障预测”结合了 SMART 数据和其他启发式方法来确定驱动器的健康状况。但具体细节并不重要。计划更换驱动器。

您在应用程序级别看到影响这一事实是另一个迹象,表明正确的做法是更换磁盘。这很容易做到……即使它是 SATA 驱动器,也是 HP 部件,因此它有保修(可能是 1 年,但这与您的服务器的序列号相关)

致电惠普...

答案2

  1. 是的,如果 RAID 中的一个驱动器出现故障,RAID 控制器会将其标记为故障,并使用其他健康的硬盘进行读取。
  2. 预测性故障意味着磁盘仍在工作,但控制器会通知您,磁盘很快就会发生故障。如果您在测试中收到读取错误,则应将驱动器更换为另一个驱动器。只需在当地商店/供应商支持处购买备用驱动器,安装它,RAID 控制器就会将阵列重建为健康状态。

答案3

您使用的是 HP 硬盘吗?还是普通消费级硬盘?硬盘是否具有时间限制错误恢复功能?

如果不是,驱动器可能会在尝试读取坏扇区时锁定控制器。驱动器需要很长时间才能放弃,因此读取失败。RAID 控制器没有机会尝试另一个驱动器,因为它被卡住了,等待第一个驱动器决定它是否发生故障。

这种行为还会导致驱动器暂时脱离团队,这可以解释重建的原因。

这仅适用于您使用非 HP 驱动器的情况 - 受支持的驱动器被编程为快速放弃并让 raid 控制器处理错误。

相关内容