ZFS排错和池恢复(part 1)

识别ZFS问题

作为文件系统和卷管理器的组合,ZFS可能会出现许多不同的故障。可能遇到以下类型的问题: 请注意,单个池可能会遇到所有三个错误,因此完整的修复过程包括查找和更正一个错误,继续执行下一个错误,等等。
top

解决一般硬件问题

查看以下部分以确定池问题或文件系统不可用是否与硬件问题有关,如主板、内存、设备、HBA故障或配置错误。

例如,繁忙的ZFS池中出现故障或故障的磁盘会大大降低系统的整体性能。

首先诊断和识别硬件问题,会更容易检测并检查所有硬件。
然后可以继续诊断池和文件系统问题,如本章其余部分所述。
如果您的硬件、池和文件系统配置是健康的,请考虑诊断应用程序问题,这些问题通常更为复杂,因此在本指南中没有涉及。

识别硬件和设备故障

Oracle Solaris Fault Manager通过识别错误日志中指示特定症状的错误遥测信息,跟踪软件、硬件和特定设备问题,然后在错误症状导致实际故障时报告实际故障诊断。

以下命令可识别任何软件或硬件相关故障:
$ fmadm faulty
定期使用上述命令来识别故障服务或设备。

定期使用以下命令来识别硬件或设备相关错误:
$ fmdump -eV | more
需要留意此日志文件中描述vdev.open_failedchecksumio_failure问题的错误信息,否则他们可能会演变成实际故障,并使用fmadm命令显示。
如果上面情况表明某个设备出现故障,那么现在是替换设备的好时机。
还可以使用iostat命令跟踪其他设备错误。使用以下语法标识错误统计信息的摘要:
$ iostat -en
---- errors ---
s/w h/w trn tot device
0   0   0   0 c0t5000C500335F95E3d0
0   0   0   0 c0t5000C500335FC3E7d0
0   0   0   0 c0t5000C500335BA8C3d0
0  12   0  12 c2t0d0
0   0   0   0 c0t5000C500335E106Bd0
0   0   0   0 c0t50015179594B6F11d0
0   0   0   0 c0t5000C500335DC60Fd0
0   0   0   0 c0t5000C500335F907Fd0
0   0   0   0 c0t5000C500335BD117d0		
上面的输出中,内部磁盘c2t0d0上报告了错误。

解决持久性或暂时性传输错误

涉及重试或重置的持续SCSI传输错误可能由固件版本降低、磁盘损坏、电缆损坏或硬件连接故障引起。
某些瞬时传输错误可以通过升级HBA或设备固件来解决。
如果在固件更新后传输错误仍然存在,并且所有设备都被视为可运行,则检查硬件组件之间是否存在电缆损坏或其他故障连接。

ZFS错误消息的系统报告

除了持续跟踪池内的错误外,ZFS还在发生感兴趣的事件时显示系统日志消息。以下场景生成通知事件: 如果ZFS检测到设备错误并自动恢复,则不会发出通知。此类错误不构成池冗余或数据完整性方面的故障。
此外,此类错误通常是驱动程序问题及其自身的一组错误消息的结果。
top

识别ZFS存储池的问题

可以使用以下功能识别ZFS配置错误: 大多数ZFS排除都涉及到zpool status命令。
此命令分析系统中的各种故障并确定最严重的问题,提供建议的操作和指向知识文章的链接以便获取更多信息。
该命令仅识别池中的单个问题,尽管可能存在多个问题。
例如数据损坏错误通常意味着其中一个设备出现故障,但更换故障设备可能无法解决所有数据损坏问题。

此外,ZFS诊断引擎诊断并报告池故障和设备故障。还报告与这些故障相关的校验和、I/O、设备和池错误。
fmd报告的ZFS故障显示在控制台以及系统消息文件上。在大多数情况下,fmd消息会指向zpool status命令,以获取进一步的恢复说明。

以下是最基本的恢复操作:

确定ZFS存储池中是否存在问题

最简单的方法是使用zpool status -x命令。此命令仅描述出现问题的池,如果系统上没有不健康的池,将显示以下信息:
$ zpool status -x
all pools are healthy
如果不使用-x标记,此命令会显示所有池(如果指定池的话仅显示指定池的)的完全状态信息,不论池是否健康。 top

