跳过导航链接 | |
退出打印视图 | |
Oracle Solaris ZFS 管理指南 Oracle Solaris 10 1/13 Information Library (简体中文) |
1. Oracle Solaris ZFS 文件系统(介绍)
4. 安装和引导 Oracle Solaris ZFS 根文件系统
6. 使用 Oracle Solaris ZFS 快照和克隆
7. 使用 ACL 和属性保护 Oracle Solaris 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
此命令语法会将镜像设备 c3t1d0 和 c3t2d0 添加到 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 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
通过使用 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 功能之前,请检查以下几点:
对于 RAID-Z 配置或者由多个磁盘组成的非冗余池,此功能不可用。
尝试 zpool split 操作之前,数据和应用程序操作应停顿。
如果重新同步正在进行中,则无法分割池。
分割由两到三个磁盘组成的镜像池是最佳的,其中原池中的最后一个磁盘将用于新创建的池。然后,可以使用 zpool attach 命令重新创建原镜像存储池,或者将新创建的池转换为镜像存储池。目前无法通过一个 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
使设备脱机时,请考虑以下几点:
不能将池脱机到它成为 UNAVAIL 的点。例如,不能使 raidz1 配置中的两个设备脱机,也不能使顶层虚拟设备脱机。
# zpool offline tank c0t5000C500335F95E3d0 cannot offline c0t5000C500335F95E3d0: no valid replicas
缺省情况下,OFFLINE 状态是持久性的。重新引导系统时,设备会一直处于脱机状态。
要暂时使设备脱机,请使用 zpool offline -t 选项。例如:
# zpool offline -t tank c1t0d0
重新引导系统时,此设备会自动恢复到 ONLINE 状态。
当设备脱机时,它不会从存储池中分离出来。如果尝试使用其他池中的脱机设备,那么即使在销毁原始池之后,也会显示类似于以下内容的消息:
device is part of exported or potentially active ZFS pool. Please see zpool(1M)
如果要在销毁原始存储池之后使用其他存储池中的脱机设备,请先使该设备恢复联机,然后销毁原始存储池。
要在保留原存储池的同时使用其他存储池中的设备,还有一种方法是用另一个类似的设备替换原存储池中的现有设备。有关替换设备的信息,请参见替换存储池中的设备。
查询池的状态时,已脱机的设备以 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 根池或根池快照。
下面是替换磁盘的基本步骤:
使用 zpool offline 命令使磁盘脱机(如有必要)。
移除要替换的磁盘。
插入替换磁盘。
查看 format 输出,确定替换磁盘是否可见。
另外,检查设备 ID 是否已更改。如果替换磁盘具有 WWN,则故障磁盘的设备 ID 已更改。
使 ZFS 分辨出磁盘已替换。例如:
# zpool replace tank c1t1d0
如果替换磁盘具有不同的设备 ID,如以上所示,请包含该新的设备 ID。
# zpool replace tank c0t5000C500335FC3E7d0 c0t5000C500335BA8C3d0
如有必要,使用 zpool online 命令使磁盘联机。
让 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 存储池中的设备时,请考虑以下几点:
如果将池属性 autoreplace 设置为 on,则会自动对在先前属于该池的设备的同一物理位置处找到的任何新设备进行格式化和替换。启用此属性时,无需使用 zpool replace 命令。此功能可能并不是在所有硬件类型上都可用。
如果在系统运行期间设备或热备件被物理移除,则会提供存储池状态 REMOVED。热备用设备(如果有)会替换移除的设备。
如果设备被移除后又重新插入,该设备将联机。如果重新插入设备时热备件处于激活状态,则热备件将在联机操作完成时被移除。
在移除或插入设备时自动检测依赖于硬件,而且并非在所有平台上都受支持。例如,USB 设备会在插入时自动进行配置。但是,您可能必须使用 cfgadm -c configure 命令来配置 SATA 驱动器。
系统会定期检查热备件,以确保它们处于联机状态并可供使用。
替换设备的大小必须等于或大于镜像或 RAID-Z 配置中最小磁盘的大小。
将大小大于要替换设备的替换设备添加到池中后,它不会自动扩展到完整大小。autoexpand 池属性的值决定向池添加了大型磁盘后池是否会扩展。缺省情况下,autoexpand 属性禁用。您可以在较大的磁盘添加到池中之前或之后,启用此属性以扩展池的大小。
在以下示例中,两个 72-GB 磁盘替换镜像池中的两个 16-GB 磁盘。确保第一个设备完全重新同步,然后再尝试替换第二个设备。磁盘替换后,启用 autoexpand 属性以扩展到完整的磁盘大小。
# zpool create pool mirror c1t16d0 c1t17d0 # zpool status pool: pool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM pool ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t16d0 ONLINE 0 0 0 c1t17d0 ONLINE 0 0 0 zpool list pool NAME SIZE ALLOC FREE CAP HEALTH ALTROOT pool 16.8G 76.5K 16.7G 0% ONLINE - # zpool replace pool c1t16d0 c1t1d0 # zpool replace pool c1t17d0 c1t2d0 # zpool list pool NAME SIZE ALLOC FREE CAP HEALTH ALTROOT pool 16.8G 88.5K 16.7G 0% ONLINE - # zpool set autoexpand=on pool # zpool list pool NAME SIZE ALLOC FREE CAP HEALTH ALTROOT pool 68.2G 117K 68.2G 0% ONLINE -
替换较大池中的多个磁盘需要较长时间,这是因为需要将数据重新同步到新磁盘。此外,还可以考虑在两次磁盘替换操作之间运行 zpool scrub 命令,以确保可供替换的设备可以正常运行,并且正确写入数据。
如果已使用热备件自动替换了故障磁盘,则您可能需要在替换故障磁盘后分离该热备件。可以使用 zpool detach 命令从镜像池或 RAID-Z 池中分离备件。有关分离热备件的信息,请参见在存储池中激活和取消激活热备件。
有关更换设备的更多信息,请参见解决缺少设备或设备被移除的问题和更换或修复损坏的设备。
借助热备件功能,您可以确定哪些磁盘可用来替换存储池中已发生故障或失败的磁盘。指定一个设备作为热备件意味着该设备不是池中的活动设备,但如果池中的某一活动设备发生故障,热备件将自动替换该故障设备。
可通过以下方式将设备指定为热备件:
使用 zpool create 命令创建池时。
使用 zpool add 命令创建池之后。
# 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 热备件时,请考虑以下几点:
目前,zpool remove 命令只能用来删除热备件、高速缓存设备和日志设备。
要添加磁盘作为热备件,热备件的大小必须等于或大于池中最大磁盘的大小。允许向池中添加更小的磁盘作为备件。但是,当自动激活或使用 zpool replace 命令激活较小的备用磁盘时,操作将失败,并显示类似以下内容的错误:
cannot replace disk3 with disk4: device is too small
可通过以下方式激活热备件:
手动替换-通过 zpool replace 命令用热备件替换存储池中的故障设备。
自动替换-检测到故障后,FMA 代理将检查池中是否有任何可用的热备件。如果有,将使用可用备件替换故障设备。
如果当前正在使用的热备件发生故障,FMA 代理将分离该备件,从而取消替换。然后,代理将尝试用另一个热备件(如果有)替换该设备。目前,由于 ZFS 诊断引擎仅在设备从系统中消失时才会产生故障信息,因此此功能受到限制。
如果将故障设备物理替换为活动备件,则可以使用 zpool detach 命令分离该备件,从而重新激活原设备。如果将 autoreplace 池属性设置为 on,则在插入新设备并完成联机操作后,该备件会自动分离并回到备件池。
如果热备件可用,将自动替换 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