因此,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。