查看ZFS存储池状态信息

使用zpool status命令可以查看ZFS存储池的状态信息。例如:
$ zpool status 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'.
Run 'zpool status -v' to see device specific details.
scan: scrub repaired 0 in 0h0m with 0 errors on Wed Jun 20 13:16:09 2012
config:

NAME                   STATE     READ WRITE CKSUM
pond                   DEGRADED     0     0     0
mirror-0               ONLINE       0     0     0
c0t5000C500335F95E3d0  ONLINE       0     0     0
c0t5000C500335F907Fd0  ONLINE       0     0     0
mirror-1               DEGRADED     0     0     0
c0t5000C500335BD117d0  ONLINE       0     0     0
c0t5000C500335DC60Fd0  UNAVAIL      0     0     0

errors: No known data errors		
top
总体池状态信息
zpool status命令输出的结果包括以下段,有一些只有在池出现问题时才会出现: top
ZFS存储池配置信息
zpool status输出中config节描述池中设备的配置,以及它们的状态和设备生成的任何错误。
STATE列为池的状态,可以是以下状态之一:ONLINE|FAULTED|DEGRADED|SUSPENDED
如果状态不是ONLINE,则标识池的容错性已经受损。

其他列代表以下内容: 这些错误可以用来确定损坏是否为永久性的。
少量的I/O错误可能表示临时中断,而大量错误可能表示设备存在永久性问题。
这些错误不一定与应用程序解释的数据损坏相对应。如果设备处于冗余配置中,则设备可能会显示无法纠正的错误,而镜像或RAID-Z设备级别不会显示错误。
这种情况下,ZFS成功检索到良好的数据,并尝试修复现有副本中损坏的数据。

最后,附加的辅助信息显示在zpool status输出的最后一行中。此信息在state节上展开,有助于故障诊断。
如果设备不可用,此节指示设备是否不可访问或设备上的数据是否损坏。
如果设备正在调整大小,则此节显示当前正在调整大小。

top
ZFS存储池清理状态
zpool status输出结果的scrub节描述了任何擦洗操作的当前状态。
这个信息与系统上是否检测到任何错误不同,尽管此信息可用于确定数据损坏错误报告的准确性。
如果上一次清理最近结束,很可能发现了一些已知的数据损坏。
提供以下zpool status擦洗状态消息: 擦洗完成消息不会因系统重启而消失。

top
ZFS数据损坏错误
zpool status命令还会显示是否找到已知错误。
这些错误可能是在数据清理或正常操作期间发现的。ZFS维护与池关联的所有数据错误的持久日志。每当系统的完整清理完成时,此日志将旋转。
数据损坏错误总是致命的。它们的存在表明,由于池中的数据损坏,至少有一个应用程序遇到I/O错误。
冗余池中的设备错误不会导致数据损坏,并且不会记录到此日志中。
默认情况下,只显示找到的错误数。使用zpool status -v选项可以找到错误及其详细信息的完整列表。
例如:
$ zpool status -v system1
pool: system1
state: ONLINE
status: One or more devices has experienced an error resulting in data
corruption.  Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: http://support.oracle.com/msg/ZFS-8000-8A
scan: scrub repaired 0 in 0h0m with 2 errors on Fri Jun 29 16:58:58 2012
config:

NAME           STATE     READ WRITE CKSUM
system1        ONLINE       2     0     0
   c8t0d0      ONLINE       0     0     0
   c8t1d0      ONLINE       2     0     0

errors: Permanent errors have been detected in the following files:

/system1/file.1		
fmd在系统控制台和/var/adm/messages文件上也会显示类似的消息。也可以使用fmdump命令跟踪这些消息。

top

解决ZFS存储设备问题

解决丢失或删除的设备

以下部分介绍如何解决丢失、移除或出现故障的设备。 如果一个设备不能打开,它会在zpool status命令的输出结果中显示为UNAVAIL状态。
这个状态表明首次访问池时ZFS无法打开该设备,或者该设备已经不可用。
如果设备导致顶级虚拟设备不可用,则池中的任何内容都无法访问。否则,池的容错性可能会受到影响。
在这两种情况下,只需将设备重新连接到系统即可恢复正常操作。
如果需要更换因故障而不可用的设备,请参阅更换ZFS存储池中的设备

