跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris 11.1 管理:ZFS 文件系统 Oracle Solaris 11.1 Information Library (简体中文) |
1. Oracle Solaris ZFS 文件系统(介绍)
6. 使用 Oracle Solaris ZFS 快照和克隆
7. 使用 ACL 和属性保护 Oracle Solaris ZFS 文件
以下各节介绍如何确定并解决 ZFS 文件系统或存储池中的问题:
可以使用以下功能来确定 ZFS 配置所存在的问题:
使用 zpool status 命令可以显示 ZFS 存储池的详细信息。
通过 ZFS/FMA 诊断消息报告池和设备故障。
使用 zpool history 命令可以显示以前修改了池状态信息的 ZFS 命令。
大多数 ZFS 故障排除工作都会涉及到 zpool status 命令。此命令对系统中的各种故障进行分析并确定最严重的问题,同时为您提供建议的操作和指向知识文章(用于获取更多信息)的链接。请注意,虽然池可能存在多个问题,但是此命令仅确定其中的一个问题。例如,数据损坏错误一般意味着一台设备发生故障,但更换故障设备可能无法解决所有数据损坏问题。
此外,ZFS 诊断引擎也会诊断和报告池故障和设备故障。另外还会报告与这些故障关联的校验和、I/O、设备和池错误。fmd 报告的 ZFS 故障在控制台上以及系统消息文件中显示。在大多数情况下,fmd 消息会指示您查看 zpool status 命令的输出,以便获得进一步的恢复说明。
基本的恢复过程如下所示:
如果合适,请使用 zpool history 命令错误情况出现以前的 ZFS 命令。例如:
# zpool history tank History for 'tank': 2010-07-15.12:06:50 zpool create tank mirror c0t1d0 c0t2d0 c0t3d0 2010-07-15.12:06:58 zfs create tank/eric 2010-07-15.12:07:01 zfs set checksum=off tank/eric
在此输出中,可以看到,对 tank/eric 文件系统禁用了校验和。建议不要使用此配置。
通过在系统控制台上或 /var/adm/messages 文件中显示的 fmd 消息来确定错误。
使用 zpool status -x 命令查找进一步的修复说明。
排除故障涉及到以下步骤:
更换不可用设备或缺少的设备,并使其联机。
从备份恢复故障配置或损坏的数据。
使用 zpool status -x 命令验证恢复情况。
备份所恢复的配置(如果适用)。
本节介绍如何解读 zpool status 输出,以便诊断可能出现的故障类型。尽管大多数工作是由命令自动执行的,但是准确了解所确定的问题以便诊断故障是很重要的。后续部分将介绍如何解决可能遇到的各种问题。
确定系统上是否存在任何已知问题的最简单的方法是使用 zpool status -x 命令。此命令仅对出现问题的池进行说明。如果系统中不存在运行状态不佳的池,该命令将显示以下信息:
# zpool status -x all pools are healthy
如果没有 -x 标志,则该命令显示所有池(如果在命令行上指定了池,则为请求的池)的完整状态,即使池的运行状况良好也是如此。
有关 zpool status 命令的命令行选项的更多信息,请参见查询 ZFS 存储池的状态。
完整的 zpool status 输出与以下内容类似:
# 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
该输出将在下一节中进行介绍。
zpool status 输出中的这一部分包含以下字段(其中一些字段仅针对出现问题的池显示):
确定池的名称。
指示池的当前运行状况。此信息仅指池提供必要复制级别的能力。
描述池存在的问题。如果未发现错误,则省略此字段。
建议用于修复错误的操作。如果未发现错误,则省略此字段。
对包含详细修复信息的知识文章的引用。在线文章的更新频率高于本指南的更新频率。因此,务必参考这些文章以了解最新的修复程序。如果未发现错误,则省略此字段。
确定清理操作的当前状态,它可能包括完成上一清理的日期和时间、正在进行的清理或者是否未请求清理。
确定是否存在已知的数据错误。
zpool status 输出中的 config 字段描述池中的设备的配置,以及设备的状态和设备产成的任何错误。其状态可以是以下状态之一:ONLINE、FAULTED、DEGRADED 或 SUSPENDED。如果状态是除 ONLINE 之外的任何状态,则说明池的容错能力已受到损害。
配置输出的第二部分显示错误统计信息。这些错误分为以下三类:
READ-发出读取请求时出现 I/O 错误
WRITE-发出写入请求时出现 I/O 错误
CKSUM-校验和错误,意味着设备对读取请求返回损坏的数据
这些错误可用于确定损坏是否是永久性的。小量 I/O 错误数可能指示临时故障,而大量 I/O 错误则可能指示设备出现了永久性问题。这些错误不一定对应于应用程序所解释的数据损坏。如果设备处于冗余配置中,则设备可能显示无法更正的错误,而镜像或 RAID-Z 设备级别上不显示错误。这种情况下,ZFS 成功检索到良好的数据并试图利用现有副本修复受损数据。
有关解释这些错误的更多信息,请参见确定设备故障的类型。
最后,在 zpool status 输出的最后一列中显示其他辅助信息。此信息是对 state 字段的详述,以帮助诊断故障。如果设备处于 UNAVAIL 状态,则此字段指示是否无法访问设备或者设备上的数据是否已损坏。如果设备正在进行重新同步,则此字段显示当前的进度。
有关监视重新同步进度的信息,请参见查看重新同步状态。
zpool status 输出的清理部分描述任何显式清理操作的当前状态。此信息不是用于指示系统上是否检测到任何错误,但是可以利用此信息来判定数据损坏错误报告的准确性。如果上一清理是最近结束的,则很可能已发现任何已知的数据损坏。
提供了以下 zpool status 清理状态消息:
清理进度报告。例如:
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: 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
清理完成消息可在系统重新引导后存留下来。
有关数据清理以及如何解释此信息的更多信息,请参见检查 ZFS 文件系统完整性。
zpool status 命令还显示是否有已知错误与池关联。在数据清理或常规操作期间,可能已发现这些错误。ZFS 将与池关联的所有数据错误记录在持久性日志中。每当系统的完整清理完成时,都会轮转此日志。
数据损坏错误始终是致命的。出现这种错误表明至少一个应用程序因池中的数据损坏而遇到 I/O 错误。冗余池中的设备错误不会导致数据损坏,而且不会被记录在此日志中。缺省情况下,仅显示发现的错误数。使用 zpool status -v 选项可以列出带有详细说明的完整错误列表。例如:
# zpool status -v tank pool: tank 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 tank ONLINE 2 0 0 c8t0d0 ONLINE 0 0 0 c8t1d0 ONLINE 2 0 0 errors: Permanent errors have been detected in the following files: /tank/file.1
也可使用 fmd 在系统控制台上和 /var/adm/messages 文件中显示类似的消息。还可以使用 fmdump 命令跟踪这些消息。
有关解释数据损坏错误的更多信息,请参见确定数据损坏的类型。
除了持久跟踪池中的错误外,ZFS 还在发生相关事件时显示系统日志消息。以下情况将生成通知事件:
设备状态转换-如果设备变为 FAULTED 状态,则 ZFS 将记录一条消息,指出池的容错能力可能已受到危害。如果稍后将设备联机,将池恢复正常,则将发送类似的消息。
数据损坏-如果检测到任何数据损坏,则 ZFS 将记录一条消息,描述检测到数据损坏的时间和位置。仅在首次检测到数据损坏时才记录此消息。后续访问不生成消息。
池故障和设备故障-如果出现池故障或设备故障,则 Fault Manager 守护进程将通过 syslog 消息以及 fmdump 命令报告这些错误。
如果 ZFS 检测到设备错误并自动从其恢复,则不进行通知。这样的错误不会造成池冗余或数据完整性方面的故障。并且,这样的错误通常是由伴随有自己的一组错误消息的驱动程序问题导致的。