common commands

command description
zfs list view existing datasets
zfs load-key load encryption key
zfs create create new mount point
zfs history show complete history of pool
zpool scrub -p <pool> pause scrub

freebsd

  • zfs installed as part of base from 13.0

my custom setup

  • 4x10T disks, one pool with two mirrors
    • gives ~20T usable storage
  • prep disks
    wipefs -a /dev/<disk>
    parted /dev/<disk> mklabel gpt
    parted /dev/<disk> mkpart "<custom id>" zfs 0% 100%

The custom id shows in ZFS, i use a location identifier as below

  • 2 character server prefix, kk for kinakuta
  • 2 character enclosure identifier, e0, e1, etc.
  • 2 character disk positon (in my case top to bottom), d0, d1, etc.
  • serial number of the physical disk, taken from the label

For example

root@kinakuta:~# zpool status                                                                                                                                                                                                         ~
  pool: crypt.kk
 state: ONLINE
  scan: scrub repaired 0B in 16:50:21 with 0 errors on Tue Apr 15 07:57:21 2025
config:

        NAME                 STATE     READ WRITE CKSUM
        crypt.kk             ONLINE       0     0     0
          mirror-0           ONLINE       0     0     0
            kke0d0-ZS518A9F  ONLINE       0     0     0
            kke0d1-ZS518A21  ONLINE       0     0     0
          mirror-1           ONLINE       0     0     0
            kke1d0-ZS518A9D  ONLINE       0     0     0
            kke1d1-ZS518A76  ONLINE       0     0     0

errors: No known data errors

Create zpool

zpool create -f -o ashift=12 -o feature@encryption=enabled -O encryption=on -O keylocation=prompt -O keyformat=passphrase -m /path/to/mountpoint <zpool name> mirror /dev/disk/by-partlabel/kke0d0-ZS518A9F /dev/disk/by-partlabel/
kke0d1-ZS518A21 mirror /dev/disk/by-partlabel/kke1d0-ZS518A9D /dev/disk/by-partlabel/kke1d1-ZS518A76

To add spares after pool creation prep them as before then incant

zpool add <zpool name> spare /dev/disk/by-partlabel/<part id>