| 10 Nov 2022 |
@elvishjerricco:matrix.org | and | 18:29:37 |
@elvishjerricco:matrix.org | even if you're not using udev/systemd, the btrfs tools by default don't let you mount degraded | 18:29:56 |
@me:linj.tech | In reply to @elvishjerricco:matrix.org even if you're not using udev/systemd, the btrfs tools by default don't let you mount degraded degraded can be set I think | 18:30:38 |
@elvishjerricco:matrix.org | yea it has to be a mount option | 18:30:45 |
@elvishjerricco:matrix.org | but that doesn't affect the udev rule | 18:30:59 |
@elvishjerricco:matrix.org | I think I see how this works:
https://github.com/systemd/systemd/blob/main/rules.d/64-btrfs.rules.in
Basically there's a udev builtin btrfs ready that checks if a device is ready to be used as a btrfs FS; i.e. if all its partner disks are present. If not, it sets SYSTEMD_READY=0 so that it doesn't activate the .device unit. Once one of them says its ready, it allows SYSTEMD_READY to remain 1, then triggers the others to check again. This will (presumably) cause all the others to check and set SYSTEMD_READY=1. Now if any of those devices is the device unit for your mount unit, the mount unit can now activate
| 18:31:16 |
@elvishjerricco:matrix.org | ^ That's the message forwarded from what I found yesterday | 18:31:30 |
@elvishjerricco:matrix.org | So the rule basically says "no device is available until all are" | 18:32:28 |
@elvishjerricco:matrix.org | dunno if we include that rule in systemd-stage-1 or not | 18:32:43 |
@elvishjerricco:matrix.org | I think we do? | 18:32:45 |
@elvishjerricco:matrix.org | Looks like we do | 18:36:11 |
@me:linj.tech | thanks for the info. | 18:36:28 |
@elvishjerricco:matrix.org | In reply to @me:linj.tech no, the old initrd just dies if one disk is missing. Because of that, I try this systemd one I'd be curious what it looks like when the scripted initrd dies this way | 18:39:04 |
@me:linj.tech | kernel panic | 18:39:29 |
@elvishjerricco:matrix.org | linj: O_O | 18:39:39 |
@me:linj.tech | I can take a screenshot if you want | 18:39:46 |
@elvishjerricco:matrix.org | that would be wonderful | 18:39:52 |
@me:linj.tech |  Download image.png | 18:41:19 |
@elvishjerricco:matrix.org | I see | 18:41:50 |
@elvishjerricco:matrix.org | It dies because it doesn't find luks-2 at all | 18:41:56 |
@me:linj.tech | the old initrd is easy to workaround for this case | 18:41:57 |
@elvishjerricco:matrix.org | so | 18:42:19 |
@elvishjerricco:matrix.org | once you're in the emergency shell in the systemd stage 1, you can probably manually mount the degraded btrfs root and let it continue with systemctl default | 18:42:44 |
@me:linj.tech | https://github.com/NixOS/nixpkgs/blob/717ccacc16e8de01ff06f2f83db6415c01f11527/nixos/modules/system/boot/luksroot.nix#L155 | 18:42:44 |
@me:linj.tech | just do not die and skip some functions | 18:42:57 |
@elvishjerricco:matrix.org | linj: Btw what does your fileSystems."/".device look like? | 18:45:20 |
@me:linj.tech | emm, I use root on tmpfs | 18:45:51 |
@elvishjerricco:matrix.org | oh | 18:45:58 |
@elvishjerricco:matrix.org | then whatever your btrfs fileSystem device looks like | 18:46:10 |
@me:linj.tech | boot.initrd.luks.devices = {
# TODO what if one disk is missing
"nixos-1" = {
allowDiscards = true;
bypassWorkqueues = true;
device = "/dev/disk/by-label/luks-1";
# fallbackToPassword = true;
# TODO x-initrd.attach
# TODO x-systemd.device-timeout=
crypttabExtraOpts = [ "nofail" "x-systemd.device-timeout=10" ];
};
"nixos-2" = {
allowDiscards = true;
bypassWorkqueues = true;
device = "/dev/disk/by-label/luks-2";
# fallbackToPassword = true;
crypttabExtraOpts = [ "nofail" "x-systemd.device-timeout=10" ];
};
};
fileSystems."/" =
{ device = "none";
fsType = "tmpfs";
options = [ "defaults" "size=500M" "mode=755" ];
};
# TODO what if one disk is missing
fileSystems."/boot" =
{ device = "/dev/disk/by-label/efi-1";
fsType = "vfat";
options = [ "nofail" ];
};
# TODO what if one disk is missing
fileSystems."/boot2" =
{ device = "/dev/disk/by-label/efi-2";
fsType = "vfat";
options = [ "nofail" ];
};
# TODO what if one disk is missing
fileSystems."/nix" =
{ # device = "/dev/disk/by-label/nixos";
device = "/dev/disk/by-uuid/f93cfbf1-e9b4-46ca-b7cb-6f3fb1554fbb";
fsType = "btrfs";
options = [ "degraded" "noatime" "ssd" "compress=zstd:1" "space_cache=v2" "subvol=@nix" ];
};
fileSystems."/var" =
{ # device = "/dev/disk/by-label/nixos";
device = "/dev/disk/by-uuid/f93cfbf1-e9b4-46ca-b7cb-6f3fb1554fbb";
fsType = "btrfs";
options = [ "degraded" "noatime" "ssd" "compress=zstd:1" "space_cache=v2" "subvol=@var" ];
};
fileSystems."/home" =
{ # device = "/dev/disk/by-label/nixos";
device = "/dev/disk/by-uuid/f93cfbf1-e9b4-46ca-b7cb-6f3fb1554fbb";
fsType = "btrfs";
options = [ "degraded" "noatime" "ssd" "compress=zstd:1" "space_cache=v2" "subvol=@home" ];
neededForBoot = true;
};
fileSystems."/state" =
{ # device = "/dev/disk/by-label/nixos";
device = "/dev/disk/by-uuid/f93cfbf1-e9b4-46ca-b7cb-6f3fb1554fbb";
fsType = "btrfs";
options = [ "degraded" "noatime" "ssd" "compress=zstd:1" "space_cache=v2" "subvol=@state" ];
neededForBoot = true;
};
| 18:46:31 |