Appearance
ZFS
Import ZFS pool
Import encrypted ZFS pool
sudo zfs set keylocation=file:///directory/pool-key pool-namesudo zpool import pool-name -l
Create ZFS pool
Create new ZFS pool using by-id
Example 1:
zpool create -f -m /mnt/data bigdata \
raidz \
ata-ST3000DM001-9YN166_S1F0KDGY \
ata-ST3000DM001-9YN166_S1F0JKRR \
ata-ST3000DM001-9YN166_S1F0KBP8 \
ata-ST3000DM001-9YN166_S1F0JTM1
Example 2:
zpool create -f -o ashift=12 sp-storage \
raidz2 \
ata-ST8000NM0055-1RM112_ZA1DZ7LK \
ata-ST8000NM0055-1RM112_ZA1DZXGC \
ata-ST8000NM0055-1RM112_ZA1DZ7FJ \
ata-ST8000NM0055-1RM112_ZA1DZLR9
Create ZFS dataset
Create encrypted ZFS dataset using raw key and ZSTD compression
zfs create -o compression=zstd -o encryption=on -o keyformat=raw -o keylocation=file:///directory/dataset-key dataset-name
Auto backup ZFS encrypted datasets
Script that automatically backs up encrypted datasets using incremental snapshots can be found in server-resources repository. You can create a cron job to run this task. Refer to Linux help topic.
ZFS Replication
Flags
Recursive, include child datasets
-R
Raw send, use this for encrypted dataset
-w
Incremental
pool/dataset@existingsnapshot pool/dataset@newsnapshot
Examples
zfs send -Rwi originpool@existingsnapshot originpool@newsnapshot | pv | ssh root@targetserver zfs recv targetpool/targetdataset
In this example, we are using the above flags to send an incremental stream to the target server. We are piping through pv to measure data transfer.
ZFS Snapshots
Create recursive snapshot
zfs snapshot -r pool/dataset@snapshot-name
Get full name of last snapshot
zfs list -t snapshot -H -o name pool/dataset | tail -n1
If the snapshot names always begin with a year, you can use egrep to shorten the snapshot names
zfs list -t snapshot -H -o name pool/dataset | egrep -o '20.+' | tail -n1
Workarounds
Mounting ZFS volumes automatically
In case ZFS volumes are not mounting after reboot, these commands should be run.
sudo zpool set cachefile=/etc/zfs/zpool.cache pool-name
sudo systemctl enable zfs.target
sudo systemctl start zfs.target
sudo systemctl enable zfs-import-cache
sudo systemctl start zfs-import-cache
sudo systemctl enable zfs-mount
sudo systemctl start zfs-mount
sudo systemctl enable zfs-import.target
sudo systemctl start zfs-import.target
sudo zfs set mountpoint=/mnt/pool-name pool-name