LSI raidcontroller 背后的 zfs 错误

LSI raidcontroller 背后的 zfs 错误

因此,ZFS 报告了一些“读取问题”,因此看起来该磁盘出现故障,因为西门子 ZFS-8000-9P我们已经知道发生了文档报告。这些磁盘相当新,我们最近遇到的唯一问题是 ZFS 已满。

ZFS 在LSI MegaRAID 9271-8i,所有磁盘都运行“raid 0”。我不太熟悉这个 raid 卡,所以我找到了一个返回来自 megacli 命令行工具的数据的脚本。我添加了 1 个驱动器来显示设置,它们的设置都相同。(系统磁盘不同)

zpool 状态输出

  pool: data
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-9P
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        data        ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            br0c2   ONLINE       0     0     0
            br1c2   ONLINE       0     0     0
            br2c2   ONLINE       0     0     0
            br0c3   ONLINE       0     0     0
            br1c3   ONLINE       0     0     0
            br2c3   ONLINE       0     0     0
            r2c1    ONLINE       0     0     0
            r1c2    ONLINE       0     0     0
            r5c3    ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0
            sdf     ONLINE       0     0     0
            sdg     ONLINE       0     0     0
            r3c1    ONLINE       0     0     0
            r4c1    ONLINE       2     0     0
... cut raidz2-1 ...
errors: No known data errors

LSI脚本的输出

Virtual Drive: 32 (Target Id: 32)
Name                :
RAID Level          : Primary-0, Secondary-0, RAID Level Qualifier-0
Size                : 3.637 TB
Sector Size         : 512
Is VD emulated      : No
Parity Size         : 0
State               : Optimal
Strip Size          : 512 KB
Number Of Drives    : 1
Span Depth          : 1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disk's Default
Encryption Type     : None
PI type: No PI

Is VD Cached: No

该脚本没有报告任何故障磁盘,raidcontroller 也没有将驱动器标记为故障。我找到了一些其他主题zpool 错误给出了清除错误并运行清理的建议。现在我的问题是,运行清理的阈值是什么时候,这需要多长时间(假设这个 zfs raid 会因运行清理而受到性能影响)此外,当这个磁盘真的有故障时,热插拔会初始化“重建”吗?所有磁盘都是“Western Digital RE 4TB,SAS II,32MB,7200rpm,企业 24/7/365”。是否有一个系统可以检查 zfs 错误,因为这只是例行手动检查?

zfs 版本:0.6.4.1 zfsonlinux

我知道 2 个读取错误不算多,但我宁愿尽早更换磁盘,而不是太晚。

答案1

zfs scrub是“检查 zfs 错误的系统”。它将花费与读取卷中存储的所有数据相同的时间(按 txg 的顺序进行,因此它可能会进行大量搜索,具体取决于池的满载程度以及数据的写入方式)。一旦启动,zfs status将显示一些估计值。可以停止正在运行的 scrub。

如果您想要定期检查某些内容zpool status,最简单的方法是zpool status | grep -C 100 Status定期(每 6 小时一次)运行某些操作,并通过电子邮件发送输出(如果有)。您可能会找到您最喜欢的监控系统(如 nagios)的插件。或者自己编写也很简单。

仅热插拔驱动器不会触发重新同步。您必须运行zfs replace才能实现这一点。

您看到的读取错误也可能是某种控制器故障。即使它是企业硬件,这些(HW RAID)控制器有时也会表现异常。这些错误可能是由于命令耗时过长(控制器忙于处理其他事情)造成的。这就是为什么除非必要,我尽量远离这些错误。

我会检查驱动器上的 SMART 数据(参见man smartctl)并清理池。如果两者看起来都正常,请清除错误,不要弄乱您的池。因为如果池接近满,则在重新同步期间读取所有数据实际上可能会触发另一个错误。一旦您再次在同一驱动器上看到错误,就会开始恐慌 ;)。

顺便说一句,为了获得最佳性能,您应该在 RAIDZ2 vdevs 中使用 n^2+2 驱动器。

答案2

在这种情况下,我会按照 ZFS 的要求去做。请运行清理。

我每周都会定期清理系统。我还使用观察者守护进程监视 Linux ZFS 安装的健康状况。

您的 ZFS 阵列可能未调整,因此有一些值可以帮助提高清理性能,但此时您应该运行它。

对于另一个问题,您的热插拔可能不会达到您预期的效果...请参阅下面的评论。


咆哮:

在硬件控制器后面拥有一堆 RAID-0 虚拟驱动器是一个坏主意!

您会遇到两种情况,但效果都不太好。可恢复性和错误检查能力有限。故障磁盘本质上是故障的虚拟驱动器,并且会产生热插拔影响。假设您移除了有问题的磁盘。您可能需要创建一个新的虚拟磁盘,否则可能会得到不同的驱动器枚举。

在某个时候,最好获得真正的 HBA 并将磁盘作为尝试直通设备(没有 RAID 元数据)运行,或者只需在受硬件阵列保护的 vdev 上运行 ZFS。例如,在控制器上运行 RAID-6 并在其上安装 ZFS。或者运行多个 RAID-X 组并让 ZFS 镜像或条带化生成的 vdev。

相关内容