JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris ZFS 管理指南     Oracle Solaris 10 1/13 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

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

2.  Oracle Solaris ZFS 入门

3.  管理 Oracle Solaris ZFS 存储池

ZFS 存储池的组件

使用 ZFS 存储池中的磁盘

使用 ZFS 存储池中的分片

使用 ZFS 存储池中的文件

ZFS 存储池的注意事项

ZFS 存储池的复制功能

镜像存储池配置

RAID-Z 存储池配置

ZFS 混合存储池

冗余配置中的自我修复数据

存储池中的动态条带化

创建和销毁 ZFS 存储池

创建 ZFS 存储池

创建基本存储池

创建镜像存储池

创建 ZFS 根池

创建 RAID-Z 存储池

使用日志设备创建 ZFS 存储池

使用高速缓存设备创建 ZFS 存储池

创建存储池的注意事项

显示存储池虚拟设备信息

处理 ZFS 存储池创建错误

检测使用中的设备

不匹配的复制级别

在预运行模式下创建存储池

存储池的缺省挂载点

销毁 ZFS 存储池

销毁包含不可用设备的池

管理 ZFS 存储池中的设备

向存储池中添加设备

附加和分离存储池中的设备

通过分割镜像 ZFS 存储池创建新池

使存储池中的设备联机和脱机

使设备脱机

使设备联机

清除存储池设备错误

替换存储池中的设备

在存储池中指定热备件

在存储池中激活和取消激活热备件

管理 ZFS 存储池属性

查询 ZFS 存储池的状态

显示有关 ZFS 存储池的信息

显示有关所有存储池或某个特定池的信息

显示特定的存储池统计信息

使用脚本处理 ZFS 存储池输出

显示 ZFS 存储池命令历史记录

查看 ZFS 存储池的 I/O 统计信息

列出池范围的 I/O 统计信息

列出虚拟设备 I/O 统计信息

确定 ZFS 存储池的运行状况

基本的存储池运行状况

详细运行状况

收集 ZFS 存储池状态信息

迁移 ZFS 存储池

准备迁移 ZFS 存储池

导出 ZFS 存储池

确定要导入的可用存储池

从替换目录导入 ZFS 存储池

导入 ZFS 存储池

导入缺少日志设备的池

在只读模式下导入池

通过特定的设备路径导入池

恢复已销毁的 ZFS 存储池

升级 ZFS 存储池

4.  安装和引导 Oracle Solaris 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 故障排除和池恢复

11.  建议的 Oracle Solaris ZFS 做法

A.  Oracle Solaris ZFS 版本说明

索引

查询 ZFS 存储池的状态

zpool list 命令提供了多种方法来请求有关池状态的信息。可用信息通常分为以下三个类别: 基本使用情况信息、I/O 统计信息和运行状况。本节介绍了所有这三种类型的存储池信息。

显示有关 ZFS 存储池的信息

可以使用 zpool list 命令显示有关池的基本信息。

显示有关所有存储池或某个特定池的信息

不带任何参数时,zpool list 命令显示有关系统上所有池的下列信息。

# zpool list
NAME                    SIZE    ALLOC   FREE    CAP  HEALTH     ALTROOT
tank                   80.0G   22.3G   47.7G    28%  ONLINE     -
dozer                   1.2T    384G    816G    32%  ONLINE     -

此命令输出显示以下信息:

NAME

池的名称。

SIZE

池的总大小,等于所有顶层虚拟设备大小的总和。

ALLOC

分配给所有数据集和内部元数据的物理空间量。请注意,此数量与在文件系统级别报告的磁盘空间量不同。

有关确定可用文件系统空间的更多信息,请参见ZFS 磁盘空间记帐

FREE

池中未分配的空间量。

CAP (CAPACITY)

已用磁盘空间量,以总磁盘空间的百分比表示。

HEALTH

池的当前运行状况。

有关池运行状况的更多信息,请参见确定 ZFS 存储池的运行状况

ALTROOT

池的备用根(如果有)。

有关备用根池的更多信息,请参见使用 ZFS 备用根池

另外,也可以通过指定池的名称来收集特定池的统计信息。例如:

# zpool list tank
NAME                    SIZE    ALLOC   FREE    CAP   HEALTH     ALTROOT
tank                   80.0G    22.3G   47.7G    28%  ONLINE     -

可以使用 zpool list 的时间间隔和计数选项收集一定时期内的统计信息。此外,使用 -T 选项可以显示时间戳。例如:

