JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11.1 管理:ZFS 文件系统     Oracle Solaris 11.1 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  Oracle Solaris ZFS 文件系统(介绍)

2.  Oracle Solaris ZFS 入门

3.  管理 Oracle Solaris ZFS 存储池

4.  管理 ZFS 根池组件

5.  管理 Oracle Solaris ZFS 文件系统

6.  使用 Oracle Solaris ZFS 快照和克隆

7.  使用 ACL 和属性保护 Oracle Solaris ZFS 文件

8.  Oracle Solaris ZFS 委托管理

9.  Oracle Solaris ZFS 高级主题

10.  Oracle Solaris ZFS 故障排除和池恢复

解决 ZFS 空间问题

ZFS 文件系统空间报告

ZFS 存储池空间报告

确定 ZFS 故障

ZFS 存储池中缺少设备

ZFS 存储池中的设备已损坏

ZFS 数据已损坏

检查 ZFS 文件系统完整性

文件系统修复

文件系统验证

控制 ZFS 数据清理

显式 ZFS 数据清理

ZFS 数据清理和重新同步

解决 ZFS 问题

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

查看 zpool status 输出

总体池状态信息

池配置信息

清理状态

数据损坏错误

ZFS 错误消息的系统报告

修复损坏的 ZFS 配置

解决缺少设备的问题

以物理方式重新附加设备

将设备可用性通知 ZFS

更换或修复损坏的设备

确定设备故障的类型

清除瞬态错误

替换 ZFS 存储池中的设备

确定是否可以替换设备

无法替换的设备

替换 ZFS 存储池中的设备

查看重新同步状态

修复损坏的数据

确定数据损坏的类型

修复损坏的文件或目录

修复具有多块引用的损坏数据

修复 ZFS 存储池范围内的损坏

修复无法引导的系统

11.  归档快照和根池恢复

12.  建议的 Oracle Solaris ZFS 做法

A.  Oracle Solaris ZFS 版本说明

索引

修复损坏的数据

以下各节介绍如何确定数据损坏的类型以及如何修复数据(如有可能)。

ZFS 使用校验和、冗余和自我修复数据来最大限度地减少出现数据损坏的风险。但是,如果没有冗余池,如果将池降级时出现损坏,或者不大可能发生的一系列事件协同损坏数据段的多个副本,则可能会出现数据损坏。不管是什么原因,结果都是相同的: 数据被损坏,因此无法再进行访问。所执行的操作取决于被损坏数据的类型及其相对值。可能损坏以下两种基本类型的数据:

数据是在常规操作期间和清理过程中验证的。有关如何验证池数据完整性的信息,请参见检查 ZFS 文件系统完整性

确定数据损坏的类型

缺省情况下,zpool status 命令仅说明已出现损坏,而不说明出现此损坏的位置。例如:

# zpool status 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
config:

        NAME                       STATE     READ WRITE CKSUM
        tank                       ONLINE       4     0     0
          c0t5000C500335E106Bd0    ONLINE       0     0     0
          c0t5000C500335FC3E7d0    ONLINE       4     0     0


errors: 2 data errors, use '-v' for a list

每个错误仅指示在给定时间点出现了错误。每个错误不一定仍存在于系统上。一般情况下是如此。某些临时故障可能会导致数据损坏,故障结束后会自动修复。完整的池清理可保证检查池中的每个活动块,因此每当清理完成后都会重置错误日志。如果确定错误不再存在,并且不希望等待清理完成,则使用 zpool online 命令重置池中的所有错误。

如果数据损坏位于池范围内的元数据中,则输出稍有不同。例如:

# zpool status -v morpheus
  pool: morpheus
    id: 13289416187275223932
 state: UNAVAIL
status: The pool metadata is corrupted.
action: The pool cannot be imported due to damaged devices or data.
   see: http://support.oracle.com/msg/ZFS-8000-72
config:

        morpheus    FAULTED   corrupted data
          c1t10d0   ONLINE

如果出现池范围的损坏,池将被置于 FAULTED 状态,这是因为池无法提供所需的冗余级别。

修复损坏的文件或目录

如果文件或目录被损坏,则系统可能仍然正常工作,具体取决于损坏的类型。如果系统中存在完好的数据副本,则任何损坏实际上都是不可恢复的。如果数据具有价值,必须从备份中恢复受影响的数据。尽管这样,您也许能够从此损坏恢复而不必恢复整个池。

如果损坏出现在文件数据块中,则可以安全地删除该文件,从而清除系统中的错误。使用 zpool status -v 命令可以显示包含持久性错误的文件名列表。例如:

# zpool status tank -v
  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
config:

        NAME                       STATE     READ WRITE CKSUM
        tank                       ONLINE       4     0     0
          c0t5000C500335E106Bd0    ONLINE       0     0     0
          c0t5000C500335FC3E7d0    ONLINE       4     0     0

errors: Permanent errors have been detected in the following files:
        /tank/file.1
        /tank/file.2

包含持久性错误的文件名列表可能描述如下:

如果损坏发生在目录或文件的元数据中,则唯一的选择是将文件移动到别处。可以安全地将任何文件或目录移动到不太方便的位置,以允许恢复原始对象。

修复具有多块引用的损坏数据

如果受损的文件系统包含具有多块引用的损坏数据(如来自快照的数据),zpool status -v 命令不会显示所有损坏数据的路径。ZFS 清理算法遍历池并访问每个数据块一次。该算法只报告第一次出现的损坏。因此,只生成一个指向受影响文件的路径。请注意,这也适用于做了重复数据删除处理的损坏块。

如果有损坏的数据,并且 zpool status - v 命令识别出有快照数据受影响,请考虑搜索其他损坏数据路径。

# find mount-point -inum $inode -print
# find mount-point/.zfs/snapshot -inum $inode -print 

第一条命令搜索针对指定文件系统及其所有快照报告的损坏数据的 inode 编号。第二条命令搜索具有相同 inode 编号的快照。

修复 ZFS 存储池范围内的损坏

如果池元数据发生损坏,并且该损坏导致池无法打开或导入,则可以使用以下选项: