借助热备件功能,可以在一个或多个存储池中确定能用来替换发生故障或失败的磁盘。指定一个设备作为热备件意味着该设备不是池中的活动设备,但如果池中的某一活动设备发生故障,热备件将自动替换该故障设备。
可通过以下方式将设备指定为热备件:
使用 zpool create 命令创建池时。
使用 zpool add 命令创建池之后。
# zpool create trinity mirror c1t1d0 c2t1d0 spare c1t2d0 c2t2d0
# zpool status trinity
pool: trinity
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
trinity ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
spares
c1t2d0 AVAIL
c2t2d0 AVAIL
errors: No known data errors
|
以下示例说明创建池之后如何通过向池中添加设备来指定热备件:
# zpool add neo spare c5t3d0 c6t3d0
# zpool status neo
pool: neo
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
neo ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c3t3d0 ONLINE 0 0 0
c4t3d0 ONLINE 0 0 0
spares
c5t3d0 AVAIL
c6t3d0 AVAIL
errors: No known data errors
|
可使用 zpool remove 命令从存储池中删除热备件。例如:
# zpool remove zeepool c2t3d0
# 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
c1t1d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
spares
c1t3d0 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,则在插入新设备并完成联机操作后,该备件会自动分离并回到备件池。
通过 zpool replace 命令可以用热备件手动替换设备。请参见示例 4–8。
如果热备件可用,将自动替换故障设备。例如:
# zpool status -x
pool: zeepool
state: DEGRADED
status: One or more devices could not be opened. 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
scrub: resilver completed after 0h0m with 0 errors on Mon Jan 11 10:20:35 2010
config:
NAME STATE READ WRITE CKSUM
zeepool DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
c1t2d0 ONLINE 0 0 0
spare-1 DEGRADED 0 0 0
c2t1d0 UNAVAIL 0 0 0 cannot open
c2t3d0 ONLINE 0 0 0 88.5K resilvered
spares
c2t3d0 INUSE currently in use
errors: No known data errors
|
目前,取消激活热备件的方法有以下几种:
本例使用 zpool replace 命令将磁盘 c2t1d0 替换为热备件 c2t3d0。
# zpool replace zeepool c2t1d0 c2t3d0
# zpool status zeepool
pool: zeepool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 10:00:50 2010
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
spare-1 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
c2t3d0 ONLINE 0 0 0 90K resilvered
spares
c2t3d0 INUSE currently in use
errors: No known data errors
|
然后分离磁盘 c2t1d0。
# zpool detach zeepool c2t1d0
# zpool status zeepool
pool: zeepool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 10:00:50 2010
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
c2t3d0 ONLINE 0 0 0 90K resilvered
errors: No known data errors
|
本例使用 zpool replace 命令物理替换磁盘 (c2t1d0) 并通知 ZFS。
# zpool replace zeepool c2t1d0
# zpool status zeepool
pool: zeepool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 10:08:44 2010
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
spare-1 ONLINE 0 0 0
c2t3d0 ONLINE 0 0 0 90K resilvered
c2t1d0 ONLINE 0 0 0
spares
c2t3d0 INUSE currently in use
errors: No known data errors
|
然后,您可以使用 zpool detach 命令使热备件回到备件池。例如:
# zpool detach zeepool c2t3d0
# zpool status zeepool
pool: zeepool
state: ONLINE
scrub: resilver completed with 0 errors on Wed Jan 20 10:08:44 2010
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
spares
c2t3d0 AVAIL
errors: No known data errors
|
如果想临时或永久性换入用于替换的热备件,以此替换故障磁盘,则应分离原(故障)磁盘。故障磁盘完成替换后,可以将其再添加到存储池用作备件。例如:
# zpool status zeepool
pool: zeepool
state: DEGRADED
status: One or more devices could not be opened. 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
scrub: resilver in progress for 0h0m, 70.47% done, 0h0m to go
config:
NAME STATE READ WRITE CKSUM
zeepool DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
c1t2d0 ONLINE 0 0 0
spare-1 DEGRADED 0 0 0
c2t1d0 UNAVAIL 0 0 0 cannot open
c2t3d0 ONLINE 0 0 0 70.5M resilvered
spares
c2t3d0 INUSE currently in use
errors: No known data errors
# zpool detach zeepool c2t1d0
# zpool status zeepool
pool: zeepool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 13:46:46 2010
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
c2t3d0 ONLINE 0 0 0 70.5M resilvered
errors: No known data errors
(Original failed disk c2t1d0 is physically replaced)
# zpool add zeepool spare c2t1d0
# zpool status zeepool
pool: zeepool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 13:48:46 2010
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
c2t3d0 ONLINE 0 0 0 70.5M resilvered
spares
c2t1d0 AVAIL
errors: No known data errors
|