如果根池或镜像根池中设备状态为UNAVAIL,参阅以下: 例如,在设备发生故障后,可能会从fmd中看到类似以下内容的消息:
SUNW-MSG-ID: ZFS-8000-QJ, TYPE: Fault, VER: 1, SEVERITY: Minor
EVENT-TIME: Wed Jun 20 13:09:55 MDT 2012
...
SOURCE: zfs-diagnosis, REV: 1.0
EVENT-ID: e13312e0-be0a-439b-d7d3-cddaefe717b0
DESC: Outstanding dtls on ZFS device 'id1,sd@n5000c500335dc60f/a' in pool 'pond'.
AUTO-RESPONSE: No automated response will occur.
IMPACT: None at this time.
REC-ACTION: Use 'fmadm faulty' to provide a more detailed view of this event.
Run 'zpool status -lx' for more information. Please refer to the associated
reference document at http://support.oracle.com/msg/ZFS-8000-QJ for the latest
service procedures and policies regarding this diagnosis.			
要查看有关设备问题和解决方案的更多详细信息,请使用zpool status –v命令。例如:
$ zpool status -v
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 13:16:09 2012
config:

NAME                   STATE     READ WRITE CKSUM
pond                   DEGRADED     0     0     0
mirror-0               ONLINE       0     0     0
c0t5000C500335F95E3d0  ONLINE       0     0     0
c0t5000C500335F907Fd0  ONLINE       0     0     0
mirror-1               DEGRADED     0     0     0
c0t5000C500335BD117d0  ONLINE       0     0     0
c0t5000C500335DC60Fd0  UNAVAIL      0     0     0

device details:

c0t5000C500335DC60Fd0    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			
从以上输出中可以看出,设备c0t5000C500335DC60Fd0不工作。如果确定设备有故障,应将其更换。
如果需要,使用zpool online命令将更换的设备连线,例如:
$ zpool online pond c0t5000C500335DC60Fd0
如果fmadm faulty的输出识别出设备错误,则告知FMA设备已更换。例如:
$ fmadm faulty
--------------- ------------------------------------  -------------- ---------
TIME            EVENT-ID                              MSG-ID         SEVERITY
--------------- ------------------------------------  -------------- ---------
Jun 20 13:15:41 3745f745-371c-c2d3-d940-93acbb881bd8  ZFS-8000-LR    Major

Problem Status    : solved
Diag Engine       : zfs-diagnosis / 1.0
System
Manufacturer  : unknown
Name          : ORCL,SPARC-T3-4
Part_Number   : unknown
Serial_Number : 1120BDRCCD
Host_ID       : 84a02d28

----------------------------------------
Suspect 1 of 1 :
Fault class : fault.fs.zfs.open_failed
Certainty   : 100%
Affects     : zfs://pool=86124fa573cad84e/
  vdev=25d36cd46e0a7f49/pool_name=pond/
  vdev_name=id1,sd@n5000c500335dc60f/a
Status      : faulted and taken out of service

FRU
Name             : "zfs://pool=86124fa573cad84e/
vdev=25d36cd46e0a7f49/pool_name=pond/
vdev_name=id1,sd@n5000c500335dc60f/a"
Status        : faulty

Description : ZFS device 'id1,sd@n5000c500335dc60f/a' 
in pool 'pond' failed to open.

Response    : An attempt will be made to activate a hot spare if available.

Impact      : Fault tolerance of the pool may be compromised.

Action      : Use 'fmadm faulty' to provide a more detailed view of this event.
Run 'zpool status -lx' for more information. Please refer to the
associated reference document at
http://support.oracle.com/msg/ZFS-8000-LR for the latest service
procedures and policies regarding this diagnosis.			
提取fmadm faulty输出的Affects:部分中的字符串,并将其包含在以下命令中,以告知FMA设备已更换:
$ fmadm repaired zfs://pool=86124fa573cad84e/ \
   vdev=25d36cd46e0a7f49/pool_name=pond/ \
   vdev_name=id1,sd@n5000c500335dc60f/a
