====== ZFS - Pools - Create a ZFS Pool - Comprehensive Steps to Create a ZFS Pool ====== ===== Choose Drives to Pool ===== Check installed drives by running: sudo fdisk -l returns: Disk /dev/sdb: 14.57 TiB, 16000900661248 bytes, 31251759104 sectors Disk model: ST16000NM001G-2K Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk /dev/sdc: 14.57 TiB, 16000900661248 bytes, 31251759104 sectors Disk model: ST16000NM001G-2K Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes **NOTE:** Note down the device names of drives you want to pool. Another method to check the disks: lsblk -S returns: NAME HCTL TYPE VENDOR MODEL REV TRAN sdb 5:0:0:0 disk ATA ST16000NM001G-2KK103 SN02 sata sdc 8:0:0:0 disk ATA ST16000NM001G-2KK103 SN02 sata **WARNING:** Ensure that the disk with the Ubuntu operating system is not used. * Also exclude any other disks that may contain data not to be destroyed. ---- ===== Delete Existing Partitions if required ===== Delete all partitions and reset it: sudo sgdisk - -zap-all /dev/sdb Create a partition with 1GB of trailing free space: sudo sgdisk -n1:0:-1G -t1:BF00 /dev/sdb **NOTE:** Adjust these values as required. **NOTE:** This will result in a /dev/sdb1 partition being created. ---- ===== Creating a Pool ===== Different types of storage pools can be created: ==== To create a striped pool ==== sudo zpool create testpool /dev/sdb /dev/sdc **NOTE:** This is equivalent to RAID0. * This has no parity and no mirroring to rebuild the data. * This is not recommended because of the risk of losing data if a drive fails. ---- ==== To create a mirrored pool ==== sudo zpool create testpool mirror /dev/sdb /dev/sdc **NOTE:** Much like RAID1, one can use 2 or more VDEVs. * For N VDEVs, one will have to have N-1 fail before data is lost. ---- ==== To create a Striped Mirrored VDEVs ==== sudo zpool create example mirror /dev/sdb /dev/sdc mirror /dev/sdd /dev/sde or sudo zpool create example mirror /dev/sdb /dev/sdc sudo zpool add example mirror /dev/sdd /dev/sde **NOTE:** Much like RAID10. * Great for small random read I/O. * Create mirrored pairs and then stripe data over the mirrors. * This creates striped 2 x 2 mirrored pool. ---- ==== To create a RAIDZ pool ==== sudo zpool create testpool mirror /dev/sdb /dev/sdc sudo zpool create example raidz /dev/sdb /dev/sdc /dev/sdd /dev/sde **NOTE:** Like RAID5. * This uses a variable width strip for parity. * Allows one to get the most capacity out of a bunch of disks with parity checking with a sacrifice to some performance. * Allows a single disk failure without losing data. ---- ==== To create a RAIDZ2 pool ==== sudo zpool create example raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf **NOTE:** Like RAID6. * Has double the parity for 2 disk failures with performance similar to RAIDZ. ---- ==== To create a RAIDZ3 pool ==== sudo zpool create example raidz3 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg **NOTE:** Better than RAID6. * Has 3 parity bits, allowing for 3 disk failures before losing data with performance like RAIDZ2 and RAIDZ. ---- ==== To create a Nested Raid pool ==== sudo zpool create example raidz /dev/sdb /dev/sdc /dev/sdd /dev/sde sudo zpool add example raidz /dev/sdf /dev/sdg /dev/sdh /dev/sdi **NOTE:** Like RAID50, RAID60, striped RAIDZ volumes. * This is better performing than RAIDZ but at the cost of reducing capacity. ---- **NOTE:** Here, entire disks are being used for the pool. * ZFS also supports creating pools from disk partitions, such as /dev/sdb1. * Anything with a descriptor in /dev that allows random access will work. * Test pools made of sparse files are an incredibly convenient way to practice zpool commands. **NOTE:** The newly mounted pool will appear as any other part of the filesystem. * **testpool** is the name of the pool. * The newly created pool will be mounted at **/testpool**. * You can select a different mount point using the **-m** option: sudo zpool create -m /mnt/testpool testpool mirror /dev/sdb /dev/sdc **NOTE:** If any error appears, the command can be rerun with the **-f** option after the zpool create command which forces the command to be executed: sudo zpool create -f testpool /dev/sdb /dev/sdd **NOTE:** Advanced options can also be used when creating a pool. sudo zpool create -f -o ashift=12 -O compression=lz4 my_pool /dev/sdb1 * **ashift**: corresponds to 4k sector size. * **compression**: Enables LZ4 compression. * **my_pool**: The name of my new zpool. * **/dev/sdb1**: The disk partition to use for the pool. ---- ===== List Mounts ===== Check the Mount is showing: df -h ---- ===== Set Permissions of the Mount ===== By default only root can write to the mounted directory. Change this so that any ordinary user can make changes to the directory: sudo chown -Rfv peter:peter /testpool ---- ===== Check Pool Status ===== sudo zpool status