# zpool list -T d 3 2
Tue Nov  2 10:36:11 MDT 2010
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
pool   33.8G  83.5K  33.7G     0%  1.00x  ONLINE  -
rpool  33.8G  12.2G  21.5G    36%  1.00x  ONLINE  -
Tue Nov  2 10:36:14 MDT 2010
pool   33.8G  83.5K  33.7G     0%  1.00x  ONLINE  -
rpool  33.8G  12.2G  21.5G    36%  1.00x  ONLINE  -

显示特定的存储池统计信息

可以使用 -o 选项请求特定的统计信息。使用此选项可以生成定制报告或快速列出相关信息。例如,要仅列出每个池的名称和大小,可使用以下语法:

# zpool list -o name,size
NAME                    SIZE
tank                   80.0G
dozer                   1.2T

列名称与显示有关所有存储池或某个特定池的信息中列出的属性相对应。

使用脚本处理 ZFS 存储池输出

zpool list 命令的缺省输出目的在于提高可读性,因此不能轻易用作 shell 脚本的一部分。为了便于在程序中使用该命令,可以使用 -H 选项以便不显示列标题,并使用制表符而不是空格分隔字段。例如,要请求系统中所有池的名称列表,可以使用以下语法:

# zpool list -Ho name
tank
dozer

以下是另一个示例:

# zpool list -H -o name,size
tank   80.0G
dozer  1.2T

显示 ZFS 存储池命令历史记录

ZFS 会自动记录成功的 zfszpool 命令(用于修改池状态信息)。使用 zpool history 命令可显示此信息。

例如,以下语法显示了根池的命令输出:

# zpool history
History for 'rpool':
2010-05-11.10:18:54 zpool create -f -o failmode=continue -R /a -m legacy -o 
cachefile=/tmp/root/etc/zfs/zpool.cache rpool mirror c1t0d0s0 c1t1d0s0
2010-05-11.10:18:55 zfs set canmount=noauto rpool
2010-05-11.10:18:55 zfs set mountpoint=/rpool rpool
2010-05-11.10:18:56 zfs create -o mountpoint=legacy rpool/ROOT
2010-05-11.10:18:57 zfs create -b 8192 -V 2048m rpool/swap
2010-05-11.10:18:58 zfs create -b 131072 -V 1536m rpool/dump
2010-05-11.10:19:01 zfs create -o canmount=noauto rpool/ROOT/zfsBE
2010-05-11.10:19:02 zpool set bootfs=rpool/ROOT/zfsBE rpool
2010-05-11.10:19:02 zfs set mountpoint=/ rpool/ROOT/zfsBE
2010-05-11.10:19:03 zfs set canmount=on rpool
2010-05-11.10:19:04 zfs create -o mountpoint=/export rpool/export
2010-05-11.10:19:05 zfs create rpool/export/home
2010-05-11.11:11:10 zpool set bootfs=rpool rpool
2010-05-11.11:11:10 zpool set bootfs=rpool/ROOT/zfsBE rpool

您可以使用有关系统的类似输出来确定对错误状况进行故障排除时所执行的确切 ZFS 命令。

历史记录日志有如下特点:

要确定特定存储池的命令历史记录,请使用类似以下内容的语法:

# zpool history tank
2012-01-25.16:35:32 zpool create -f tank mirror c3t1d0 c3t2d0 spare c3t3d0
2012-02-17.13:04:10 zfs create tank/test
2012-02-17.13:05:01 zfs snapshot -r tank/test@snap1

可使用 -l 选项显示长格式(包括用户名、主机名和执行操作的区域)。例如:

# zpool history -l tank
History for 'tank':
2012-01-25.16:35:32 zpool create -f tank mirror c3t1d0 c3t2d0 spare c3t3d0 
[user root on tardis:global]
2012-02-17.13:04:10 zfs create tank/test [user root on tardis:global]
2012-02-17.13:05:01 zfs snapshot -r tank/test@snap1 [user root on tardis:global]

可使用 -i 选项显示可用于诊断目的的内部事件信息。例如:

# zpool history -i tank
History for 'tank':
2012-01-25.16:35:32 zpool create -f tank mirror c3t1d0 c3t2d0 spare c3t3d0
2012-01-25.16:35:32 [internal pool create txg:5] pool spa 33; zfs spa 33; zpl 5;
uts tardis 5.11 11.1 sun4v
2012-02-17.13:04:10 zfs create tank/test
2012-02-17.13:04:10 [internal property set txg:66094] $share2=2 dataset = 34
2012-02-17.13:04:31 [internal snapshot txg:66095] dataset = 56
2012-02-17.13:05:01 zfs snapshot -r tank/test@snap1
2012-02-17.13:08:00 [internal user hold txg:66102] <.send-4736-1> temp = 1 ...

