I have a large pool on a system. The system is a storage node in a Hadoop cluster, so a stripe is fine because if we lose the local pool we can reconstruct the data at the cluster level.
A disk is going bad: can I tell ZFS to try and move the storage blocks off the device so I can remove it, or do I need to delete the entire pool and rebuild it? Ideally, I can pull the disk out, and later add a new disk when I swap out the failed hardware.
I assume the answer is "no" because a traditional RAID operates at a block level, but maybe a ZFS storage pool is smart enough to at least try to relocate the file data.
> sudo zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 19.9T 8.09T 11.8T - - 15% 40% 1.00x DEGRADED -
> sudo zpool status
pool: tank
state: DEGRADED
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: http://zfsonlinux.org/msg/ZFS-8000-8A
scan: scrub repaired 0B in 0 days 02:45:39 with 0 errors on Sun Jan 9 03:09:41 2022
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
ata-ST2000DM001-1ER164_Z4Z0xxxx ONLINE 0 0 0
ata-ST2000DM001-1ER164_Z4Z0xxxx DEGRADED 96 0 0 too many errors
scsi-35000cca22dc7xxxx ONLINE 0 0 0
scsi-35000cca22dc7xxxx ONLINE 0 0 0
scsi-35000cca22dc8xxxx ONLINE 0 0 0
scsi-35000cca22dc8xxxx ONLINE 0 0 0
scsi-35000cca22dc7xxxx ONLINE 0 0 0
scsi-35000cca22dc7xxxx ONLINE 0 0 0
scsi-35000cca22dc7xxxx ONLINE 0 0 0
ata-ST2000DM001-1ER164_Z4Z3xxxx ONLINE 0 0 0
ata-ST2000NM0011_Z1P3xxxx ONLINE 0 0 0
I predict the answer is that when I am ready to replace the failing disk, I will want to first destroy the pool, replace the disk, and build a new pool.