所以 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 error给出了清除错误并运行清理的建议。现在我的问题是,运行擦洗的阈值是什么时候,这需要多长时间(假设这个 zfs RAID 运行擦洗会对性能造成影响)此外,当这个磁盘真的很糟糕时,热插拔是否会初始化一个“重建” ? 所有磁盘都是“Western Digital RE 4TB, SAS II, 32MB, 7200rpm, enterprise 24/7/365”。是否有系统可以检查 zfs 错误,因为这只是例行手动检查?
zfs 版本:0.6.4.1 zfsonlinux
我知道没有分配 2 个读取错误,但我更愿意早点更换磁盘到晚点。
在这种情况下,我会做 ZFS 告诉你做的事情。请进行擦洗。
我每周按计划清理我的系统。我还使用zfswatcher守护程序来监控 Linux ZFS 安装的运行状况。
您的 ZFS 阵列可能未调整,因此有一些值可以帮助提高清理性能,但此时,您应该只运行它。
对于另一个问题,您的热插拔可能不会像您期望的那样......请参阅下面的咆哮。
咆哮:
在硬件控制器后面拥有一堆 RAID-0 虚拟驱动器是个坏主意!
你有两全其美。可恢复性和错误检查是有限的。故障磁盘本质上是故障虚拟驱动器,存在热插拔影响。假设您删除了有问题的磁盘。您可能需要创建一个新的虚拟磁盘,或者最终可能会使用不同的驱动器枚举。
在某个时候,最好获得一个真正的 HBA 并将磁盘作为尝试直通设备(没有 RAID 元数据)运行,或者只是在受硬件阵列保护的 vdev 之上运行 ZFS。例如,在您的控制器上运行 RAID-6 并在顶部安装 ZFS。或者运行多个 RAID-X 组并让 ZFS 镜像或条带化生成的 vdev。
zfs scrub
是“将检查 zfs 错误的系统”。读取存储在卷中的所有数据将花费尽可能长的时间(按照 txg 的顺序进行,因此它可能会寻找很多,这取决于池的满载程度和数据的写入方式)。一旦开始,zfs status
将显示一些估计。可以停止运行擦洗。如果您想要定期检查
zpool status
,最简单的方法是zpool status | grep -C 100 Status
定期运行(每 6 小时一次)并通过电子邮件发送输出(如果有)。你可能会为你最喜欢的监控系统找到一个插件,比如 nagios。或者写自己会很简单。只是热交换驱动器不会触发重新同步。你将不得不为此而奔跑
zfs replace
。您看到的读取错误也可能是某种控制器故障。即使它是企业硬件,这些(HW RAID)控制器有时也会表现得很奇怪。例如,这些错误可能是命令执行时间过长的结果——控制器正忙于处理任何事情。这就是为什么我尽量远离那些除非必要。
我会检查驱动器上的 SMART 数据(请参阅
man smartctl
参考资料)并清理池。如果两者看起来都正常,请清除错误并且不要弄乱您的池。因为如果池在重新同步期间读取所有数据几乎已满,实际上可能会触发另一个错误。一旦您再次在同一驱动器上看到错误,就会开始恐慌;)。顺便提一句。为了获得最佳性能,您应该在 RAIDZ2 vdevs 中使用 n^2+2 个驱动器。