fmadm: recorded repair to of zfs://pool=86124fa573cad84e/
   vdev=25d36cd46e0a7f49/pool_name=pond/vdev_
name=id1,sd@n5000c500335dc60f/a			
最后一步,确认已更换设备的池是否正常。例如:
$ zpool status -x system1
pool 'system1' is healthy			
top
解决删除的设备
如果设备从系统中完全卸下,ZFS会检测到设备无法打开,并将其设置成REMOVED状态。
根据池的数据复制级别,此删除操作可能会导致整个池不可用,也可能不会导致整个池不可用。如果镜像或RAID-Z设备中的一个磁盘被移除,则池将继续可访问。
池可能变成UNAVAIL,这意味着在以下情况下,在重新连接设备之前,无法访问任何数据。

如果意外删除并重新插入了冗余存储池设备,则在大多数情况下,您只需清除设备错误即可。例如:
$ zpool clear system1 c1t1d0
top
物理上重新连接设备
丢失的设备如何重新连接取决于所涉及的设备。
如果设备是网络连接驱动器,则应恢复与网络的连接。
如果设备是USB设备或其他可移动媒体,则应将其重新连接到系统。
如果设备是本地磁盘,则控制器可能出现故障,导致系统无法再看到该设备。在这种情况下,应更换控制器,此时磁盘将再次可用。
可能存在其他问题,这取决于硬件类型及其配置。
如果驱动器出现故障,并且系统无法再看到该设备,则应将该设备视为损坏的设备。

如果设备连接受损,池可能会挂起(SUSPENDED)。挂起的池将保持等待状态,直到设备问题得到解决。例如:
$ zpool status cybermen
pool: cybermen
state: SUSPENDED
status: One or more devices are unavailable in response to IO failures.
The pool is suspended.
action: Make sure the affected devices are connected, then run 'zpool clear' or
'fmadm repaired'.
Run 'zpool status -v' to see device specific details.
see: http://support.oracle.com/msg/ZFS-8000-HC
scan: none requested
config:

NAME       STATE     READ WRITE CKSUM
cybermen   UNAVAIL      0    16     0
c8t3d0     UNAVAIL      0     0     0
c8t1d0     UNAVAIL      0     0     0			
在设备连接恢复后,清理池或设备的错误:
$ zpool clear cybermen
$ fmadm repaired zfs://pool=name/vdev=guid			
top
通知ZFS设备可用性
将设备重新连接到系统后,ZFS可能会自动检测,也可能不会自动检测其可用性。
如果池以前是UNAVAILSUSPENDED,或者系统作为attach过程的一部分重新启动,则ZFS在尝试打开池时会自动重新扫描所有设备。
如果在系统运行时池已降级且设备已更换,则必须通知ZFS该设备现在可用,并且可以使用zpool online命令重新打开。例如:
$ zfs online system1 c0t1d0
top

更换或修理损坏的设备

本节介绍如何确定设备故障类型、清除瞬时错误和更换设备。
确定设备故障的类型
受损设备一词相当模糊,可以描述许多可能的情况: 确定设备的确切故障可能是一个困难的过程。第一步是检查zpool status输出中的错误计数。例如:
$ zpool status -v system1
pool: system1
state: ONLINE
status: One or more devices has experienced an error resulting in data
corruption.  Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: http://support.oracle.com/msg/ZFS-8000-8A
config:

NAME           STATE     READ WRITE CKSUM
system1        ONLINE       2     0     0
   c8t0d0      ONLINE       0     0     0
   c8t0d0      ONLINE       2     0     0

errors: Permanent errors have been detected in the following files:

/system1/file.1			
错误分为I/O错误和校验和错误,这两种错误都可能表示可能的故障类型。
典型的操作会预测非常少的错误(在长时间内只有少数错误)。如果您看到大量错误,那么这种情况可能表明即将发生或已经发生设备故障。
但是,管理员错误也可能导致大量错误计数。
另一个信息源是syslog系统日志。如果日志显示大量SCSI或光纤通道驱动程序消息,则这种情况可能表明存在严重的硬件问题。
如果没有生成syslog消息,则损坏可能是暂时的。

目标是回答以下问题: 此设备上是否可能发生其他错误?

