Tot*_*tor 5 software-raid error-handling linux-kernel disk md
有2种情况:
由于驱动器访问通常通过 Linux SCSI 层,我认为超时情况完全由该层处理。根据此文档,它会在重置驱动器、总线、主机等后多次尝试该命令。如果这些都不起作用,SCSI 层将使设备脱机。在这一点上,我认为 md 层只是“发现”一个驱动器不见了,并将其标记为丢失(失败)。这样对吗?
某些驱动器可以配置为在达到特定超时后报告读取错误,从而中止内部恢复尝试。这称为ERC(或 TLER、CCTL)。磁盘超时通常配置为在操作系统超时(或硬件 RAID 控制器)之前触发,以便后者知道真正发生了什么,而不仅仅是“等待和中止”。
我的问题是:Linux(和 md)如何处理驱动器报告的读取错误?
它会再试一次,做一些聪明的事情,还是只是让驱动器脱机而不通过上面“内核超时”中描述的所有尝试?当这种事情发生时,md 甚至知道吗?
有些人认为ERC 在 Linux 上很危险,因为它不会给驱动器足够的时间来尝试恢复。他们还说 ZFS-raid 很好,因为如果发生读取错误,由于 RAID 冗余,它会计算丢失的不可读扇区数据,并将其覆盖回驱动器。然后后者应该停止尝试读取讨厌的扇区,自动将其标记为坏的(不再使用),并将其重新映射到一个良好的扇区。
md 也能做到这一点吗?
md(4) 手册页的 部分对此进行了详细描述RECOVERY。
[...] 读取错误将导致 md 尝试通过覆盖坏块来恢复。即它会从其他地方找到正确的数据,将其写入失败的块,然后尝试再次读回。如果写入或重新读取失败,md 将以与写入错误相同的方式处理错误,并使整个设备失败。
至于超时,虽然有报告称驱动器在待机状态下会被踢出,但我从未真正发生过这种情况。我有 7 个 HDD,它们通常会停止运转(因为主系统使用 SSD 运行,并且可以在很长一段时间没有 HDD 访问的情况下运行)并且它可以正常工作(除了唤醒md一个驱动器一个接一个地驱动器,而不是全部唤醒)一次)。
我想这取决于其他层向什么报告md。
| 归档时间: |
|
| 查看次数: |
3944 次 |
| 最近记录: |