可以使用 zpool replace 命令替换存储池中的设备。
如果使用冗余池中同一位置的另一设备以物理方式替换某一设备,则可能只需标识被替换的设备。ZFS 会意识到该设备是某一硬件上同一位置的不同磁盘。例如,要通过删除磁盘并在同一位置替换该磁盘来替换出现故障的磁盘 (c1t1d0),请使用以下语法:
# zpool replace tank c1t1d0 |
如果用位于不同物理位置的磁盘替换存储池中的设备,则需要指定两个设备。例如:
# zpool replace tank c1t1d0 c1t2d0 |
如果要替换 ZFS 根池中的磁盘,请参见如何替换 ZFS 根池中的磁盘。
下面是替换磁盘的基本步骤:
使用 zpool offline 命令使磁盘脱机(如有必要)。
移除要替换的磁盘。
插入替换磁盘。
运行 zpool replace 命令。例如:
# zpool replace tank c1t1d0 |
使用 zpool online 命令使磁盘联机。
在某些系统(如 Sun Fire x4500)上,必须先取消磁盘配置,才能使其脱机。如果在该系统的同一插槽位置替换磁盘,则可以仅执行 zpool replace 命令,如本节的第一个示例所示。
有关在 Sun Fire X4500 系统上替换磁盘的示例,请参见示例 11–1。
替换 ZFS 存储池中的设备时,请考虑以下几点:
如果将池属性 autoreplace 设置为 on,则会自动对在先前属于该池的设备的同一物理位置处找到的任何新设备进行格式化和替换。启用此属性时,你无需使用 zpool replace 命令。此功能可能并不是在所有硬件类型上都可用。
替换设备的大小必须等于或大于镜像或 RAID-Z 配置中最小磁盘的大小。
将大小大于要替换设备的替换设备添加到池中后,它不会自动扩展到完整大小。池属性 autoexpand 的值决定当磁盘添加到池中时,是否将替换 LUN 扩展到其完整大小。缺省情况下,autoexpand 属性禁用。您可以在较大的 LUN 添加到池中之前或之后,启用此属性以扩展 LUN 大小。
在以下示例中,两个 72-GB 磁盘替换镜像池中的两个 16-GB 磁盘。磁盘替换后,启用 autoexpand 属性以扩展到完整 LUN 大小。
# 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 命令,以确保可供替换的设备可以正常运行,并且正确写入数据。
如果已使用热备件自动替换了故障磁盘,则您可能需要在替换故障磁盘后分离该热备件。有关分离热备件的信息,请参见在存储池中激活和取消激活热备件。
有关更换设备的更多信息,请参见解决缺少设备的问题和更换或修复损坏的设备。