117 lines
3.1 KiB
Markdown
117 lines
3.1 KiB
Markdown
|
Current steps for my NixOS-on-ZFS installs with impermanence.
|
||
|
|
||
|
## Target layout (example from tverskoy):
|
||
|
|
||
|
Partitioning:
|
||
|
|
||
|
```
|
||
|
nvme0n1 259:0 0 238.5G 0 disk
|
||
|
├─nvme0n1p1 259:1 0 128M 0 part /boot (type: EFI system)
|
||
|
└─nvme0n1p2 259:2 0 238.3G 0 part (type: Solaris root)
|
||
|
```
|
||
|
|
||
|
ZFS layout:
|
||
|
|
||
|
```
|
||
|
NAME USED AVAIL REFER MOUNTPOINT
|
||
|
zpool 212G 19.0G 248K /zpool
|
||
|
zpool/ephemeral 668M 19.0G 192K /zpool/ephemeral
|
||
|
zpool/ephemeral/home 667M 19.0G 667M legacy
|
||
|
zpool/local 71.3G 19.0G 192K /zpool/local
|
||
|
zpool/local/nix 71.3G 19.0G 71.3G legacy
|
||
|
zpool/safe 140G 19.0G 192K /zpool/safe
|
||
|
zpool/safe/depot 414M 19.0G 414M legacy
|
||
|
zpool/safe/persist 139G 19.0G 139G legacy
|
||
|
```
|
||
|
|
||
|
With reset-snapshots:
|
||
|
|
||
|
```
|
||
|
NAME USED AVAIL REFER MOUNTPOINT
|
||
|
zpool/ephemeral/home@blank 144K - 192K -
|
||
|
zpool/ephemeral/home@tazjin-clean 144K - 200K -
|
||
|
```
|
||
|
|
||
|
Legacy mountpoints are used because the NixOS wiki advises that using
|
||
|
ZFS own mountpoints might lead to issues with the mount order during
|
||
|
boot.
|
||
|
|
||
|
## Install steps
|
||
|
|
||
|
1. First, get internet.
|
||
|
|
||
|
2. Use `fdisk` to set up the partition layout above (fwiw, EFI type
|
||
|
should be `1`, Solaris root should be `66`).
|
||
|
|
||
|
3. Format the first partition for EFI: `mkfs.fat -F32 -n EFI $part1`
|
||
|
|
||
|
4. Init ZFS stuff:
|
||
|
|
||
|
```
|
||
|
zpool create \
|
||
|
# 2 SSD only settings
|
||
|
-o ashift=12 \
|
||
|
-o autotrim=on \
|
||
|
-R /mnt \
|
||
|
-O canmount=off \
|
||
|
-O mountpoint=none \
|
||
|
-O acltype=posixacl \
|
||
|
-O compression=lz4 \
|
||
|
-O atime=off \
|
||
|
-O xattr=sa \
|
||
|
-O encryption=aes-256-gcm \
|
||
|
-O keylocation=prompt \
|
||
|
-O keyformat=passphrase \
|
||
|
zpool $part2
|
||
|
```
|
||
|
|
||
|
Reserve some space for deletions:
|
||
|
|
||
|
```
|
||
|
zfs create -o refreservation=1G -o mountpoint=none zpool/reserved
|
||
|
```
|
||
|
|
||
|
Create the datasets as per the target layout:
|
||
|
|
||
|
```
|
||
|
# Throwaway datasets
|
||
|
zfs create -o canmount=off -o mountpoint=none zpool/ephemeral
|
||
|
zfs create -o mountpoint=legacy zpool/ephemeral/root
|
||
|
zfs create -o mountpoint=legacy zpool/ephemeral/home
|
||
|
|
||
|
# Persistent datasets
|
||
|
zfs create -o canmount=off -o mountpoint=none zpool/persistent
|
||
|
zfs create -o mountpoint=legacy zpool/persistent/nix
|
||
|
zfs create -o mountpoint=legacy zpool/persistent/depot
|
||
|
zfs create -o mountpoint=legacy zpool/persistent/data
|
||
|
```
|
||
|
|
||
|
Create completely blank snapshots of the ephemeral datasets:
|
||
|
|
||
|
```
|
||
|
zfs snapshot zpool/ephemeral/root@blank
|
||
|
zfs snapshot zpool/ephemeral/home@blank
|
||
|
```
|
||
|
|
||
|
The ephemeral home volume needs the user folder already set up with
|
||
|
permissions. Mount it and create the folder there:
|
||
|
|
||
|
```
|
||
|
mount -t zfs zpool/ephemeral/root /mnt
|
||
|
mkdir /mnt/home
|
||
|
mount -t zfs zpool/ephemeral/home /mnt/home
|
||
|
mkdir /mnt/home/tazjin
|
||
|
chmod 1000:100 /mnt/home/tazjin
|
||
|
zfs snapshot zpool/ephemeral/home@tazjin-clean
|
||
|
```
|
||
|
|
||
|
Now the persistent Nix store volume can be mounted and installation
|
||
|
can begin.
|
||
|
|
||
|
```
|
||
|
mkdir /mnt/nix
|
||
|
mount -t zfs zpool/persistent/nix /mnt/nix
|
||
|
```
|
||
|
|
||
|
4. Configure & install NixOS as usual.
|