可以使用 zpool replace 命令替换存储池中的设备。
如果使用冗余池中同一位置的另一设备以物理方式替换某一设备,则可能只需标识被替换的设备。在某些硬件上,ZFS 会认为该设备是同一位置的不同磁盘。例如,要移除出现故障的磁盘 (c1t1d0) 并在同一位置替换该磁盘,请使用以下语法:
# zpool replace tank c1t1d0
如果要使用位于不同物理位置的磁盘替换存储池中的设备,必须同时指定两个设备。例如:
# zpool replace tank c1t1d0 c1t2d0
如果要替换 ZFS 根池中的磁盘,请参见如何替换 ZFS 根池中的磁盘(SPARC 或 x86/VTOC)。
下面是替换磁盘的基本步骤:
使用 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 磁盘的示例,请参见Example 10–1。
替换 ZFS 存储池中的设备时,请注意以下几点:
如果将池属性 autoreplace 设置为 on,则会自动对在先前属于该池的设备的同一物理位置处找到的任何新设备进行格式化和替换。启用此属性时,无需使用 zpool replace 命令。此功能可能并不是在所有硬件类型上都可用。
如果在系统运行期间设备或热备件被物理移除,则会提供存储池状态 REMOVED。热备用设备(如果有)会替换移除的设备。
如果设备被移除后又重新插入,该设备将联机。如果重新插入设备时热备件处于激活状态,则热备件将在联机操作完成时被移除。
在移除或插入设备时自动检测依赖于硬件,而且并非在所有平台上都受支持。例如,USB 设备会在插入时自动进行配置。但是,您可能必须使用 cfgadm –c configure 命令来配置 SATA 驱动器。
系统会定期检查热备件,以确保它们处于联机状态并可供使用。
替换设备的大小必须等于或大于镜像或 RAID-Z 配置中最小磁盘的大小。
将大小大于要替换设备的替换设备添加到池中后,它不会自动扩展到完整大小。池属性 autoexpand 的值决定当磁盘添加到池中时,是否将替换 LUN 扩展到其完整大小。缺省情况下,autoexpand 属性禁用。您可以在将较大的 LUN 添加到池中之前或之后,启用此属性以扩展 LUN 大小。
在以下示例中,两个 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 池中分离备件。有关分离热备件的信息,请参见在存储池中激活和取消激活热备件。
有关替换设备的更多信息,请参见解决缺少设备或设备被移除的问题和更换或修复损坏的设备。