查看 ZFS 存储池的 I/O 统计信息

要请求池或特定虚拟设备的 I/O 统计信息,请使用 zpool iostat 命令。与 iostat 命令类似,此命令也可以显示所有 I/O 活动的静态快照,以及每个指定时间间隔的更新统计信息。报告的统计信息如下:

alloc capacity

当前存储在池或设备中的数据量。由于具体的内部实现的原因,此数量与可供实际文件系统使用的磁盘空间量有少量差异。

有关池空间与数据集空间之间的差异的更多信息,请参见ZFS 磁盘空间记帐

free capacity

池或设备中的可用磁盘空间量。与 used 统计信息一样,该空间量与可供数据集使用的磁盘空间量也有少量差异。

read operations

发送到池或设备的读取 I/O 操作数,包括元数据请求。

write operations

发送到池或设备的写入 I/O 操作数。

read bandwidth

所有读取操作(包括元数据)的带宽,以每秒单位数表示。

write bandwidth

所有写入操作的带宽,以每秒单位数表示。

列出池范围的 I/O 统计信息

如果不使用任何选项,则 zpool iostat 命令会显示自引导以来系统中所有池的累积统计信息。例如:

# zpool iostat
               capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
rpool       6.05G  61.9G      0      0    786    107
tank        31.3G  36.7G      4      1   296K  86.1K
----------  -----  -----  -----  -----  -----  -----

由于这些统计信息是自引导以来累积的,因此,如果池相对空闲,则带宽可能显示为较低。通过指定时间间隔,可以请求查看更准确的当前带宽使用情况。例如:

# zpool iostat tank 2
               capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
tank        18.5G  49.5G      0    187      0  23.3M
tank        18.5G  49.5G      0    464      0  57.7M
tank        18.5G  49.5G      0    457      0  56.6M
tank        18.8G  49.2G      0    435      0  51.3M

在以上示例中,此命令每隔两秒显示一次池 tank 的使用情况统计信息,直到按 Ctrl-C 组合键为止。或者,可以再指定一个 count 参数,该参数可使命令在重复执行指定的次数之后终止。

例如,zpool iostat 2 3 每隔两秒列显一次摘要信息,重复三次,共六秒。如果仅有一个池,则会在连续的行上显示统计信息。如果存在多个池,则用附加虚线分隔每次重复,以提供直观的分隔效果。

列出虚拟设备 I/O 统计信息

除了池范围的 I/O 统计信息外,zpool iostat 命令还可以显示虚拟设备的 I/O 统计信息。此命令可用于识别异常缓慢的设备,或者观察 ZFS 生成的 I/O 的分布情况。要请求完整的虚拟设备布局以及所有 I/O 统计信息,请使用 zpool iostat -v 命令。例如:

# zpool iostat -v
               capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
rpool       6.05G  61.9G      0      0    785    107
  mirror    6.05G  61.9G      0      0    785    107
    c1t0d0s0    -      -      0      0    578    109
    c1t1d0s0    -      -      0      0    595    109
----------  -----  -----  -----  -----  -----  -----
tank        36.5G  31.5G      4      1   295K   146K
  mirror    36.5G  31.5G    126     45  8.13M  4.01M
    c1t2d0      -      -      0      3   100K   386K
    c1t3d0      -      -      0      3   104K   386K
----------  -----  -----  -----  -----  -----  -----

查看虚拟设备的 I/O 统计信息时,必须注意以下两点:

检查虚拟设备统计信息时,可以使用相同的一组选项(时间间隔和计次)。

确定 ZFS 存储池的运行状况

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

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

池的运行状况通过以下四种状态之一来描述:

DEGRADED

池有一个或多个设备发生故障,但由于使用了冗余配置,数据仍然可用。

ONLINE

池中的所有设备都正常运行。

SUSPENDED

池正在等待恢复设备连接。在设备问题得到解决之前,SUSPENDED 池一直处于 wait 状态。

UNAVAIL

池的元数据遭到损坏,或者有一个或多个设备不可用,并且没有足够的副本支持其继续运行。

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

DEGRADED

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

OFFLINE

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

ONLINE

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

REMOVED

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

UNAVAIL

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

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

zpool status 命令还提供有关重新同步和清理操作的详细信息。

基本的存储池运行状况

使用 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

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

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

# zpool online tank c1t0d0
Bringing device c1t0d0 online
# zpool status -x
all pools are healthy
# 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: 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
# 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

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

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

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

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

收集 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