Home‎ > ‎Server config‎ > ‎

ZFS Hotspare management and disk replacement

Designating Hot Spares in Your Storage Pool

The hot spares feature enables you to identify disks that could be used to replace a failed or faulted device in one or more storage pools. Designating a device as a hot spare means that the device is not an active device in a pool, but if an active device in the pool fails, the hot spare automatically replaces the failed device.

Devices can be designated as hot spares in the following ways:

  • When the pool is created with the zpool create command

  • After the pool is created with the zpool add command

  • Hot spare devices can be shared between multiple pools, but spares cannot be shared between multiple pools on different systems

Designate devices as hot spares when the pool is created. For example:


# zpool create trinity mirror c1t1d0 c2t1d0 spare c1t2d0 c2t2d0# zpool status trinity  pool: trinity state: ONLINE scrub: none requestedconfig:        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

Designate hot spares by adding them to a pool after the pool is created. For example:


# zpool add neo spare c5t3d0 c6t3d0# zpool status neo  pool: neo state: ONLINE scrub: none requestedconfig:        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

Multiple pools can share devices that are designated as hot spares. For example:


# zpool create zeepool mirror c1t1d0 c2t1d0 spare c1t2d0 c2t2d0# zpool create tank raidz c3t1d0 c4t1d0 spare c1t2d0 c2t2d0

Hot spares can be removed from a storage pool by using the zpool remove command. For example:


# zpool remove zeepool c2t3d0# zpool status zeepool  pool: zeepool state: ONLINE scrub: none requestedconfig:        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

A hot spare cannot be removed if it is currently used by the storage pool.

Keep the following points in mind when using ZFS hot spares:

  • Currently, the zpool remove command can only be used to remove hot spares, cache devices, and log devices.

  • Add a disk as a spare that is equal to or larger than the size of the largest disk in the pool. Adding a smaller disk as a spare to a pool is allowed. However, when the smaller spare disk is activated, either automatically or with the zpool replace command, the operation fails with an error similar to the following:


    cannot replace disk3 with disk4: device is too small
  • You can share a hot spare between pools. However, you cannot export a pool with an in-use shared spare unless you use the zpool export -f (force) option. This behavior prevents the potential data corruption scenario of exporting a pool with an in-use shared spare and another pool attempts to use the shared spare from the exported pool. If you export a pool with an in-use shared spare by using the -foption, be aware that this operation might lead to data corruption if another pool attempts to activate the in-use shared spare.

Activating and Deactivating Hot Spares in Your Storage Pool

Hot spares are activated in the following ways:

  • Manual replacement – Replace a failed device in a storage pool with a hot spare by using the zpool replace command.

  • Automatic replacement – When a fault is received, an FMA agent examines the pool to see if it has any available hot spares. If so, it replaces the faulted device with an available spare.

    If a hot spare that is currently in use fails, the agent detaches the spare and thereby cancels the replacement. The agent then attempts to replace the device with another hot spare, if one is available. This feature is currently limited by the fact that the ZFS diagnosis engine only emits faults when a device disappears from the system.

    If you physically replace a failed device with an active spare, you can reactivate the original device by using the zpool detach command to detach the spare. If you set the autoreplace pool property to on, the spare is automatically detached back to the spare pool when the new device is inserted and the online operation completes.

Manually replace a device with a hot spare by using the zpool replace command. See Example 4–7.

A faulted device is automatically replaced if a hot spare is available. For example:


# zpool status -x  pool: zeepool state: DEGRADEDstatus: 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 2010config:        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 useerrors: No known data errors

Currently, three ways to deactivate hot spares are available:

  • Removing the hot spare from the storage pool

  • Detaching a hot spare after a failed disk is physically replaced. See Example 4–8.

  • Temporarily or permanently swapping in the hot spare. See Example 4–9.


Example 4–7 Manually Replacing a Disk With a Hot Spare

In this example, the zpool replace command is used to replace disk c2t1d0 with the spare disk c2t3d0.


# zpool replace zeepool c2t1d0 c2t3d0# zpool status zeepool  pool: zeepool state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Wed Oct 21 12:47:29 2009config:        NAME           STATE     READ WRITE CKSUM        zeepool        ONLINE       0     0     0          mirror       ONLINE       0     0     0            c1t2d0     ONLINE       0     0     0            spare      ONLINE       0     0     0              c2t1d0   ONLINE       0     0     0              c2t3d0   ONLINE       0     0     0  76.5K resilvered        spares          c2t3d0      INUSE     currently in useerrors: No known data errors


Example 4–8 Detaching a Hot Spare After the Failed Disk is Replaced

After the faulted device is replaced, use the zpool detach command to return the hot spare back to the spare set. For example:


# zpool detach zeepool c2t3d0# zpool status zeepool  pool: zeepool state: ONLINE scrub: resilver completed with 0 errors on Fri Aug 28 14:21:02 2009config:        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           AVAILerrors: No known data errors


Example 4–9 Detaching a Failed Disk and Using the Hot Spare

If you want to replace a failed disk with a hot spare that is currently replacing it, then detach the original (failed) disk. If the failed disk is eventually replaced, then you can add it back to the storage pool as a spare. For example:


# zpool status zeepool  pool: zeepool state: DEGRADEDstatus: 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 goconfig:        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  51.5M resilvered        spares          c2t3d0      INUSE     currently in useerrors: No known data errors# zpool detach zeepool c2t1d0# zpool status zeepool  pool: zeepool state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Tue Oct 20 11:58:43 2009config:        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 resilverederrors: 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 Tue Oct 20 11:58:43 2009config:        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