只发生一次的错误被认为是暂时(transient)的,并不表示潜在的故障。
持续或严重到足以表明潜在硬件故障的错误被视为致命(fatal)错误。
确定错误类型的行为超出了ZFS当前提供的任何自动化软件的范围,因此许多工作必须由管理员手动完成。
确定后,可以采取适当的措施。清除瞬时错误或更换因致命错误导致的设备。这些维修程序将在下一节中介绍。

即使设备错误被认为是暂时的,它们仍然可能在池中导致无法纠正的数据错误。
这些错误需要特殊的修复程序,即使基础设备被视为健康或以其他方式修复。
有关修复数据错误的更多信息,请参阅修复损坏的ZFS数据。 top
清除暂时性或永久性设备错误
如果设备错误被认为是暂时的,因为它们不太可能影响设备的未来健康,则可以安全地清除它们,以表明没有发生致命错误。可以使用zpool clear命令清除RAID-Z或镜像设备的错误计数器:
$ zpool clear system1 c1t1d0
此命令清除指定设备上的数据错误计数。要清除池中与虚拟设备关联的错误,并清除与池关联的数据错误计数,可以使用以下命令:
$ zpool clear system1
瞬态设备错误最有可能通过使用zpool clear命令清除。
如果设备出现故障,请参阅下一节有关更换设备的内容。
如果冗余设备被意外覆盖或长时间不可用,则可能需要按照zpool status输出中的指示,使用fmadm repaired命令来解决此错误。例如:
$ 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			
top
更换ZFS存储池中的设备
如果设备损坏是永久性的或将来可能永久性损坏,则必须更换设备。设备是否可以更换取决于配置。
确定是否可以更换设备
如果要更换的设备是冗余配置的一部分,则必须存在足够的副本,以便从中检索良好的数据。
例如,如果四向镜像中的两个磁盘UNAVAIL,则可以替换其中一个磁盘,因为健康的副本可用。
但是,如果四路RAID-Z(raidz1)虚拟设备中的两个磁盘UNAVAIL,则两个磁盘都不能更换,因为没有足够的副本从中检索数据。
如果设备已损坏,但仍处于联机状态,则只要池未处于UNAVAIL状态,就可以更换设备。但是,设备上任何损坏的数据都会复制到新设备,除非存在足够的具有良好数据的副本。

在以下配置中,可以更换c1t1d0磁盘,并且池中的任何数据都可以从正常副本c1t0d0复制:
    mirror            DEGRADED
c1t0d0             ONLINE
c1t1d0             UNAVAIL				
c1t0d0磁盘也可以更换,但由于没有良好的副本,因此无法进行数据自愈。

以下配置中,两个UNAVAIL磁盘都不能更换。由于池本身是UNAVAIL,所以也无法更换ONLINE磁盘。
    raidz1              UNAVAIL
c1t0d0              ONLINE
c2t0d0              UNAVAIL
c3t0d0              UNAVAIL
c4t0d0              ONLINE				
在以下配置中,尽管磁盘上存在的任何坏数据都会复制到新磁盘,但可以替换任何一个顶级磁盘:
c1t0d0         ONLINE
c1t1d0         ONLINE				
如果任一磁盘UNAVAIL,则无法执行更换,因为池本身UNAVAILtop
无法更换的设备
如果设备丢失导致池UNAVAIL或设备在非冗余配置中包含太多数据错误,则无法安全地更换设备。
如果没有足够的冗余,就不存在用于修复受损设备的良好数据。在这种情况下,唯一的选择是销毁池并重新创建配置,然后从备份副本恢复数据。 top
更换ZFS存储池中的设备
确定可以替换设备后,使用zpool replace命令替换设备。如果要用不同的设备更换损坏的设备,可使用以下语法:
$ zpool replace system1 c1t1d0 c2t0d0
此命令将数据从损坏的设备或池中的其他设备(如果处于冗余配置)迁移到新设备。
命令完成后,它会将损坏的设备从配置中分离,此时可以将设备从系统中移除。
如果已删除设备并在同一位置用新设备替换,请使用命令的单设备形式。例如:
$ zpool replace system1 c1t1d0
此命令获取未格式化的磁盘,对其进行适当的格式化,然后从其余配置中重新调整数据大小。
例55 更换ZFS存储池中的SATA磁盘
本例展示如何在使用SATA设备的系统上替换镜像存储池system1中的设备c1t3d0
若在同一位置替换磁盘c1t3d0,则必须先取消磁盘配置,然后才能替换它。
如果要更换的磁盘不是SATA磁盘,可参阅更换存储池中的设备

