ZFS 提供了一种检查池和设备运行状况的集成方法。池的运行状况是根据其所有设备的状态确定的。使用 zpool status 命令可以显示此状态信息。此外,池和设备的潜在故障由 fmd 报告,显示在系统控制台上,并记录于 /var/adm/messages 文件中。
本节介绍如何确定池和设备的运行状况。本章不介绍如何修复运行不良的池或从其恢复。有关故障排除和数据恢复的更多信息,请参见Chapter 10, Oracle Solaris ZFS 故障排除和池恢复。
池的运行状况通过以下四种状态之一来描述:
池有一个或多个设备发生故障,但由于使用了冗余配置,数据仍然可用。
池中的所有设备都正常运行。
池正在等待恢复设备连接。在设备问题得到解决之前,SUSPENDED 池一直处于 wait 状态。
池的元数据遭到损坏,或者有一个或多个设备不可用,并且没有足够的副本支持其继续运行。
每个池设备都可以处于以下状态之一:
虚拟设备出现过故障,但仍能工作。此状态在镜像或 RAID-Z 设备缺少一个或多个组成设备时最为常见。池的容错能力可能会受到损害,因为另一个设备中的后续故障可能无法恢复。
管理员已将设备显式脱机。
设备或虚拟设备处于正常工作状态。尽管仍然可能会出现一些瞬态错误,但是设备在其他方面处于正常工作状态。
系统正在运行时已物理移除了该设备。设备移除检测依赖于硬件,而且并非在所有平台上都受支持。
无法打开设备或虚拟设备。在某些情况下,包含 UNAVAIL 设备的池会以 DEGRADED 模式显示。如果顶层虚拟设备的状态为 UNAVAIL,则无法访问池中的任何设备。
池的运行状况是根据其所有顶层虚拟设备的运行状况确定的。如果所有虚拟设备状态都为 ONLINE,则池的状态也为 ONLINE。如果任何一个虚拟设备状态为 DEGRADED 或 UNAVAIL,则池的状态也为 DEGRADED。如果顶层虚拟设备的状态为 UNAVAIL 或 OFFLINE,则池的状态也为 UNAVAIL 或 SUSPENDED。如果池处于 UNAVAIL 或 SUSPENDED 状态,则完全无法访问该池。附加或修复必需的设备后,才能恢复数据。处于 DEGRADED 状态的池会继续运行,但是,如果池处于联机状态,则可能无法实现相同级别的数据冗余或数据吞吐量。
zpool status 命令还提供有关重新同步和清理操作的详细信息。
重新同步进度报告。例如:
scan: resilver in progress since Wed Jun 20 14:19:38 2012 7.43G scanned 7.43G resilvered at 26.8M/s, 10.35% done, 0h30m to go
清理进度报告。例如:
scan: scrub in progress since Wed Jun 20 14:56:52 2012 529M scanned out of 71.8G at 48.1M/s, 0h25m to go 0 repaired, 0.72% done
重新同步完成消息。例如:
scan: resilvered 71.8G in 0h14m with 0 errors on Wed Jun 20 14:33:42 2012
清理完成消息。例如:
scan: scrub repaired 0 in 0h11m with 0 errors on Wed Jun 20 15:08:23 2012
取消正在进行的清理消息。例如:
scan: scrub canceled on Wed Jun 20 16:04:40 2012
清理和重新同步完成消息在系统重新引导后仍存在
使用 zpool status 命令可以快速查看池运行状态,如下所示:
# zpool status -x all pools are healthy
通过在命令语法中指定池名称,可以检查特定池。如下节所述,应检查不处于 ONLINE 状态的所有池是否存在潜在的问题。
使用 –v 选项可以请求更详细的运行状况汇总信息。例如:
# zpool status -v pond pool: pond state: DEGRADED status: One or more devices are unavailable in response to persistent errors. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Determine if the device needs to be replaced, and clear the errors using 'zpool clear' or 'fmadm repaired', or replace the device with 'zpool replace'. scan: scrub repaired 0 in 0h0m with 0 errors on Wed Jun 20 15:38:08 2012 config: NAME STATE READ WRITE CKSUM pond DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 c0t5000C500335F95E3d0 ONLINE 0 0 0 c0t5000C500335F907Fd0 UNAVAIL 0 0 0 mirror-1 ONLINE 0 0 0 c0t5000C500335BD117d0 ONLINE 0 0 0 c0t5000C500335DC60Fd0 ONLINE 0 0 0 device details: c0t5000C500335F907Fd0 UNAVAIL cannot open status: ZFS detected errors on this device. The device was missing. see: http://support.oracle.com/msg/ZFS-8000-LR for recovery errors: No known data errors
此输出显示了池处于其当前状态的原因的完整说明,其中包括问题的易读说明,以及指向知识文章的链接(用于了解更多信息)。每篇知识文章都提供了有关从当前问题恢复的最佳方法的最新信息。使用详细的配置信息,您可以确定哪个设备损坏以及如何修复池。
在以上示例中,UNAVAIL 设备应该被替换。如有必要,替换该设备后,请使用 zpool online 命令使设备联机。例如:
# zpool online pond c0t5000C500335F907Fd0 warning: device 'c0t5000C500335DC60Fd0' onlined, but remains in degraded state # zpool status -x all pools are healthy
以上输出表明该设备一直处于降级状态,直到完成任何重新同步操作为止。
如果启用了 autoreplace 属性,则您可能不必使被替换的设备联机。
如果池包含脱机设备,则命令输出将标识有问题的池。例如:
# zpool status -x pool: pond state: DEGRADED status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. config: NAME STATE READ WRITE CKSUM pond DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 c0t5000C500335F95E3d0 ONLINE 0 0 0 c0t5000C500335F907Fd0 OFFLINE 0 0 0 mirror-1 ONLINE 0 0 0 c0t5000C500335BD117d0 ONLINE 0 0 0 c0t5000C500335DC60Fd0 ONLINE 0 0 0 errors: No known data errors
READ 和 WRITE 列提供了在设备上出现的 I/O 错误的计数,而 CKSUM 列则提供了在设备上出现的无法更正的校验和错误的计数。这两种错误计数指示可能的设备故障,并且需要执行更正操作。如果针对顶层虚拟设备报告了非零错误,则表明部分数据可能无法访问。
errors: 字段标识任何已知的数据错误。
在以上示例输出中,脱机设备不会导致数据错误。
有关诊断和修复 UNAVAIL 池和数据的更多信息,请参见Chapter 10, Oracle Solaris ZFS 故障排除和池恢复。
可以使用 zpool status 的时间间隔和计数选项收集一定时期内的统计信息。此外,使用 –T 选项可以显示时间戳。例如:
# zpool status -T d 3 2 Wed Jun 20 16:10:09 MDT 2012 pool: pond state: ONLINE scan: resilvered 9.50K in 0h0m with 0 errors on Wed Jun 20 16:07:34 2012 config: NAME STATE READ WRITE CKSUM pond ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t5000C500335F95E3d0 ONLINE 0 0 0 c0t5000C500335F907Fd0 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 c0t5000C500335BD117d0 ONLINE 0 0 0 c0t5000C500335DC60Fd0 ONLINE 0 0 0 errors: No known data errors pool: rpool state: ONLINE scan: scrub repaired 0 in 0h11m with 0 errors on Wed Jun 20 15:08:23 2012 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t5000C500335BA8C3d0s0 ONLINE 0 0 0 c0t5000C500335FC3E7d0s0 ONLINE 0 0 0 errors: No known data errors Wed Jun 20 16:10:12 MDT 2012 pool: pond state: ONLINE scan: resilvered 9.50K in 0h0m with 0 errors on Wed Jun 20 16:07:34 2012 config: NAME STATE READ WRITE CKSUM pond ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t5000C500335F95E3d0 ONLINE 0 0 0 c0t5000C500335F907Fd0 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 c0t5000C500335BD117d0 ONLINE 0 0 0 c0t5000C500335DC60Fd0 ONLINE 0 0 0 errors: No known data errors pool: rpool state: ONLINE scan: scrub repaired 0 in 0h11m with 0 errors on Wed Jun 20 15:08:23 2012 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t5000C500335BA8C3d0s0 ONLINE 0 0 0 c0t5000C500335FC3E7d0s0 ONLINE 0 0 0 errors: No known data errors