User:2r/NixOS on ZFS: Difference between revisions
Appearance
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..." |
imported>2r No edit summary |
||
Line 14: | Line 14: | ||
As swap on ZFS will cause deadlock and does not support hibernation, a separate swap partition should be created. | As swap on ZFS will cause deadlock and does not support hibernation, a separate swap partition should be created. | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ GPT partition table | |+ GPT partition table | ||
Line 49: | Line 48: | ||
As NixOS lacks a service to handle native ZFS mounting at boot, such as <code>zfs-mount-generator</code>, all mountable datasets must be created with <code>mountpoint=legacy</code> to be mounted with <code>fileSystems</code> option. | As NixOS lacks a service to handle native ZFS mounting at boot, such as <code>zfs-mount-generator</code>, all mountable datasets must be created with <code>mountpoint=legacy</code> to be mounted with <code>fileSystems</code> option. | ||
Datasets with <code>canmount=off</code> 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 <code>/var/log</code>. | Datasets with <code>canmount=off mountpoint=none</code> 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 <code>/var/log</code>. | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ Dataset layout | |+ Dataset layout | ||
|colspan="3"| | |- | ||
| | |colspan="3"| Containers | ||
| | |||
| mountpoint | |||
| canmount | |||
| comment | |||
|- | |- | ||
| bpool | | bpool | ||
Line 61: | Line 63: | ||
| BOOT | | BOOT | ||
| default | | default | ||
| /boot | |||
| noauto | |||
|- | |- | ||
|rowspan=" | |rowspan="3"| rpool | ||
|rowspan=" | |rowspan="3"| sys | ||
| ROOT | | ROOT | ||
| default | | default | ||
| / | |||
| noauto | |||
|- | |- | ||
| DATA | |rowspan="2"| DATA | ||
| | | local | ||
| / | |||
| off | |||
| container for datasets that do not need backup, such as /nix | |||
|- | |||
| safe | |||
| / | |||
| off | |||
| container for datasets that need backup, such as /{root,home,home,user} | |||
|} | |} |
Revision as of 01:56, 6 March 2021
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.
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 mountpoint=none
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
.
Containers | mountpoint | canmount | comment | |||
bpool | sys | BOOT | default | /boot | noauto | |
rpool | sys | ROOT | default | / | noauto | |
DATA | local | / | off | container for datasets that do not need backup, such as /nix | ||
safe | / | off | container for datasets that need backup, such as /{root,home,home,user} |