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 存储池中的设备

ZFS 存储池的组件中介绍了有关设备的大多数基本信息。创建池后,即可执行几项任务来管理池中的物理设备。

向存储池中添加设备

通过添加新的顶层虚拟设备,可以向池中动态添加磁盘空间。此磁盘空间立即可供池中的所有数据集使用。要向池中添加新虚拟设备,请使用 zpool add 命令。例如:

# zpool add zeepool mirror c2t1d0 c2t2d0

用于指定虚拟设备的格式与 zpool create 命令中使用的虚拟设备格式相同。将对设备进行检查以确定是否正在使用这些设备,此命令在不使用 -f 选项的情况下无法更改冗余级别。此命令还支持 -n 选项,以便可以执行预运行。例如:

# zpool add -n zeepool mirror c3t1d0 c3t2d0
would update 'zeepool' to the following configuration:
      zeepool
        mirror
            c1t0d0
            c1t1d0
        mirror
            c2t1d0
            c2t2d0
        mirror
            c3t1d0
            c3t2d0

此命令语法会将镜像设备 c3t1d0c3t2d0 添加到 zeepool 池的现有配置中。

有关如何执行虚拟设备验证的更多信息,请参见检测使用中的设备

示例 3-1 向镜像 ZFS 配置中添加磁盘

在以下示例中,向现有的镜像 ZFS 配置添加了另一个镜像。

# zpool status tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        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

errors: No known data errors
# zpool add tank mirror c0t3d0 c1t3d0
# zpool status tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        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

示例 3-2 向 RAID-Z 配置中添加磁盘

可按类似方式向 RAID-Z 配置中添加其他磁盘。以下示例说明如何将包含一个 RAID-Z 设备(含 3 个磁盘)的存储池转换为包含两个 RAID-Z 设备(各含 3 个磁盘)的存储池。

# zpool status rzpool
  pool: rzpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rzpool      ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0
            c1t4d0  ONLINE       0     0     0

errors: No known data errors
# zpool add rzpool raidz c2t2d0 c2t3d0 c2t4d0
# zpool status rzpool
  pool: rzpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rzpool      ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0
          raidz1-1  ONLINE       0     0     0
            c2t2d0  ONLINE       0     0     0
            c2t3d0  ONLINE       0     0     0
            c2t4d0  ONLINE       0     0     0

errors: No known data errors

示例 3-3 添加和删除镜像日志设备

以下示例展示了如何将镜像日志设备添加到镜像存储池。

# zpool status newpool
  pool: newpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        newpool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t4d0  ONLINE       0     0     0
            c0t5d0  ONLINE       0     0     0

errors: No known data errors
# zpool add newpool log mirror c0t6d0 c0t7d0
# zpool status newpool
  pool: newpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        newpool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t4d0  ONLINE       0     0     0
            c0t5d0  ONLINE       0     0     0
        logs
          mirror-1  ONLINE       0     0     0
            c0t6d0  ONLINE       0     0     0
            c0t7d0  ONLINE       0     0     0

errors: No known data errors

可以将日志设备附加到现有日志设备,以创建镜像日志设备。此操作等同于在未镜像的存储池中附加设备。

您可以使用 zpool remove 命令移除日志设备。通过指定 mirror-1 参数,可以删除上例中的镜像日志设备。例如:

# zpool remove newpool mirror-1
# zpool status newpool
  pool: newpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        newpool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t4d0  ONLINE       0     0     0
            c0t5d0  ONLINE       0     0     0

errors: No known data errors

如果池配置仅包含一个日志设备,应通过指定设备名称的方式移除该日志设备。例如:

# zpool status pool
  pool: pool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        pool        ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            c0t8d0  ONLINE       0     0     0
            c0t9d0  ONLINE       0     0     0
        logs
          c0t10d0   ONLINE       0     0     0

errors: No known data errors
# zpool remove pool c0t10d0

示例 3-4 添加和删除高速缓存设备

可以向 ZFS 存储池中添加高速缓存设备,不再需要时可以删除。

可使用 zpool add 命令添加高速缓存设备。例如:

# zpool add tank cache c2t5d0 c2t8d0
# zpool status tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c2t0d0  ONLINE       0     0     0
            c2t1d0  ONLINE       0     0     0
            c2t3d0  ONLINE       0     0     0
        cache
          c2t5d0    ONLINE       0     0     0
          c2t8d0    ONLINE       0     0     0

