Dies ist eine alte Version des Dokuments!


Proxmox VM bootet nicht mehr - nur mehr UEFIshell - was ist zu tun?

Beim Update von Proxmox 6.1 auf 6.2 gab es einige Änderungen. Vorallem dieser Ausschnitt.

Known Issues with OVMF/UEFI disks

An EFI disk on a storage which doesn't allow for small (128 KB) images (for example: CEPH, ZFS, LVM(thin)), was not correctly mapped to the VM. While fixed now, such existing setup may need manual intervention:

  • If your EFI disks is on qcow2 you do not have to do anything.
  • Before the upgrade, make sure that on your ESP, the EFI boot binary exists at \EFI\BOOT\BOOTX64.EFI (the default fallback when no EFI boot entries are set). Windows and some Linux VMs using systemd-boot should do that automatically
  • After the upgrade, you can recreate the EFI boot entries (for example, with efibootmgr) and delete the BOOTX64.EFI again(if it did not exist before).
  • If you already upgraded and it does not boot, Start-up the VM → press ESC to get into the OVMF menu. Then „Boot Maintenance Manager“ → „Boot From File“ → choose Disk with the EFI System Partition (ESP). Now you can navigate to the EFI executable, for example for Debian: EFI/debian/grubx64.efi or for Fedora: EFI/fedora/shimx64-fedora.efi. Once you found the correct one boot and after that restore the efiboot entry, see your Distribution's Documentation for this or use also the OVMF firmware „Boot Maintenance → Boot Options → Add Boot Option“ GUI.

Auf Deutsch: „schaut sich vorher nicht gründlich die Changelogs an, kann es sein das einige/viele VM's nicht mehr starten die UEFI verwenden!“

An dieser Stelle darf ich dich beruhigen, es ist alles halb so wild, viel mehr easy… wenn man weiß wo man was bewegen muss um sein Ziel zu erreichen.

Windows und Ubuntu hatte damit kein Problem. Univention (Debian) 4.4.4 schon. Das UEFI Boot liegt dort nicht im Recovery/Standardordner. Somit booten diese VM's nach dem Update auf PVE 6.2 nicht mehr. Es gibt nun mehrere Möglichkeiten das ganze zu fixen.

  1. Ganz einfach über die UEFI Konsole
  2. Ändern des Maschinentyps und booten der VM (Workaround nicht empfohlen)
  3. Booten mit einer LiveISO und neu setzen des Eintrages per efibootmgr

Die UEFI Konsole (beim Start der VM hat man ein paar Sekunden Zeit für ESC) kann man das Bootmenü voll bearbeiten, neue Einträge generieren, bearbeiten, Prioritäten festlegen.

Ist man in der UEFI Konsole wählt man im Menü: Boot Maintenance Manager → Boot Options → Add Boot Option, wählt dann den nächsten Beitrag und man befindet sich dann im UEFI Fileexplorer. Dort hüpft man in der Ordnerhirachie bequem zum UEFI Bootile das man möchte und wählt es aus. In unserem Fall ist das: EFI\univention\shimx64.efi Danach speichert man und ändert noch die Bootreihenfolge mit „Change Boot Order“. Wieder speicher und Reseten. Fertig.

Man kann diese File womit wir oben gerade einen neuen Booteintrag erzeugt haben, auch ohne Booteintrag manuell starten. Als Beispiel betreten wir wieder die UEFI Konsole: Boot Maintenance Manager → Boot From File Und geht dann dort wieder mit dem UEFI Fileexplorer bequem zu seinem Bootfile.

Ändert man den Maschinentyp der VM in Proxmox, bootet die VM wie gewohnt hoch. Eine Lösung ist es jedoch nicht, da dies ziemlich sicher irgendwann, wenn der Maschinentyp rausfällt nicht mehr funktionieren wird.

qm set 111 -machine pc-i440fx-4.0

Was man damit sehrwohl gut erreichen ist, wenn man nicht weiß welches File tatsächlich zum Booten verwendet wird, bootet man so die VM und liest mit efibootmgr -v genau dies aus. In Univention könnte es so aussehen:

Boot0007* univention    PciRoot(0x0)/Pci(0x5,0x0)/SCSI(0,0)/HD(1,GPT,c59de47c-8df8-43ad-a653-216309c0edf3,0x800,0x1dc800)/File(\EFI\univention\shimx64.efi)

Das ganze kann man natürlich auch mit einer LiveISO lösen. Hierzu bootet man das OS seiner Wahl und bindet sämtliche Partitionen die für eine Chroot notwendig sind ein.

mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot/efi
for i in dev dev/pts proc sys sys/firmware; do mount --bind /$i /mnt/$i; done
chroot /mnt

In der Chroot angekommen sieht man wieder mit efibootmgr -v alle Einträge. Unter anderem ein etwas komisch zerstörter, was mal unserer war. Du darfst dort Einträge löschen, musst aber nicht. Mit der Priorität kannst du deinen Eintrag auch schieben wie du möchtest. Löschen funktioniert so:

efibootmgr -b 0004 -B 

Hiermit wurden nun der UEFI Booteintrag mit der Nummer 0004 gelöscht. Legen wir nun unseren neuen Eintrag an.

efibootmgr --create --disk /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0 --part 1 --label "univention" --loader \\EFI\\univention\\shimx64.efi

Bei meinen Tests wurde der Beitrag automatisch nach oben gereiht. Sollte das nicht der Fall sein, oder möchtest du die Reihenfolge noch ändern, kannst du dich diesem Befehl bedienen.

efibootmgr -o 0005,0003,0004,0007

Das setzt die Prioritäten nach der Reihe.