FreeNAS
Properly init and add disks to your pool via command line
I got great help from this article: https://forums.freenas.org/index.php?threads/building-pools-from-the-cli.17540/
I have a FreeNAS server with 1x2TB disk. I want to replace it with 2x4TB disks in a mirror configuration. This is how I did it!
# zpool status pool: BigData state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM BigData ONLINE 0 0 0 gptid/a37b301e-eb46-11e7-b559-6cf049956cad ONLINE 0 0 0
errors: No known data errors
1) Find out the dev nodes for your new disks
ls -l /dev/ada* zpool status glabel list
The ls command will show you all your disks dev-id:s. The zpool command will show you the gpt-id of all disks currently included in your pools. "glabel list" will give you the mapping between gpt-id and dev nodes. With this information you know which /dev/adaX devices that are your new/unused disks.
2) If any partitions currently exists on the disks, clear them out (ada0 and ada1 in my case, but may be different for you)
gpart destroy -F /dev/ada0 gpart destroy -F /dev/ada1
3) Init the disk as a GPT and create one swap partition and one zfs partition on each disk
gpart create -s gpt /dev/ada0 gpart add -a 4096 -i 1 -s 2g -t freebsd-swap /dev/ada0 gpart add -a 4096 -i 2 -t freebsd-zfs /dev/ada0
gpart create -s gpt /dev/ada1 gpart add -a 4096 -i 1 -s 2g -t freebsd-swap /dev/ada1 gpart add -a 4096 -i 2 -t freebsd-zfs /dev/ada1
4) The disks are now ready to be used in a pool! Now run glabel and note down the new gpt-id:s for your disks
# glabel status Name Status Components gptid/fcb8a69a-eb13-11e7-8eaf-6cf049956cad N/A ada2p1 gptid/a37b301e-eb46-11e7-b559-6cf049956cad N/A ada3p2 gptid/a35ca845-eb46-11e7-b559-6cf049956cad N/A ada3p1 gptid/8d0dbf30-f6ce-11e7-a931-6cf049956cad N/A ada0p1 gptid/96286393-f6ce-11e7-a931-6cf049956cad N/A ada0p2 gptid/b791e4cb-f6ce-11e7-a931-6cf049956cad N/A ada1p1 gptid/bbb96c09-f6ce-11e7-a931-6cf049956cad N/A ada1p2
5) Now you can either create a new pool using zpool create, or you can add them to an existing pool with zpool attach. I will start by attaching one of them as a mirror to my existing BigData pool:
# zpool attach BigData gptid/[gptid_of_the_existing_disk] gptid/[gptid_of_the_new_partition] zpool attach BigData gptid/a37b301e-eb46-11e7-b559-6cf049956cad gptid/bbb96c09-f6ce-11e7-a931-6cf049956cad
6) Now wait for the resilvering to complete
# zpool status pool: BigData state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Thu Jan 11 05:03:53 2018 220G scanned at 423M/s, 118M issued at 228K/s, 1.67T total 109M resilvered, 0.01% done, no estimated completion time config: NAME STATE READ WRITE CKSUM BigData ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 gptid/a37b301e-eb46-11e7-b559-6cf049956cad ONLINE 0 0 0 gptid/bbb96c09-f6ce-11e7-a931-6cf049956cad ONLINE 0 0 0 (resilvering) errors: No known data errors