ZFS on Ubuntu

Install

Install related packages: sudo apt install zfsutils-linux

Create pool

  1. Check installed drives by running: sudo fdisk -l
  2. Create zpool (mirrorred with three disks): sudo zpool create <poolname> mirror /dev/sda /dev/sdb /dev/sdc
  3. Check ZFS pool status: zpool status
  4. Turn on compression: sudo zfs set compression=lz4 <poolname> && zfs get compression

More info: Ubuntu tutorials

Encrypted dataset creation

Create key-file

  1. Create encryption keyfile location: sudo mkdir -r /usr/local/etc/zfs/
  2. Create encrytion key file: sudo dd if=/dev/urandom of=/usr/local/etc/zfs/<keyfilename> bs=32 count=1

Create dataset (encrypted)

  1. Create data set: sudo zfs create -o encryption=on -o keyformat=raw -o keylocation=file:///usr/local/etc/zfs/<keyfilename> <poolname>/<datasetname> && zfs get encryption
  2. Set permissions: `sudo chown : //

Auto decrypt on boot (before zfs mounts the datasets)

  1. Create systemd service script to run zfs load-key on startup:

    cat > /etc/systemd/system/zfs-load-key.service <<EOF
    [Unit]
    Description=Load encryption keys
    DefaultDependencies=false
    Before=zfs-mount.service
    After=zfs-import.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/sbin/zfs load-key -a
    EOF
    
    [Install]
    WantedBy=zfs-mount.service
  2. Enable boot script: systemctl enable zfs-load-key.service

More info: Chungy

Check status

  • Pool status: zpool status
  • Dataset list: zfs list

General ZFS reference: ZFS Man page