Changes:
- BTRFS subvolumes are mounted if and only their
mountpoint
is set.
Especially, if you have specific mount options for a subvolume (through
mountOptions
), make sure to set mountpoint
otherwise the subvolume will not
be mounted.
This change allows more flexibility when using BTRFS, giving access to its volume management functionality.
It allows layouts as the following:
content = {
type = "btrfs";
# BTRFS partition is not mounted as it doesn't set a mountpoint explicitly
subvolumes = {
# This subvolume will not be mounted
"SYSTEM" = { };
# mounted as "/"
"SYSTEM/rootfs" = {
mountpoint = "/";
};
# mounted as "/nix"
"SYSTEM/nix" = {
mountOptions = [ "compress=zstd" "noatime" ];
mountpoint = "/nix";
};
# This subvolume will not be mounted
"DATA" = { };
# mounted as "/home"
"DATA/home" = {
mountOptions = [ "compress=zstd" ];
mountpoint = "/home";
};
# mounted as "/var/www"
"DATA/www" = {
mountpoint = "/var/www";
};
};
};
corresponding to the following BTRFS layout:
BTRFS partition # not mounted
|
|-SYSTEM # not mounted
| |-rootfs # mounted as "/"
| |-nix # mounted as "/nix"
|
|-DATA # not mounted
|-home # mounted as "/home"
|-www # mounted as "/var/www"
Changes:
- ZFS datasets have been split into two types:
zfs_fs
andzfs_volume
. - The
zfs_type
attribute has been removed. - The size attribute is now only available for
zfs_volume
.
Updated example/zfs.nix file:
{
datasets = {
zfs_fs = {
type = "zfs_fs";
mountpoint = "/zfs_fs";
options."com.sun:auto-snapshot" = "true";
};
zfs_unmounted_fs = {
type = "zfs_fs";
options.mountpoint = "none";
};
zfs_legacy_fs = {
type = "zfs_fs";
options.mountpoint = "legacy";
mountpoint = "/zfs_legacy_fs";
};
zfs_testvolume = {
type = "zfs_volume";
size = "10M";
content = {
type = "filesystem";
# ...
}
Note: The zfs_type
attribute has been replaced with a type attribute for each
dataset, and the size
attribute is only available for zfs_volume
. These
changes have been reflected in the example/zfs.nix
file.
The lvm_lv
type is always part of an lvm_vg
and it is no longer necessary to
specify the type.
This means that if you were using the lvm_lv
type in your code, you should
remove it. For example, if you were defining an lvm_lv
type like this:
{
type = "lvm_lv";
size = "10G";
# ...
}
You should now define it like this:
{
size = "10G";
# ...
}
Note that the type
field is no longer necessary and should be removed from
your code.
Partition types are now always part of a table and cannot be specified individually anymore. This change makes the library more consistent and easier to use.
Example of how to change code:
Before:
{
type = "partition";
name = "ESP";
start = "1MiB";
end = "100MiB";
part-type = "primary";
}
After:
{
name = "ESP";
start = "1MiB";
end = "100MiB";
part-type = "primary";
}
Note that the type
field is no longer necessary and should be removed from
your code.
disk config now needs to be inside a disko.devices attrset always
the extraArgs option in the luks type was renamed to extraFormatArgs
btrfs, btrfs_subvol
filesystem and lvm_lv
extraArgs are now lists