Skip to content

Storage modes

Every storage mode erases the disk

Whichever layout you choose, the installer wipes the target disk completely — all existing data is destroyed and cannot be recovered. Back up first, and choose the disk carefully. GISNIX and Kartoza accept no responsibility for lost data.

The installer offers three storage modes, all built from the same disko templates under templates/disko/ (see Architecture for how a host's disks.nix picks one).

Mode Encryption Disks Notes
ZFS, single disk AES-256-GCM, passphrase at boot 1 The installer's default
XFS, single disk None 1 Maximum performance, dual-boot friendly
ZFS, multi-disk Optional (on by default) 2+ (stripe), 3+ (raidz), 4+ (raidz2) Redundancy across disks

The default — an encrypted ZFS pool on a single disk — lays out separate datasets for the system, the package store, your home and spare space:

The default disk layout: an encrypted ZFS pool with separate datasets

The ZFS dataset layout

Every ZFS mode (single or multi-disk) uses the same dataset shape:

NIXROOT/
├── root      (/)           root filesystem
├── nix       (/nix)        nix store, quota-limited
├── home      (/home)       user data
├── overflow  (/overflow)   extra storage
└── atuin     (/var/atuin)  shell history, XFS zvol

The shape is the same whether a machine was installed fresh by GISNIX or migrated onto it by hand.

Changing your mind after install

The storage mode itself isn't changeable after install — disks.nix describes how the disk was partitioned, not a knob nixos-rebuild can turn. Changing it means reinstalling (the installer's "existing host profile" option, pointed at your hosts/<name>/, does this cleanly — it's the same config, freshly partitioned).

That includes dataset properties, not just the disk layout: disko sets quotas, compression and the rest at partition time, once, when the pool is created. Editing the numbers in disks.nix afterwards and running nixos-rebuild switch changes nothing on disk — disko doesn't run again, nixos-rebuild never re-invokes it, and the edit becomes a lie about the pool's actual state the moment you make it without also touching the pool by hand. To actually raise a quota on a live pool: zfs set quota=<size> <pool>/<dataset> as root, then update disks.nix to match, purely as a record of what's true. What is genuinely changeable without reinstalling: the software on top of the storage — see Software bundles.