基本步骤如下: 以下例子介绍了更换ZFS存储池中磁盘的步骤:
$ zpool offline system1 c1t3d0
$ cfgadm | grep c1t3d0
sata1/3::dsk/c1t3d0            disk         connected    configured   ok
$ cfgadm -c unconfigure sata1/3
Unconfigure the device at: /devices/pci@0,0/pci1022,7458@2/pci11ab,11ab@1:3
This operation will suspend activity on the SATA device
Continue (yes/no)? yes
$ cfgadm | grep sata1/3
sata1/3                        disk         connected    unconfigured ok

$ cfgadm -c configure sata1/3
$ cfgadm | grep sata1/3
sata1/3::dsk/c1t3d0            disk         connected    configured   ok
$ zpool online system1 c1t3d0
$ zpool replace system1 c1t3d0
# zpool status system1
pool: system1
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Tue Feb  2 13:17:32 2010
config:

NAME           STATE     READ WRITE CKSUM
system1        ONLINE       0     0     0
   mirror-0    ONLINE       0     0     0
      c0t1d0   ONLINE       0     0     0
      c1t1d0   ONLINE       0     0     0
   mirror-1    ONLINE       0     0     0
      c0t2d0   ONLINE       0     0     0
      c1t2d0   ONLINE       0     0     0
   mirror-2    ONLINE       0     0     0
      c0t3d0   ONLINE       0     0     0
      c1t3d0   ONLINE       0     0     0

errors: No known data errors				
注意,前面的zpool output可能会在replacing标题下同时显示新磁盘和旧磁盘。例如:
replacing     DEGRADED     0     0    0
c1t3d0s0/o  FAULTED      0     0    0
c1t3d0      ONLINE       0     0    0				
此文本表示更换过程正在进行,新磁盘正在重新调整大小。

如果要使用新磁盘c4t3d0替换旧磁盘c1t3d0,则只需要运行zpool replace命令。例如:
$ zpool replace system1 c1t3d0 c4t3d0
$ zpool status
pool: system1
state: DEGRADED
scrub: resilver completed after 0h0m with 0 errors on Tue Feb  2 13:35:41 2010
config:

NAME           STATE     READ WRITE CKSUM
system1        DEGRADED     0     0     0
   mirror-0    ONLINE       0     0     0
      c0t1d0   ONLINE       0     0     0
      c1t1d0   ONLINE       0     0     0
   mirror-1    ONLINE       0     0     0
      c0t2d0   ONLINE       0     0     0
      c1t2d0   ONLINE       0     0     0
   mirror-2    DEGRADED     0     0     0
      c0t3d0   ONLINE       0     0     0
   replacing   DEGRADED     0     0     0
      c1t3d0   OFFLINE      0     0     0
      c4t3d0   ONLINE       0     0     0

errors: No known data errors				
在磁盘更换完成之前,可以多次运行zpool status命令查看状态:
$ zpool status system1
pool: system1
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Tue Feb  2 13:35:41 2010
config:

NAME          STATE     READ WRITE CKSUM
system1       ONLINE       0     0     0
   mirror-0   ONLINE       0     0     0
      c0t1d0  ONLINE       0     0     0
      c1t1d0  ONLINE       0     0     0
   mirror-1   ONLINE       0     0     0
      c0t2d0  ONLINE       0     0     0
      c1t2d0  ONLINE       0     0     0
   mirror-2   ONLINE       0     0     0
      c0t3d0  ONLINE       0     0     0
      c4t3d0  ONLINE       0     0     0				
例56 更换坏的日志设备
ZFS在zpool status命令输出中可以识别意图日志故障。故障管理体系(Fault Management Architecture,FMA)也会报告这些错误。
ZFS和FMA都描述了如何从意图日志故障中恢复。

