Disko
Disko is a utility and NixOS module for declarative disk partitioning.
Usage
The following example creates a new GPT partition table for the disk /dev/vda
including two partitions for EFI boot and a bcachefs root filesystem.
disko-config.nix
{ disks ? [ "/dev/vda" ], ... }: {
disko.devices = {
disk = {
vdb = {
device = builtins.elemAt disks 0;
type = "disk";
content = {
type = "table";
format = "gpt";
partitions = [
{
name = "ESP";
start = "1MiB";
end = "500MiB";
bootable = true;
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
}
{
name = "root";
start = "500MiB";
end = "100%";
part-type = "primary";
content = {
type = "filesystem";
format = "bcachefs";
mountpoint = "/";
};
}
];
};
};
};
};
}
The following command will apply the disk layout specified in the configuration and mount them afterwards. Warning: This will erase all data on the disk.
# sudo nix run github:nix-community/disko -- --mode zap_create_mount ./disko-config.nix
Alternativley use a disk layout configuration of a remote repository containing a flake.nix
file as an entry point. The --arg
parameter specifies the target disk /dev/sda
.
# sudo nix run github:nix-community/disko/refactor -- --mode zap_create_mount --flake github:Lassulus/flakes-testing#fnord --arg disks '[ "/dev/sda" ]'
Flakes support is currently broken in the latest disko release, therefore we use the refactor
branch until the issue is fixed.
The commands above requires Flake features available on your system.
To verify both partitions got mounted correctly, run
# mount | grep /mnt