root on ZFS Install

In order to import a ZFS pool, ZFS must be enabled in the NixOS configuration file.

Make sure zfs is in boot.supportedFilesystems.

{ config, pkgs, ... }:

{
  imports = [ <nixpkgs/nixos/modules/installer/cd-dvd/installation-cd-graphical-kde.nix> ];
  boot.supportedFilesystems = [ "zfs" ];
}

Rebuild NixOS and switch to the new configuration.

nixos-rebuild switch

Check zfs is working,modprobe zfs should show no problems.

ZFS should now work.

Pool

Create a new pool or mount an existing pool.

Creating a pool

Create a pool using the disk ID and set it to 4k block size as default with ashift=12.

ls -la /dev/disk/by-id/
zpool create -f -o ashift=12 vault /dev/disk/by-id/${DISKS}

Export the pool after creation.

zpool export ${POOLNAME}

Using an Existing pool

The existing pool assigning it to be relative to /mnt with -R, the -N flag will tell ZFS not to mount any datasets.

zpool import -N -d /dev/disk/by-id -R /mnt vault

Setup Datasets

Mount all datasets partitions to /mnt.

Filesystem

NIX_ROOT=/mnt
ZFS_ROOT_DATASET=vault/sys/atom
ZFS_DATA_DATASET=vault/data

Setup datasets. Set all legacy.

zfs create -o mountpoint=none vault/sys
zfs create -o mountpoint=none ${ZFS_ROOT_DATASET}
zfs create -o mountpoint=none ${ZFS_ROOT_DATASET}/ROOT
zfs create -o mountpoint=legacy ${ZFS_ROOT_DATASET}/ROOT/default

# Rest of datasets...

Mount Datasets

Mount the datasets:

mkdir ${NIX_ROOT}/nix;
mount -t zfs ${ZFS_ROOT_DATASET}/ROOT/default ${NIX_ROOT}

# Rest of datasets...

Boot

Create a 512M esp, mount to /boot

gdisk /dev/sdf

Command (? for help): n
Partition number (5-128, default 5):
First sector (34-488397134, default = 225445888) or {+-}size{KMGTP}:
Last sector (225445888-488397134, default = 488397134) or {+-}size{KMGTP}: +512
Hex code or GUID (L to show codes, Enter = 8300): ef00
Changed type of partition to 'EFI System'

Format boot and mount.

mkfs.fat -F32 /dev/sdf1
mkdir ${NIX_ROOT}/boot
mount /dev/sdf1 ${NIX_ROOT}/boot

Swap

Create a partition of desired size.

gdisk /dev/sdf

Command (? for help): n
Partition number (2-128, default 2):
First sector (34-488397134, default = 2099200) or {+-}size{KMGTP}:
Last sector (2099200-488397134, default = 488397134) or {+-}size{KMGTP}: +32G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'

Enable swap.

mkswap /dev/sdf2

swapon /dev/sdf2

Install

Setup config in /mnt/etc/nixos and install.

nixos-install --root /mnt

Last updated