以下例子演示如何恢复存储池(storpool)中坏掉的日志设备(c0t5d0)。
基本步骤如下: 例如,如果系统在同步写入操作提交到具有单独日志设备的池之前突然关闭,则会看到类似以下消息:
$ zpool status -x
pool: storpool
state: FAULTED
status: One or more of the intent logs could not be read.
Waiting for administrator intervention to fix the faulted pool.
action: Either restore the affected device(s) and run 'zpool online',
or ignore the intent log records by running 'zpool clear'.
scrub: none requested
config:

NAME           STATE     READ WRITE CKSUM
storpool       FAULTED      0     0     0 bad intent log
   mirror-0    ONLINE       0     0     0
      c0t1d0   ONLINE       0     0     0
      c0t4d0   ONLINE       0     0     0
   logs        FAULTED      0     0     0 bad intent log
      c0t5d0   UNAVAIL      0     0     0 cannot open

$ zpool online storpool c0t5d0
$ zpool clear storpool
$ fmadm faulty
$ fmadm repair zfs://pool=name/vdev=guid				
可以通过以下方式解决日志设备故障: 要在不更换故障日志设备的情况下从该错误中恢复,可以使用zpool clear命令清除该错误。
在这种情况下,池将以降级模式运行,日志记录将写入主池,直到更换单独的日志设备。

考虑使用镜像日志设备来避免日志设备失败场景。 top
查看重定位状态
更换设备的过程可能需要较长的时间,具体取决于设备的大小和池中的数据量。
将数据从一个设备移动到另一个设备的过程称为resilvering,可以使用zpool status命令进行监视。 zpool status提供以下消息: 恢复完成消息在系统重启后还会存在。

传统文件系统在块级别调整数据大小。
因为ZFS消除了卷管理器的人为分层,所以它可以以一种更强大、更可控的方式执行重定大小。此功能的两个主要优点如下: 使用zpool status命令查看重定大小的过程:
$ zpool status system1
pool: system1
state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Mon Jun  7 10:49:20 2010
54.6M scanned54.5M resilvered at 5.46M/s, 24.64% done, 0h0m to go

config:

NAME             STATE     READ WRITE CKSUM
system1          ONLINE       0     0     0
   mirror-0      ONLINE       0     0     0
   replacing-0   ONLINE       0     0     0
      c1t0d0     ONLINE       0     0     0
      c2t0d0     ONLINE       0     0     0  (resilvering)
      c1t1d0     ONLINE       0     0     0				
在此示例中,磁盘c1t0d0c2t0d0替换。
通过配置中存在替换虚拟设备,可以在状态输出中观察到此事件。
此设备不是真实的,您也不可能使用它创建池。
此设备的用途仅用于显示重定位进度,并识别正在更换的设备。

请注意,当前正在进行重新调整的任何池都将处于联机或降级状态,因为在重新调整过程完成之前,该池无法提供所需的冗余级别。
Resilvering尽可能快地进行,尽管I/O的调度优先级始终低于用户请求的I/O,以将对系统的影响降至最低。
重定位完成后,配置将恢复为新的完整配置。例如:
$ zpool status system1
pool: system1
state: ONLINE
scrub: resilver completed after 0h1m with 0 errors on Tue Feb  2 13:54:30 2010
config:

NAME          STATE     READ WRITE CKSUM
system1       ONLINE       0     0     0
   mirror-0   ONLINE       0     0     0
      c2t0d0  ONLINE       0     0     0  377M resilvered
      c1t1d0  ONLINE       0     0     0

errors: No known data errors				
池再次联机,原始故障磁盘(c1t0d0)已从配置中删除。

top

更换池设备

不要尝试更改活动池下的池设备。

磁盘通过其路径和设备ID(如果可用)进行标识。
在设备ID信息可用的系统上,此标识方法允许在不更新ZFS的情况下重新配置设备。
由于设备ID的生成和管理可能因系统而异,因此在移动设备(例如将磁盘从一个控制器移动到另一个控制器)之前,请先导出池。
系统事件(如固件更新或其他硬件更改)可能会更改ZFS存储池中的设备ID,从而导致设备不可用。

另一个问题是,如果尝试更改池下的设备,然后以非root用户的身份使用zpool status命令,则可能会显示以前的设备名称 top