ZFS is a great thing and the main reason for me to use FreeNAS. But as disk space grew sparse, I had to think about upgrading. As WD brilliantly fucked up their WD-Red series and made a real mess there with SMR and some labeling stuff, I decided to go for Seagates IronWolf Pro disks to expand my MicroServer. To extend my pool, I had basically two ways: Making a new pool and copy stuff around or replace the disks one by one.
As I lack interfaces, I had to opt for the latter.
My Pool so far:
root@freenas:~ # zpool status MyPool pool: MyPool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM MyPool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 gptid/9868f6cd-1153-11e6-9b9d-b05ada87d5e0 ONLINE 0 0 0 gptid/6489f76c-c46b-11ea-9186-b05ada87d5e0 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 gptid/99e25e00-1153-11e6-9b9d-b05ada87d5e0 ONLINE 0 0 0 gptid/9ab19bce-1153-11e6-9b9d-b05ada87d5e0 ONLINE 0 0 0 errors: No known data errors root@freenas:~ #
After pulling and replacing a drive, things look like that:
root@freenas:~ # zpool status MyPool pool: MyPool state: DEGRADED status: One or more devices has been removed by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using zpool online' or replace the device with 'zpool replace'. scan: scrub repaired 0B in 08:39:05 with 0 errors on Sun Aug 16 08:39:10 2020 config: NAME STATE READ WRITE CKSUM MyPool DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 gptid/9868f6cd-1153-11e6-9b9d-b05ada87d5e0 REMOVED 0 0 0 gptid/6489f76c-c46b-11ea-9186-b05ada87d5e0 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 gptid/99e25e00-1153-11e6-9b9d-b05ada87d5e0 ONLINE 0 0 0 gptid/9ab19bce-1153-11e6-9b9d-b05ada87d5e0 ONLINE 0 0 0 errors: No known data errors root@freenas:~ #
To save us a lot of redundant stuff, I skip the status for the other disks as they were replaced using zpool replace until all of the pool is ‘resilvered’ again. We now got all of the disks installed, but to actually upgrade the capacity, we need to employ zpool online -e pool device. The parameter -e is very important here, as without it, the capacity remains unchainged.