Skip to content

Instantly share code, notes, and snippets.

@aadityabhatia
Last active January 5, 2023 00:24
Show Gist options
  • Save aadityabhatia/6e6f11333c301df5559ae37d0c1ac3be to your computer and use it in GitHub Desktop.
Save aadityabhatia/6e6f11333c301df5559ae37d0c1ac3be to your computer and use it in GitHub Desktop.
ZFS Setup Notes
[Unit]
Description=ZFS Encryption Keys
DefaultDependencies=no
After=zfs-import.target
After=zfs-import-cache.service
After=systemd-modules-load.service
Before=zfs-mount.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/zfs load-key -a
# StandardInput=tty-force
[Install]
WantedBy=zfs-mount.service

ZFS Configuration

ZFS - ArchLinux Documentation

Installation

pacman -S linux-headers
cd /usr/local/src/
git clone https://aur.archlinux.org/zfs-utils.git
git clone https://aur.archlinux.org/zfs-dkms.git
cd /usr/local/src/zfs-utils
makepkg -si
cd /usr/local/src/zfs-dkms
makepkg -si
modprobe zfs
zpool status

Configuration

Automatic Start

tee /etc/modules-load.d/zfs.conf <<< zfs
systemctl enable zfs-mount.service zfs.target zfs-import.target zfs-import-cache.service zfs-zed.service

To load encryption keys

cp zfs-load-key.service /etc/systemd/system/
systemctl enable zfs-load-key.service

Create Pool

zpool create -f -o ashift=12 -m /mnt/lake lake raidz2 ata-ST2000DM008-2FR102_ZFL1SC9C ata-ST2000DM008-2FR102_ZFL1W6NF ata-ST2000DM008-2FR102_ZFL1W6PQ ata-ST2000DM008-2FR102_ZFL1W7T0
zfs set relatime=on lake

Create Datasets

zfs create lake/media

Dataset Properties

# zfs set compression=on lake/textfiles
zfs set quota=200G lake/media

Encryption

# zfs create -o encryption=on -o keyformat=passphrase lake/media

dd if=/dev/random of=/etc/keys/lake-media bs=1 count=32
chmod 400 /etc/keys/lake-media
zfs create -o encryption=on -o keyformat=raw -o keylocation=file:///etc/keys/lake-media lake/media
sudo cp zfs-load-key.service /etc/systemd/system/

# zfs get keylocation <nameofzpool>/<nameofdataset>

# zfs load-key <nameofzpool>/<nameofdataset> # load key for a specific dataset
# zfs load-key -a # load all keys
# zfs load-key -r zpool/dataset # load all keys in a dataset

# zfs mount <nameofzpool>/<nameofdataset>

Maintenance

Scrubbing

zpool scrub lake
systemctl enable [email protected]

TRIM

zpool set autotrim=on lake
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment