查询ZFS存储池状态

zpool list命令提供了几种方法查询池状态信息。池状态信息包括:
  1. 显示ZFS池信息
  2. 显示指定存储池的统计信息
  3. 显示池信息物理位置
  4. 显示ZFS存储池命令历史
  5. 显示ZFS存储池的I/O状态
  6. 确定ZFS存储池的健康状况

显示ZFS池信息
如果不使用选项,直接运行zpool list [pool]则可以获取到指定池的基本信息。如果不指定池,则显示所有池的基本信息。
显示的池信息包括: 下面是一个简单的zpool list输出:
$ zpool list
NAME                    SIZE    ALLOC    FREE    CAP  HEALTH     ALTROOT
syspool1                80.0G   22.3G   47.7G    28%  ONLINE     -
syspool2                 1.2T    384G    816G    32%  ONLINE     -		
		
要获得指定池的统计信息,可以在命令后面指定池的名称。
top
显示指定存储池的统计信息
-o选项可以指定输出的列,例如:
$ zpool list -o name,size
NAME                    SIZE
syspool1               80.0G
syspool2                1.2T		
		
可以使用-Ho选项,将zpool list命令作为shell脚本的一部分。-H选项不显示第一行,且显示结果为tab分隔形式。例如:
$ zpool list -Ho name,size
syspool1   80.0G
syspool2  1.2T
		
-T选项可以收集有关池时间戳的统计数据,使用方法为:
$ zpool list -T d interval [count]
其中: 以下例子显示池信息两次,像个3秒,并在每次显示池信息之前显示当时日期:
$ 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  -		
		
top
显示池信息物理位置
zpool status -l显示池设备的物理位置。当需要更换或物理移除磁盘时,查看物理位置会很有帮助。
此外,可以使用fmadm add-alias命令来包含磁盘别名,以帮助识别环境中磁盘的物理位置。例如:
$ fmadm add-alias SUN-Storage-J4400.1002QCQ015 Lab10Rack5disk
$ zpool status -l system1
  pool: system1
 state: ONLINE
  scan: scrub repaired 0 in 0h0m with 0 errors on Fri Aug  3 16:00:35 2012
config:

        NAME                                         STATE     READ WRITE CKSUM
        system1                                      ONLINE       0     0     0
          mirror-0                                   ONLINE       0     0     0
            /dev/chassis/Lab10Rack5.../DISK_02/disk  ONLINE       0     0     0
            /dev/chassis/Lab10Rack5.../DISK_20/disk  ONLINE       0     0     0
          mirror-1                                   ONLINE       0     0     0
            /dev/chassis/Lab10Rack5.../DISK_22/disk  ONLINE       0     0     0
            /dev/chassis/Lab10Rack5.../DISK_14/disk  ONLINE       0     0     0
          mirror-2                                   ONLINE       0     0     0
            /dev/chassis/Lab10Rack5.../DISK_10/disk  ONLINE       0     0     0
            /dev/chassis/Lab10Rack5.../DISK_16/disk  ONLINE       0     0     0
.
.
.
        spares
          /dev/chassis/Lab10Rack5.../DISK_17/disk    AVAIL   
          /dev/chassis/Lab10Rack5.../DISK_12/disk    AVAIL   

errors: No known data errors		
		
top
显示ZFS存储池命令历史
使用zpool history命令可以显示zfszpool命令执行的历史记录。
日志记录这些命令成功运行修改池状态信息和对错误情况进行故障排除的时间。
应注意有关历史日志的以下信息: 以下示例显示池system1上执行zfszpool命令的历史:
$ zpool history system1
2012-01-25.16:35:32 zpool create -f system1 mirror c3t1d0 c3t2d0 spare c3t3d0
2012-02-17.13:04:10 zfs create system1/test
2012-02-17.13:05:01 zfs snapshot -r system1/test@snap1		
		
使用-l选项可以显示长格式,包含用户名、主机名和执行操作的区域。例如:
$ zpool history -l system1
History for 'system1':
2012-01-25.16:35:32 zpool create -f system1 mirror c3t1d0 c3t2d0 spare c3t3d0
[user root on host1:global]
2012-02-17.13:04:10 zfs create system1/test [user root on host1:global]
2012-02-17.13:05:01 zfs snapshot -r system1/test@snap1 [user root on host1:global]		
		
使用-i选项显示可用于诊断目的的内部事件信息。例如:
$ zpool history -i system1
History for 'system1':
2012-01-25.16:35:32 zpool create -f system1 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 host1 5.11 11.1 sun4v
2012-02-17.13:04:10 zfs create system1/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 system1/test@snap1
2012-02-17.13:08:00 [internal user hold txg:66102] <.send-4736-1> temp = 1 ...		
		
top
显示ZFS存储池的I/O状态
使用zpool iostat命令可以显示池或指定虚拟设备的I/O状态。
iostat命令类似,该命令可以显示所有I/O活动的静态快照,以及每个指定时间间隔的更新统计信息。
报告的统计数据如下:
列出池范围的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
system1     31.3G  36.7G      4      1   296K  86.1K
----------  -----  -----  -----  -----  -----  -----		
		
由于这些统计信息是自启动以来累积的,如果池相对空闲,带宽可能会显得很低。
可以通过指定间隔来请求更准确地查看当前带宽使用情况。例如:
$ zpool iostat system1 2
capacity     operations    bandwidth
pool           alloc   free   read  write   read  write
----------     -----   -----  ----  -----  -----  -----
system1        18.5G  49.5G      0    187      0  23.3M
system1        18.5G  49.5G      0    464      0  57.7M
system1        18.5G  49.5G      0    457      0  56.6M
system1        18.8G  49.2G      0    435      0  51.3M		
		
