====== 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