errors: No known data errors

高速缓存设备不能镜像或成为 RAID-Z 配置的一部分。

可使用 zpool remove 命令删除高速缓存设备。例如:

# zpool remove tank c2t5d0 c2t8d0
# zpool status tank
 pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c2t0d0  ONLINE       0     0     0
            c2t1d0  ONLINE       0     0     0
            c2t3d0  ONLINE       0     0     0

errors: No known data errors

目前,zpool remove 命令仅支持删除热备件、日志设备和高速缓存设备。可以使用 zpool detach 命令删除属于主镜像池配置的设备。非冗余设备和 RAID-Z 设备无法从池中删除。

有关在 ZFS 存储池中使用高速缓存设备的更多信息,请参见使用高速缓存设备创建 ZFS 存储池

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

除了 zpool add 命令外,还可以使用 zpool attach 命令将新设备添加到现有镜像设备或非镜像设备中。

如果要附加磁盘以创建镜像根池,请参见如何创建镜像 ZFS 根池(安装后)

如果要替换 ZFS 根池中的磁盘,请参见恢复 ZFS 根池或根池快照

示例 3-5 将双向镜像存储池转换为三向镜像存储池

在本示例中,zeepool 是现有的双向镜像,通过将新设备 c2t1d0 附加到现有设备 c1t1d0 可将其转换为三向镜像。

# zpool status zeepool
  pool: zeepool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zeepool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t1d0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0

errors: No known data errors
# zpool attach zeepool c1t1d0 c2t1d0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Fri Jan  8 12:59:20 2010
config:

        NAME        STATE     READ WRITE CKSUM
        zeepool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t1d0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c2t1d0  ONLINE       0     0     0  592K resilvered

errors: No known data errors

如果现有设备是三向镜像的一部分,则附加新设备将创建四向镜像,依此类推。在任一情况下,新设备都会立即开始重新同步。

示例 3-6 将非冗余 ZFS 存储池转换为镜像 ZFS 存储池

此外,还可以通过使用 zpool attach 命令将非冗余存储池转换为冗余存储池。例如:

# zpool create tank c0t1d0
# zpool status tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:
        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          c0t1d0    ONLINE       0     0     0

errors: No known data errors
# zpool attach tank c0t1d0 c1t1d0
# zpool status tank
  pool: tank
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Fri Jan  8 14:28:23 2010
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t1d0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0  73.5K resilvered

errors: No known data errors

可以使用 zpool detach 命令从镜像存储池中分离设备。例如:

# zpool detach zeepool c2t1d0

但是,如果不存在该数据的其他有效副本,此操作将失败。例如:

# zpool detach newpool c1t2d0
cannot detach c1t2d0: only applicable to mirror and replacing vdevs

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

通过使用 zpool split 命令,可以将镜像 ZFS 存储池快速克隆为备份池。您可以使用此功能分隔镜像根池,但是分隔出来的池不可引导,除非另外执行其他步骤。

可以使用 zpool split 命令从镜像 ZFS 存储池中分离一个或多个磁盘,以使用分离的磁盘创建新池。新池的内容与原镜像 ZFS 存储池完全相同。

缺省情况下,对镜像池执行 zpool split 操作将分离最后一个磁盘以用于新创建的池。分割操作完成后,导入新池。例如:

# zpool status tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0

errors: No known data errors
# zpool split tank tank2
# zpool import tank2
# zpool status tank tank2
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          c1t0d0    ONLINE       0     0     0

errors: No known data errors

  pool: tank2
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank2       ONLINE       0     0     0
          c1t2d0    ONLINE       0     0     0

errors: No known data errors

通过在 zpool split 命令中指定,您可以标识哪个磁盘应用于新创建的池。例如:

# zpool split tank tank2 c1t0d0

发生实际的分割操作之前,内存中的数据被刷新到镜像磁盘。数据刷新后,将磁盘从池中分离,并将其指定给一个新池 GUID。新池 GUID 即产生,以便能在分割该池的系统上导入该池。

如果要拆分的池具有非缺省的文件系统挂载点,并且已在同一系统上创建了新池,必须使用 zpool split -R 选项标识新池的备用根目录,使现有挂载点不会发生冲突。例如:

