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.