Skip to content
This repository has been archived by the owner on Feb 27, 2024. It is now read-only.

Device tree representation

aszlig edited this page Oct 20, 2014 · 1 revision

Kickstart reference

clearpart --all --initlabel --drives=vda,vdb

part swap1 --size=500 --label=swap1 --fstype=swap --ondisk=vda
part swap2 --size=500 --label=swap2 --fstype=swap --ondisk=vdb

part raid.1 --grow --ondisk=vda
part raid.2 --grow --ondisk=vdb

raid / --level=1 --device=md0 --fstype=ext4 --label=root raid.1 raid.2

Nix version

{
  storage = {
    partition.raid1.grow = true;
    partition.raid1.isPartOf = [ "disk.vda" ];
    partition.raid1.after = [ "partition.swap1" ]; # ¹

    partition.raid2.grow = true;
    partition.raid2.isPartOf = [ "disk.vdb" ];
    partition.raid2.after = [ "partition.swap2" ]; # ¹

    partition.swap1.type = "partition";
    partition.swap1.size = "500M";
    partition.swap1.isPartOf = [ "disk.vda" ];

    partition.swap2.type = "partition";
    partition.swap2.size = "500M";
    partition.swap2.isPartOf = [ "disk.vdb" ];

    mdraid.root.level = 1;
    mdraid.root.isPartOf = [ "partition.raid1" "partition.raid2" ];

    disk.vda.clear = true;
    disk.vda.initlabel = true;

    disk.vdb.clear = true;
    disk.vdb.initlabel = true;
  };

  fileSystems."/" = {
    label = "root";
    fsType = "ext4";
    storage = "mdraid.root";
  };

  swapDevices = [
    { label = "swap1"; storage = "partition.swap1"; }
    { label = "swap2"; storage = "partition.swap2"; }
  ];
}
  1. Note that the after attribute isn't needed in this case and only for illustration purposes, because by default partitions are ordered by size so on almost all systems, swap1/swap2 will be the first partitions on the disks.

Test configurations

ext2/3/4

{
  storage = {
    disk.vdb.clear = true;
    disk.vdb.initlabel = true;

    partition.boot.size = "100M";
    partition.boot.isPartOf = [ "disk.vdb" ];
    partition.swap.size = "500M";
    partition.swap.isPartOf = [ "disk.vdb" ];
    partition.nix.size = "500M";
    partition.nix.isPartOf = [ "disk.vdb" ];
    partition.root.grow = true;
    partition.root.isPartOf = [ "disk.vdb" ];
  };

  fileSystems."/boot" = {
    label = "boot";
    fsType = "ext2";
    storage = "partition.boot";
  };

  fileSystems."/nix" = {
    label = "nix";
    fsType = "ext3";
    storage = "partition.nix";
  };

  fileSystems."/" = {
    label = "root";
    fsType = "ext4";
    storage = "partition.root";
  };

  swapDevices = [
    { label = "swap"; storage = "partition.swap"; }
  ];
}

btrfs

{
  storage = {
    disk.vdb.clear = true;
    disk.vdb.initlabel = true;

    partition.swap1.size = "500M";
    partition.swap1.isPartOf = [ "disk.vdb" ];
    partition.btrfs1.grow = true;
    partition.btrfs1.isPartOf = [ "disk.vdb" ];

    disk.vdc.clear = true;
    disk.vdc.initlabel = true;

    partition.swap2.size = "500M";
    partition.swap2.isPartOf = [ "disk.vdc" ];
    partition.btrfs2.grow = true;
    partition.btrfs2.isPartOf = [ "disk.vdc" ];

    btrfs.root.data = 0;
    btrfs.root.metadata = 1;
  };

  fileSystems."/" = {
    label = "root";
    storage = "btrfs.root";
  };

  swapDevices = [
    { label = "swap1"; storage = "partition.swap1"; }
    { label = "swap2"; storage = "partition.swap2"; }
  ];
}

F2FS

{
  storage = {
    disk.vdb.clear = true;
    disk.vdb.initlabel = true;

    partition.swap.size = "500M";
    partition.swap.isPartOf = [ "disk.vdb" ];
    partition.boot.size = "100M";
    partition.boot.isPartOf = [ "disk.vdb" ];
    partition.root.grow = true;
    partition.root.isPartOf = [ "disk.vdb" ];
  };

  fileSystems."/boot" = {
    label = "boot";
    fsType = "f2fs";
    storage = "partition.boot";
  };

  fileSystems."/" = {
    label = "root";
    fsType = "f2fs";
    storage = "partition.root";
  };

  swapDevices = [
    { label = "swap"; storage = "partition.swap"; }
  ];
}

mdraid

{
  storage = {
    disk.vdb.clear = true;
    disk.vdb.initlabel = true;

    partition.raid01.size = "200M";
    partition.raid01.isPartOf = [ "disk.vdb" ];
    partition.swap1.size = "500M";
    partition.swap1.isPartOf = [ "disk.vdb" ];
    partition.raid11.grow = true;
    partition.raid11.isPartOf = [ "disk.vdb" ];

    disk.vdc.clear = true;
    disk.vdc.initlabel = true;

    partition.raid02.size = "200M";
    partition.raid02.isPartOf = [ "disk.vdc" ];
    partition.swap2.size = "500M";
    partition.swap2.isPartOf = [ "disk.vdc" ];
    partition.raid12.grow = true;
    partition.raid12.isPartOf = [ "disk.vdc" ];

    mdraid.boot.level = 1;
    mdraid.boot.isPartOf = [ "partition.raid01" "partition.raid02" ];

    mdraid.root.level = 1;
    mdraid.root.isPartOf = [ "partition.raid11" "partition.raid12" ];
  };

  fileSystems."/boot" = {
    label = "boot";
    fsType = "ext3";
    storage = "mdraid.boot";
  };

  fileSystems."/" = {
    label = "root";
    fsType = "xfs";
    storage = "mdraid.root";
  };

  swapDevices = [
    { label = "swap1"; storage = "partition.swap1"; }
    { label = "swap2"; storage = "partition.swap2"; }
  ];
}

mdraid + LVM + LUKS

{
  storage = {
    disk.vdb.clear = true;
    disk.vdb.initlabel = true;

    partition.raid1.grow = true;
    partition.raid1.isPartOf = [ "disk.vdb" ];

    disk.vdc.clear = true;
    disk.vdc.initlabel = true;

    partition.raid2.grow = true;
    partition.raid2.isPartOf = [ "disk.vdc" ];

    mdraid.raid.level = 1;
    mdraid.raid.isPartOf = [ "partition.raid1" "partition.raid2" ];

    luks.volroot.passphrase = "x";
    luks.volroot.isPartOf = [ "mdraid.raid" ];

    volgroup.nixos.isPartOf = [ "luks.volroot" ];

    logvol.boot.size = "200M";
    logvol.boot.isPartOf = [ "volgroup.nixos" ];

    logvol.swap.size = "500M";
    logvol.swap.isPartOf = [ "volgroup.nixos" ];

    logvol.root.grow = true;
    logvol.root.isPartOf = [ "volgroup.nixos" ];
  };

  fileSystems."/boot" = {
    label = "boot";
    fsType = "ext3";
    storage = "logvol.boot";
  };

  fileSystems."/" = {
    label = "root";
    fsType = "ext4";
    storage = "logvol.root";
  };

  swapDevices = [
    { label = "swap"; storage = "logvol.swap"; }
  ];
}