Encrypted ZFS dataset as a cold backup strategy

🖊️ About 300 words ⏱️ 2 minutes

Intro

I was revisiting my complete backup strategy and instead of using one more technology to remember and maintain, I decided to simply use ZFS instead !

Delete existing partition scheme (if needed)

doas gpart destroy -F /dev/da0

Create a GPT scheme

doas gpart create -s gpt /dev/da0

Create a single partition

Using the whole drive aligned at 1M boundary with a label “extdrive”. This drive will show up at /dev/gpt/extdrive

gpart add -a 1m -l extdrive -t freebsd-zfs /dev/da0

Create a zpool named “backup” with encrypted datasets on two drives

zpool create backup /dev/sdc1 /dev/sdd1

or for one partition

zpool create backup /dev/da0p1

Create the encrypted datasets

doas zfs create -o encryption=on -o keyformat=passphrase -o keylocation=prompt backup/pics
doas zfs create -o encryption=on -o keyformat=passphrase -o keylocation=prompt backup/cirrus7r
doas zfs create -o encryption=on -o keyformat=passphrase -o keylocation=prompt backup/xps

Sequence of Events to start

doas zpool import backup
doas zpool status # to check
doas zfs load-key backup/pics
doas zfs load-key backup/xps
doas zfs load-key backup/cirrus7r
doas zfs mount -a

Sequence of Events to stop

doas zfs umount -a
doas zfs unload-key -a
doas zpool export backup

How to create a backup into another drive without decrypting the dataset

First, import both source pool and destination pool

doas zpool import backup-source
doas zpool import backup-dest

Create a directory on backup-dest

doas mkdir /backup-dest/pics

Send / Recv raw

doas zfs send -w backup-source/pics|doas zfs recv backup-dest/pics

Check with

doas zfs list