From the ‘zpool’ man pages:
A pool’s health status is described by one of three states: online, degraded, or faulted. An online pool has all devices operating normally. A degraded pool is one in which one or more devices have failed, but the data is still available due to a redundant configuration. A faulted pool has corrupted metadata, or one or more faulted devices, and insufficient replicas to continue functioning.
A pool’s health status can be viewed with the ‘zpool status’ command. In the following example the pool ‘tank’ is ‘ONLINE’ and operating normally.
#> zpool status
pool: tank
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
errors: No known data errors
Alternatively the ‘zpool status -x’ command can be used to only display the status of problematic pools. In the following example all pools are healthy.
#> zpool status -x all pools are healthy
The following bash script was written to to actively monitor pool health on my home servers. The script parses the output of ‘zpool status -x’ and will send an email if the pool is degraded or faulted. I added the script to the cron table with an hour interval but if you have a strict mean time to recovery requirement shorter intervals can be used.