本例中,该命令每隔两秒显示一次池system1的使用统计信息,直到按Control-C退出。或者指定一个额外的计数参数,当达到指定次数后自动终止。
例如,zpool iostat 2 3表示每个两个显示一次,三次后终止。

列出虚拟设备的I/O统计信息
zpool iostat命令的-v选项可以显示虚拟设备的I/O统计信息。使用此设备可以识别异常缓慢的设备或观察ZFS生成的I/O分布。
以下三个示例的最后两个示例显示了多组配置:
$ zpool iostat -v tank
                            capacity     operations    bandwidth
pool                     alloc   free   read  write   read  write
-----------------------  -----  -----  -----  -----  -----  -----
tank                     2.69G  1.81T      0     29    252  14.2M
  c0t5000C5001032271Bd0  1.34G   927G      0     14    130  7.09M
  c0t5000C50010349387d0  1.34G   927G      0     14    122  7.09M
-----------------------  -----  -----  -----  -----  -----  -----		
		

$ zpool iostat -v tank
                              capacity     operations    bandwidth
pool                       alloc   free   read  write   read  write
-------------------------  -----  -----  -----  -----  -----  -----
tank                        810M  1.81T      0    390    536  32.1M
  mirror-0                  405M   928G      0    194    232  16.1M
    c0t5000C5001032271Bd0      -      -      0     37  1.07K  16.2M
    c0t5000C50010349387d0      -      -      0     38    858  16.1M
  mirror-1                  405M   928G      0    195    304  16.1M
    c0t5000C5001033963Fd0      -      -      0     37  1.14K  16.2M
    c0t5000C5001033024Fd0      -      -      0     38    858  16.2M
-------------------------  -----  -----  -----  -----  -----  -----		
		

$ zpool iostat -v tank
                              capacity     operations    bandwidth
pool                       alloc   free   read  write   read  write
-------------------------  -----  -----  -----  -----  -----  -----
tank                        258M  5.44T      0    321    876  31.5M
  raidz1-0                  128M  2.72T      0    160     29  15.9M
    c0t5000C5001032271Bd0      -      -      0     33  1.40K  8.07M
    c0t5000C50010349387d0      -      -      0     30  1.37K  8.07M
    c0t5000C5001033963Fd0      -      -      0     30  1.37K  8.07M
  raidz1-1                  130M  2.72T      0    160    847  15.5M
    c0t5000C5001033024Fd0      -      -      1     34  2.20K  8.10M
    c0t5000C500103C9817d0      -      -      0     34  1.37K  7.87M
    c0t5000C50010324F67d0      -      -      0     34  1.37K  8.10M
-------------------------  -----  -----  -----  -----  -----  -----		
		
zpool iostat -v命令提供了池配置的每一级的特定信息: 查看虚拟设备的I/O统计信息时应注意两个要点: 查看虚拟设备统计信息时同样可以使用intervalcount
也可以显示有关池虚拟设备的物理位置信息,例如:
$ zpool iostat -lv
               capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
export      2.39T  2.14T     13     27  42.7K   300K
  mirror     490G   438G      2      5  8.53K  60.3K
    /dev/chassis/lab10rack15/SCSI_Device__2/disk      -   -    1    0  4.47K  60.3K
    /dev/chassis/lab10rack15/SCSI_Device__3/disk      -   -    1    0  4.45K  60.3K
  mirror     490G   438G      2      5  8.62K  59.9K
    /dev/chassis/lab10rack15/SCSI_Device__4/disk      -   -    1    0  4.52K  59.9K
    /dev/chassis/lab10rack15/SCSI_Device__5/disk      -   -    1    0  4.48K  59.9K		
		
top
确定ZFS存储池的健康状况
使用zpool status命令可以显示池和设备的健康状况。池的健康状况应该是下列之一: 每个池设备都可以处于以下状态之一: 池的健康状况取决于其所有顶级虚拟设备的健康状况。
处于UNAVAIL或SUSPENDED状态的池完全无法访问。在连接或修复必要的设备之前,无法恢复任何数据。
池处于DRGRADED中状态时可以继续运行,但可能无法达到与池ONLINE时相同级别的数据冗余或数据吞吐量。
zpool status命令也会显示同步或擦洗操作的状态如下:
存储池健康状况
可以使用命令zpool status的下列选项查看存储池的健康状况: 以下示例显示如何生成有关池system1的详细报告:
$ zpool status -v system1
  pool: system1
 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
        system1                    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: URL to My Oracle Support knowledge article for recovery


errors: No known data errors		
		
READWRITE列提供了在设备上发生I/O错误的计数,而CKSUM列则提供了设备上发生不可校正的校验和错误的计数。
这些错误计数都表示需要采取一些纠正措施的潜在设备故障。
如果顶级虚拟设备报告非零错误,则部分数据可能无法访问。

输出结果中标识了问题以及池当前状态的可能原因。输出还包括指向知识文章的链接,以获取有关从问题中恢复的最佳方法的最新信息。
从输出中,可以确定哪个设备损坏以及如何修复池。
收集ZFS存储池状态信息
您可以使用zpool status命令的 intervalcount 选项来收集一段时间内的统计信息。此外,您可以使用–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		
		
top

2021/12/13