Jump to content

User:2r/NixOS on ZFS

From NixOS Wiki
Revision as of 01:23, 6 March 2021 by imported>2r (Created page with "This is a userspace draft and is not supported by NixOS Wiki. == Enable ZFS on Existing Installation == Add the following lines to configuration: <pre>boot.supportedFilesyste...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

This is a userspace draft and is not supported by NixOS Wiki.

Enable ZFS on Existing Installation

Add the following lines to configuration:

boot.supportedFilesystems = [ "zfs" ];
networking.hostId = "deadbeef";

Host ID should be unique, generate one with head -c 8 /etc/machine-id.

Rebuild system with nixos-rebuild switch.

Install NixOS on ZFS

Layout

Partitions

As swap on ZFS will cause deadlock and does not support hibernation, a separate swap partition should be created.

GRUB supports decrypting LUKS1 container and limited ZFS features, a separate, feature limited boot pool is created for compatibility.

GPT partition table
ESP bpool rpool swap BIOS boot sector
Filesystem vfat ZFS, feature limited for GRUB compatibility. ZFS swap N/A
Content grubx64.efi /boot / swap N/A
Encryption No, can be validated with Secure Boot LUKS1 ZFS Encrytion random/LUKS2 N/A

Datasets

As NixOS lacks a service to handle native ZFS mounting at boot, such as zfs-mount-generator, all mountable datasets must be created with mountpoint=legacy to be mounted with fileSystems option.

Datasets with canmount=off are used as containers, that is, no data is stored directly under such datasets, but child datasets can inherit their properties or imitate directory structures, such as /var/log.

When creating pools, a default dataset with the same name as the pool name is also created.

Dataset layout
canmount=off canmount=noauto
bpool sys BOOT default
rpool sys ROOT default
DATA default