# zpool split -R /tank2 tank tank2

如果不使用 zpool split -R 选项,当您试图使用 -R 选项导入新池时,挂载点会发生冲突。如果在不同的系统上创建新池,则没必要指定备用根目录,除非发生挂载点冲突。

使用 zpool split 功能之前,请检查以下几点:

示例 3-7 分割镜像 ZFS 存储池 (zpool split)

在以下示例中,对名为 mothership 的镜像存储池(包含三个磁盘)进行分割。分割产生了两个池,即,镜像池 mothership(包含两个磁盘)和新池 luna(包含一个磁盘)。每个池的内容完全相同。

可以将池 luna 导入另一个系统中以进行备份。备份完成后,可以将池 luna 销毁,并将其磁盘重新附加到 mothership。然后,可以重复执行这一过程。

# zpool status mothership
  pool: mothership
 state: ONLINE
  scan: none requested
config:

        NAME                       STATE     READ WRITE CKSUM
        mothership                 ONLINE       0     0     0
          mirror-0                 ONLINE       0     0     0
            c0t5000C500335F95E3d0  ONLINE       0     0     0
            c0t5000C500335BD117d0  ONLINE       0     0     0
            c0t5000C500335F907Fd0  ONLINE       0     0     0

errors: No known data errors
# zpool split mothership luna
# zpool import luna 
# zpool status mothership luna
  pool: luna
 state: ONLINE
  scan: none requested
config:

        NAME                     STATE     READ WRITE CKSUM
        luna                     ONLINE       0     0     0
          c0t5000C500335F907Fd0  ONLINE       0     0     0

errors: No known data errors

  pool: mothership
 state: ONLINE
  scan: none requested
config:

        NAME                       STATE     READ WRITE CKSUM
        mothership                 ONLINE       0     0     0
          mirror-0                 ONLINE       0     0     0
            c0t5000C500335F95E3d0  ONLINE       0     0     0
            c0t5000C500335BD117d0  ONLINE       0     0     0

errors: No known data errors

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

使用 ZFS 可使单个设备脱机或联机。硬件不可靠或无法正常工作时(假定该情况只是暂时的),ZFS 会继续对设备读写数据。如果该情况不是暂时的,您可以指示 ZFS 通过使设备脱机来忽略该设备。ZFS 不会向已脱机的设备发送任何请求。


注 - 设备无需脱机即可进行替换。


使设备脱机

可以使用 zpool offline 命令使设备脱机。如果设备是磁盘,则可以使用路径或短名称指定设备。例如:

# zpool offline tank c0t5000C500335F95E3d0

使设备脱机时,请考虑以下几点:

查询池的状态时,已脱机的设备以 OFFLINE 状态显示。有关查询池的状态的信息,请参见查询 ZFS 存储池的状态

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

使设备联机

使设备脱机后,可以使用 zpool online 命令使其恢复联机。例如:

# zpool online tank c0t5000C500335F95E3d0

使设备联机时,已写入池中的任何数据都将与最新可用的设备重新同步。请注意,不能通过使设备联机来替换磁盘。如果使设备脱机,然后替换该设备并尝试使其联机,则设备将一直处于 UNAVAIL 状态。

如果尝试使 UNAVAIL 设备联机,则会显示类似于以下内容的消息:

# zpool online tank c1t0d0
warning: device 'c1t0d0' onlined, but remains in faulted state
use 'zpool replace' to replace devices that are no longer present

您还可能会看到故障磁盘消息显示在控制台上,或者写入 /var/adm/messages 文件中。例如:

SUNW-MSG-ID: ZFS-8000-D3, TYPE: Fault, VER: 1, SEVERITY: Major
EVENT-TIME: Wed Jun 20 11:35:26 MDT 2012
PLATFORM: SUNW,Sun-Fire-880, CSN: -, HOSTNAME: neo
SOURCE: zfs-diagnosis, REV: 1.0
EVENT-ID: 504a1188-b270-4ab0-af4e-8a77680576b8
DESC: A ZFS device failed.  Refer to http://sun.com/msg/ZFS-8000-D3 for more information.
AUTO-RESPONSE: No automated response will occur.
IMPACT: Fault tolerance of the pool may be compromised.
REC-ACTION: Run 'zpool status -x' and replace the bad device.

