Hey,
I recently got an Hetzner auction server up and running and published a git repo of my setup. That server had 2x NVME disks and was using a AMD cpu and I asked the Hetzner support to enable UEFI boot for it. It worked well and I didn’t have any issues.
Now I’m trying to setup another server which is using solely HDDs and Intel CPU and has a legacy boot.
I tried to use the same setup as before but I replaced the srvos module from AMD to Intel:
srvos.nixosModules.hardware-hetzner-online-intel
When the nixos-anywhere completes the server sadly doesn’t come back up.
I ordered a KVM console and saw that when it’s booting up it doesn’t find the boot image and throws this error:
“No bootable device or remote boot image found”
Is there a way to verify the grub settings before restarting the system when the installation is complete?
These are my boot loader settings:
config = {
# We don't use systemd-boot because Hetzner uses BIOS legacy boot.
# Source: https://gist.github.com/bitonic/78529d3dd007d779d60651db076a321a
boot.loader.systemd-boot.enable = false;
boot.loader.grub = {
enable = true;
efiSupport = true;
efiInstallAsRemovable = true;
};
...
}
All of my disks have 1Mb partition for GRUB, 1Gb partition for EFI and then rest of the disk is for zfs:
This happened because the server I was using had Adaptec 8405 raid controller and when I used it in HBA mode none of the drives were bootable. I needed to first create 1 logical volume with the arcconf inside Hetzner Rescue System and then it boots nicely to the GRUB.
I’m now able to see the different boot options in GRUB when using the Hetzner KVM console:
But somehow after the grub selects the default option it fails for:
Timed out waiting for device /dev/disk/by-partlabel/disk-main-system.
disk-main-system is where my system should be installed with disko:
disko.devices = {
disk = {
sda = {
# The following disk is a RAID 1 volume in the raid controller
# Otherwise the system doesn't boot up because the Adaptec 8405 doesn't show anything to BIOS
device = "/dev/disk/by-id/scsi-25869668600d00000";
type = "disk";
content = {
type = "gpt";
partitions = {
boot = {
size = "1M";
type = "EF02"; # for grub MBR
priority = 1; # Needs to be first partition
};
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "umask=0077" ];
};
};
system = {
size = "100%";
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/";
};
};
};
};
};
};
};
Would someone know what might cause this behaviour?
I reinstalled Ubuntu from Hetzner again and ran lsmod to see which kind of kernel modules it was using. One kernel module cought my eye: aacraid. It seemed to be related to the Adaptec raid controller I had been using.
I then added following parameters to my config and reran the nixos-anywhere deployment:
boot.kernelParams = [ "aacraid.expose_physicals=1" ];
boot.initrd.availableKernelModules = [ "aacraid" ];
And it finally booted and responded to ping and ssh service came up.
This server model is not anymore available but if someone wants to run NixOS on Hetzner auction server SX292 with Adaptec raid controller remember to create at least 1 bootable volume:
# Run these commands from Hetzner rescue mode before using nixos-anywhere
# Delete all logical volumes
$ arcconf DELETE 1 LOGICALDRIVE ALL
# Put all disks to raw pass through mode
$ arcconf TASK START 1 DEVICE ALL uninitialize
# Ensure you are using RAID (Expose Raw) mode
$ arcconf SETCONTROLLERMODE 1 0
# Check all connected drives and that their count matches on what you bought
$ arcconf SLOTCONFIG 1 ALL MAP
# I selected from this 2 of the oldest disks for the system since I’m happy if the system is down for a while
# Start RAID1 with 2 disks based on their channel and device id (My first disk was at 0 & 4 and second 0 & 6)
$ arcconf TASK START 1 DEVICE 0 4 INITIALIZE noprompt
$ arcconf TASK START 1 DEVICE 0 6 INITIALIZE noprompt
# Create a striped raid volume (RAID1) from the 2 selected disk
$ arcconf CREATE 1 LOGICALDRIVE MAX 1 0 4 0 6 noprompt
1 Like