Hetzner cloud ARM (QEMU) install can't boot (waiting for device...)

I’m trying to install NixOS on Hetzner clound ARM VM, which uses QEMU. The installation succeeds, but when booting, I get waiting for device /dev/disk/by-partlabel/disk-_dev_sda-main to appear................. and the boot is stuck there.

I’m using disko for partitioning, and I do have the autogenerated hardware configuration. Both are here.

The disko config is imported as imports = [ (import ./disko.nix { inherit lib; disks = [ "/dev/sda" ]; }) ]; , and I also have fileSystems."/persist".neededForBoot = true; (used by impermanence).

Edit: I managed to open an interactive shell to try to debug. There, I can see there’s no /dev/disk/by-partlabel at all. There’s only /dev/disk/by-diskseq, which contains only the loop devices. Also no /dev/sda (even though my boot partition is /dev/sda1, so that was clearly read by the bootloader).

1 Like

I’ve been trying to debug this, and I found that the driver used to read the disk is virtio-scsi. In the interactive shell I can enter after boot fails, lsmod doesn’t list this driver, and trying to modprobe virtio_scsi says it can’t be found.

However, it is right there in the boot.initrd.availableKernelModules list in the hardware-configuration.nix.

I’m not sure if that’s the right direction to go in…

1 Like

Looks a bit like the old bug mentioned in the answer to redhat - SCSI virtual disks not showing up on RHEL 7.X KVM guests - Server Fault

It looks similar symptom-wise, but it’s not the same. I think (though I could be wrong) my issue is that the driver, virtio-scsi, is missing from the initrd, even though it should be added to boot.initrd.availableKernelModules.

1 Like

So - the issue was:

imports = [
  # ./hardware-configuration.nix

And thus the module wasn’t available…

1 Like

Sometimes it’s so obvious :wink:
Any special plans with this ARM vm?