有关更换故障设备的更多信息,请参见解决缺少设备或设备被移除的问题

如果向池附加了较大的磁盘或使用较大磁盘替换了较小磁盘,可以使用 zpool online -e 命令扩展池的大小。缺省情况下,添加至池中的磁盘不会扩展到其完整大小,除非启用了 autoexpand 池属性。使用 zpool online -e 命令可以自动扩展池,即使替换磁盘已经联机或者磁盘目前脱机。例如:

# zpool online -e tank c0t5000C500335F95E3d0

清除存储池设备错误

如果设备因出现故障(导致在 zpool status 输出中列出错误)而脱机,则可以使用 zpool clear 命令清除错误计数。

如果不指定任何参数,则此命令将清除池中的所有设备错误。例如:

# zpool clear tank

如果指定了一个或多个设备,则此命令仅清除与指定设备关联的错误。例如:

# zpool clear tank c0t5000C500335F95E3d0

有关清除 zpool 错误的更多信息,请参见清除瞬态设备错误

替换存储池中的设备

可以使用 zpool replace 命令替换存储池中的设备。

如果使用冗余池中同一位置的另一设备以物理方式替换某一设备,则可能只需标识被替换的设备。在某些硬件上,ZFS 会认为该设备是同一位置的不同磁盘。例如,要通过删除磁盘并在同一位置替换该磁盘来替换出现故障的磁盘 (c1t1d0),请使用以下语法:

# zpool replace tank c1t1d0

如果要使用位于不同物理位置的磁盘替换存储池中的设备,必须同时指定两个设备。例如:

# zpool replace tank c1t1d0 c1t2d0

如果要替换 ZFS 根池中的磁盘,请参见恢复 ZFS 根池或根池快照

下面是替换磁盘的基本步骤:

  1. 使用 zpool offline 命令使磁盘脱机(如有必要)。

  2. 移除要替换的磁盘。

  3. 插入替换磁盘。

  4. 查看 format 输出,确定替换磁盘是否可见。

    另外,检查设备 ID 是否已更改。如果替换磁盘具有 WWN,则故障磁盘的设备 ID 已更改。

  5. 使 ZFS 分辨出磁盘已替换。例如:

    # zpool replace tank c1t1d0

    如果替换磁盘具有不同的设备 ID,如以上所示,请包含该新的设备 ID。

    # zpool replace tank c0t5000C500335FC3E7d0 c0t5000C500335BA8C3d0
  6. 如有必要,使用 zpool online 命令使磁盘联机。

  7. 让 FMA 知道设备已被替换。

    fmadm faulty 输出的 Affects: 部分中找到 zfs://pool=name/vdev=guid 字符串,并将该字符串作为参数提供给 fmadm repaired 命令。

    # fmadm faulty
    # fmadm repaired zfs://pool=name/vdev=guid

在具有 SATA 磁盘的某些系统上,必须先取消配置磁盘才能使其脱机。如果在该系统的同一插槽位置替换磁盘,则可以仅执行 zpool replace 命令,如本节的第一个示例所示。

有关替换 SATA 磁盘的示例,请参见示例 10-1

替换 ZFS 存储池中的设备时,请考虑以下几点:

有关更换设备的更多信息,请参见解决缺少设备或设备被移除的问题更换或修复损坏的设备

在存储池中指定热备件

借助热备件功能,您可以确定哪些磁盘可用来替换存储池中已发生故障或失败的磁盘。指定一个设备作为热备件意味着该设备不是池中的活动设备,但如果池中的某一活动设备发生故障,热备件将自动替换该故障设备。

可通过以下方式将设备指定为热备件:

以下示例说明创建池时如何将设备指定为热备件:

# zpool create zeepool mirror c0t5000C500335F95E3d0 c0t5000C500335F907Fd0 
mirror c0t5000C500335BD117d0 c0t5000C500335DC60Fd0 spare c0t5000C500335E106Bd0 c0t5000C500335FC3E7d0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
  scan: none requested
config:

        NAME                       STATE     READ WRITE CKSUM
        zeepool                    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
        spares
          c0t5000C500335E106Bd0    AVAIL   
          c0t5000C500335FC3E7d0    AVAIL   

errors: No known data errors

