Oracle Solaris ZFS 管理指南

确定 ZFS 存储池的运行状况

ZFS 提供了一种检查池和设备运行状况的集成方法。池的运行状况是根据其所有设备的状态确定的。使用 zpool status 命令可以显示此状态信息。此外,池和设备的潜在故障由 fmd 报告,显示在系统控制台上,并记录于 /var/adm/messages 文件中。

本节介绍如何确定池和设备的运行状况。本章不介绍如何修复运行不良的池或从其恢复。有关故障排除和数据恢复的更多信息,请参见第 11 章

每个设备都可以处于以下状态之一:

ONLINE

设备或虚拟设备处于正常工作状态。尽管仍然可能会出现一些瞬态错误,但是设备在其他方面处于正常工作状态。

DEGRADED

虚拟设备出现过故障,但仍能工作。此状态在镜像或 RAID-Z 设备缺少一个或多个组成设备时最为常见。池的容错能力可能会受到损害,因为另一个设备中的后续故障可能无法恢复。

FAULTED

设备或虚拟设备完全无法访问。此状态通常表示设备出现全面故障,以致于 ZFS 无法向该设备发送数据或从该设备接收数据。如果顶层虚拟设备处于此状态,则完全无法访问池。

OFFLINE

管理员已将设备显式脱机。

UNAVAIL

无法打开设备或虚拟设备。在某些情况下,包含 UNAVAIL 设备的池会以 DEGRADED 模式显示。如果顶层虚拟设备的状态为 UNAVAIL,则无法访问池中的任何设备。

REMOVED

系统正在运行时已物理移除了该设备。设备移除检测依赖于硬件,而且并非在所有平台上都受支持。

池的运行状况是根据其所有顶层虚拟设备的运行状况确定的。如果所有虚拟设备状态都为 ONLINE,则池的状态也为 ONLINE。如果任何一个虚拟设备状态为 DEGRADEDUNAVAIL,则池的状态也为 DEGRADED。如果顶层虚拟设备的状态为 FAULTEDOFFLINE,则池的状态也为 FAULTED。处于 FAULTED 状态的池完全无法访问。附加或修复必需的设备后,才能恢复数据。处于 DEGRADED 状态的池会继续运行,但是,如果池处于联机状态,则可能无法实现相同级别的数据冗余或数据吞吐量。

基本的存储池运行状况

使用 zpool status 命令可以快速查看池运行状态,如下所示:


# zpool status -x
all pools are healthy

通过在命令语法中指定池名称,可以检查特定池。如下节所述,应检查不处于 ONLINE 状态的所有池是否存在潜在的问题。

详细运行状况

使用 -v 选项可以请求更详细的运行状况摘要。例如:


# zpool status -v tank
  pool: tank
 state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
        the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: http://www.sun.com/msg/ZFS-8000-2Q
 scrub: scrub completed after 0h0m with 0 errors on Wed Jan 20 15:13:59 2010
config:

        NAME        STATE     READ WRITE CKSUM
        tank        DEGRADED     0     0     0
          mirror-0  DEGRADED     0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t1d0  UNAVAIL      0     0     0  cannot open

errors: No known data errors

此输出显示了池处于其当前状态的原因的完整说明,其中包括问题的易读说明,以及指向知识文章(用于了解更多信息)的链接。每篇知识文章都提供了有关从当前问题恢复的最佳方法的最新信息。使用详细的配置信息,您可以确定哪个设备已损坏以及如何修复池。

在以上示例中,故障设备应该被替换。替换该设备后,请使用 zpool online 命令使设备联机。例如:


# zpool online tank c1t0d0
Bringing device c1t0d0 online
# zpool status -x
all pools are healthy

如果启用了 autoreplace 属性,则您可能不必使被替换的设备联机。

如果池包含脱机设备,则命令输出将标识有问题的池。例如:


# zpool status -x
  pool: tank
 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'.
 scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 15:15:09 2010
config:

        NAME        STATE     READ WRITE CKSUM
        tank        DEGRADED     0     0     0
          mirror-0  DEGRADED     0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t1d0  OFFLINE      0     0     0  48K resilvered

errors: No known data errors

READWRITE 列提供了在设备上出现的 I/O 错误的计数,而 CKSUM 列则提供了在设备上出现的无法更正的校验和错误的计数。这两种错误计数指示可能的设备故障,并且需要执行更正操作。如果针对顶层虚拟设备报告了非零错误,则表明部分数据可能无法访问。

errors: 字段标识任何已知的数据错误。

在以上示例输出中,脱机设备不会导致数据错误。

有关诊断和修复故障池和数据的更多信息,请参见第 11 章