以下示例说明创建池之后如何通过向池中添加设备来指定热备件:

# zpool add zeepool spare c0t5000C500335E106Bd0 c0t5000C500335FC3E7d0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
  scan: none requested
config:

        NAME                       STATE     READ WRITE CKSUM
        zeepool                    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
        spares
          c0t5000C500335E106Bd0    AVAIL   
          c0t5000C500335FC3E7d0    AVAIL   

errors: No known data errors

可使用 zpool remove 命令从存储池中删除热备件。例如:

# zpool remove zeepool c0t5000C500335FC3E7d0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
  scan: none requested
config:

        NAME                       STATE     READ WRITE CKSUM
        zeepool                    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
        spares
          c0t5000C500335E106Bd0    AVAIL   

errors: No known data errors

如果存储池当前正在使用热备件,则不能将其删除。

使用 ZFS 热备件时,请考虑以下几点:

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

可通过以下方式激活热备件:

如果热备件可用,将自动替换 UNAVAIL 设备。例如:

# zpool status -x
  pool: zeepool
 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: Attach the missing device and online it using 'zpool online'.
   see: http://www.sun.com/msg/ZFS-8000-2Q
  scan: resilvered 3.15G in 0h0m with 0 errors on Mon Nov 12 15:53:42 2012
config:

        NAME                         STATE     READ WRITE CKSUM
        zeepool                      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
            spare-1                  DEGRADED   449     0     0
              c0t5000C500335DC60Fd0  UNAVAIL      0     0     0
              c0t5000C500335E106Bd0  ONLINE       0     0     0
        spares
          c0t5000C500335E106Bd0      INUSE   

errors: No known data errors

目前,取消激活热备件的方法有以下几种:

示例 3-8 替换故障磁盘后分离热备件

在本示例中,物理替换了故障磁盘 (c0t5000C500335DC60Fd0) 并使用 zpool replace 命令通知 ZFS。

# zpool replace zeepool c0t5000C500335DC60Fd0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
  scan: resilvered 3.15G in 0h0m with 0 errors on Thu Jun 21 16:53:43 2012
config:

        NAME                       STATE     READ WRITE CKSUM
        zeepool                    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
        spares
          c0t5000C500335E106Bd0    AVAIL   

如有必要,您可以使用 zpool detach 命令使热备件回到备件池。例如:

# zpool detach zeepool c0t5000C500335E106Bd0

示例 3-9 分离故障磁盘并使用热备件

如果您想临时或永久性地换入当前正在替换故障磁盘的热备件以替换磁盘,请分离原(故障)磁盘。故障磁盘完成替换后,可以将其再添加到存储池用作备件。例如:

# zpool status zeepool
  pool: zeepool
 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: Attach the missing device and online it using 'zpool online'.
   see: http://www.sun.com/msg/ZFS-8000-2Q
  scan: resilver in progress since Mon Nov 12 16:04:12 2012
     4.80G scanned out of 12.0G at 55.8M/s, 0h2m to go
     4.80G scanned out of 12.0G at 55.8M/s, 0h2m to go
     4.77G resilvered, 39.97% done
config:

        NAME                       STATE     READ WRITE CKSUM
        zeepool                    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
        spares
          c0t5000C500335E106Bd0    AVAIL   

errors: No known data errors
# zpool detach zeepool c0t5000C500335DC60Fd0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
  scan: resilvered 11.3G in 0h3m with 0 errors on Mon Nov 12 16:07:12 2012
config:

        NAME                       STATE     READ WRITE CKSUM
        zeepool                    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
            c0t5000C500335E106Bd0  ONLINE       0     0     0

errors: No known data errors
(Original failed disk c0t5000C500335DC60Fd0 is physically replaced)
# zpool add zeepool spare c0t5000C500335DC60Fd0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
  scan: resilvered 11.2G in 0h3m with 0 errors on Mon Nov 12 16:07:12 2012

config:

        NAME                       STATE     READ WRITE CKSUM
        zeepool                    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
            c0t5000C500335E106Bd0  ONLINE       0     0     0
        spares
          c0t5000C500335DC60Fd0    AVAIL   

errors: No known data errors

在替换磁盘并分离备件后,通知 FMA 磁盘已修复。

# fmadm faulty
# fmadm repaired zfs://pool=name/vdev=guid