3CX: Azure Linux VM startet nach Update nur noch bis GRUB

In diesem Fall ging es um eine Debian-VM in Microsoft Azure, auf der eine produktive Anwendung lief. Die VM war über Nacht ausgefallen und am nächsten Morgen weder per SSH noch über die Weboberfläche der Anwendung erreichbar.

Im Azure Portal wurde die VM weiterhin als „Wird ausgeführt“ angezeigt. Auch ein Stoppen und erneutes Starten brachte keine Änderung.

Am Ende lag das Problem nicht an Azure selbst, sondern am GRUB-Bootloader der VM.

Fehlerbild

Das Fehlerbild war zunächst relativ unspezifisch:

  • VM wird in Azure als gestartet angezeigt
  • SSH funktioniert nicht
  • Weboberfläche der Anwendung ist nicht erreichbar
  • Neustart der VM bringt keine Änderung
  • CPU-Auslastung nach dem Ausfall nur noch sehr gering

In den Azure-Metriken war außerdem zu erkennen, dass die Verfügbarkeit der VM während der Nacht auf 0 gefallen war.

Da sowohl SSH als auch die eigentliche Anwendung nicht mehr erreichbar waren, lag die Vermutung nahe, dass nicht nur ein einzelner Dienst ausgefallen war.

Resource Health prüfen

Ein erster sinnvoller Blick geht in Azure auf:

VM → Resource Health / Ressourcenintegrität

Dort war zum Zeitpunkt des Ausfalls ein Neustart zu sehen, der aus der VM selbst heraus ausgelöst worden war.

Sinngemäß:

Reboot initiated from inside the machine

Damit war zumindest klar, dass kein offensichtlicher Azure-Hostfehler den Neustart ausgelöst hatte.

Als mögliche Ursache kamen damit eher Dinge wie automatische Updates, Kernel-Updates oder ein geplanter Neustart aus dem Betriebssystem selbst infrage.

Startdiagnose prüfen

Der nächste wichtige Punkt war die Azure-Startdiagnose:

VM → Boot Diagnostics / Startdiagnose

Dort zeigte der Konsolen-Screenshot:

GNU GRUB version 2.x

grub>

Damit war die Richtung ziemlich eindeutig.

Debian wurde gar nicht mehr vollständig gestartet. Die VM hing bereits im GRUB-Bootloader.

Damit konnte man Netzwerk, SSH, Firewall-Regeln oder die eigentliche Anwendung zunächst weitgehend aus der Fehlersuche herausnehmen.

Serielle Konsole

Zusätzlich wurde die serielle Konsole getestet.

Die Verbindung zur VM konnte zwar hergestellt werden, es erschien aber keine Login-Konsole und auch keine weitere Ausgabe.

Das passte zum bisherigen Fehlerbild, da das Betriebssystem zu diesem Zeitpunkt gar nicht bis zu einem normalen Systemstart kam.

Vor der Reparatur: Snapshot erstellen

Bevor Änderungen an der VM vorgenommen wurden, wurde zunächst ein Snapshot der OS-Disk erstellt.

Der Weg ist beispielsweise:

VM → Datenträger → Betriebssystemdatenträger → Snapshot erstellen

Gerade bei Bootproblemen ist das sinnvoll, damit vor Reparaturversuchen ein unveränderter Stand der Disk erhalten bleibt.

Zusätzlich wurde der Snapshot als VHD exportiert und lokal heruntergeladen.

Fehler lokal mit Hyper-V nachstellen

Die heruntergeladene VHD wurde anschließend testweise in Hyper-V eingebunden.

Da es sich bei der Azure-VM um eine Generation-1-VM handelte, wurde auch lokal eine Hyper-V-VM der Generation 1 erstellt.

Nach dem Start zeigte sich lokal exakt das gleiche Bild:

grub>

Damit war bestätigt, dass das Problem tatsächlich auf der Systemdisk lag und nicht durch Azure selbst verursacht wurde.

GRUB prüfen

Am GRUB-Prompt wurde zunächst geprüft, welche Datenträger erkannt wurden:

ls

Beispielausgabe:

(hd0) (hd0,msdos1)

Damit war klar, dass die VM klassisch per BIOS/MBR startet und eine Linux-Systempartition vorhanden war.

Beim Versuch, auf die Partition zuzugreifen:

ls (hd0,msdos1)/

startete die VM direkt neu.

Das deutete darauf hin, dass GRUB selbst beim Zugriff auf die Partition bzw. auf die dort vorhandenen Bootinformationen Probleme hatte.

Dateisystem prüfen

Die VHD wurde anschließend über ein Debian-Rescue-System gestartet.

Die vorhandene Linux-Partition wurde zunächst nur geprüft:

fsck.ext4 -n /dev/sda1

Das Dateisystem wurde dabei als sauber gemeldet.

Damit war zumindest kein offensichtlicher ext4-Dateisystemfehler vorhanden.

Auffälligkeiten im Boot-Verzeichnis

Im Verzeichnis /boot waren mehrere Kernel vorhanden.

Beispielsweise:

vmlinuz-6.x.x-xx-amd64
vmlinuz-6.x.x-yy-amd64

Auffällig war dabei, dass der neueste Kernel, die zugehörige initrd und:

/boot/grub/grub.cfg

alle ungefähr zu dem Zeitpunkt geändert worden waren, zu dem laut Azure Resource Health auch der Neustart der VM erfolgt war.

Der vermutete Ablauf war damit:

Automatisches Update
        ↓
Kernel-/GRUB-Anpassung
        ↓
Automatischer Neustart
        ↓
GRUB startet nicht mehr korrekt
        ↓
VM bleibt bei grub> hängen

GRUB lokal reparieren

Da lokal nur mit einer Kopie der Azure-Disk gearbeitet wurde, konnte die Reparatur dort zunächst gefahrlos getestet werden.

GRUB wurde neu installiert:

grub-install --target=i386-pc --recheck /dev/sda

Anschließend wurde die GRUB-Konfiguration neu erzeugt:

update-grub

Danach:

sync
poweroff

Nach Entfernen des Rescue-Mediums startete die lokale VM wieder vollständig.

Damit war klar, dass die Reparatur grundsätzlich funktioniert.

Reparatur direkt in Azure

Nachdem die lokale Reparatur erfolgreich getestet worden war, wurde die Azure-eigene VM-Reparatur verwendet.

Azure Cloud Shell öffnen

Im Azure Portal lässt sich die Cloud Shell direkt über das Terminal-Symbol öffnen.

Als Umgebung wurde Bash verwendet.

Zunächst wurde die vorhandene VM geprüft:

az vm list -o table

Beispiel:

Name                 ResourceGroup      Location
-------------------  -----------------  ----------
vm-linux-prod-01     RG-LINUX-PROD      westeurope

VM-Repair-Erweiterung installieren

Falls noch nicht vorhanden:

az extension add -n vm-repair

Optional kann die Erweiterung anschließend aktualisiert werden:

az extension update -n vm-repair

GRUB automatisch reparieren

Für eine Generation-1-/BIOS-Linux-VM kann die Azure-Reparatur mit grubfix ausgeführt werden.

Beispiel:

az vm repair repair-button \
  --button-command grubfix \
  --verbose \
  --resource-group RG-LINUX-PROD \
  --name vm-linux-prod-01

Azure erstellt dabei automatisch eine temporäre Reparaturumgebung.

Vereinfacht passiert dabei Folgendes:

  • Kopie der OS-Disk wird erstellt
  • temporäre Repair-VM wird angelegt
  • Disk wird dort als Datendisk eingebunden
  • GRUB wird repariert
  • Repair-VM wird anschließend wieder entfernt
  • reparierte Disk wird an die ursprüngliche VM zurückgegeben

Bei erfolgreichem Abschluss erscheint sinngemäß:

The repairs were complete using the script.
The repair disk was restored to the source VM.

status: SUCCESS

Ergebnis

Nach Abschluss der Azure-Reparatur startete die VM wieder vollständig.

Danach funktionierten auch wieder:

  • SSH
  • Weboberfläche
  • Anwendung
  • Azure VM Agent

Das eigentliche Linux-Dateisystem war nicht beschädigt. Das Problem lag im GRUB-Bootloader bzw. in dessen Zustand nach dem vorherigen Update.

Nachträgliche Prüfung der Ursache

Nach erfolgreichem Start lohnt sich noch ein Blick in die Paket- und Update-Logs.

Beispielsweise:

grep -iE 'linux-image|grub|initramfs' /var/log/dpkg.log | tail -100

und:

cat /var/log/apt/history.log

Falls die Logs bereits rotiert wurden:

zgrep -iE 'linux-image|grub|initramfs' /var/log/dpkg.log.*

Damit lässt sich meist relativ gut nachvollziehen, welche Pakete unmittelbar vor dem fehlerhaften Neustart aktualisiert wurden.

Fazit

Wenn eine Linux-VM in Azure weiterhin als „Running“ angezeigt wird, aber weder SSH noch Anwendungen erreichbar sind, muss das Problem nicht zwingend im Netzwerk oder bei Azure selbst liegen.

Die Boot Diagnostics sind in solchen Fällen eine der ersten Stellen, die geprüft werden sollten.

Wenn dort nur noch:

grub>

zu sehen ist, liegt das Problem bereits vor dem eigentlichen Linux-Start.

In diesem Fall konnte die VM ohne Neuinstallation und ohne Restore aus einem älteren Backup wieder vollständig in Betrieb genommen werden.

Disclaimer

Dieser Artikel wurde mit Unterstützung von dieser KI gemacht, von der gerade alle reden und die den RAM so teuer macht…


Sie benötigten persönliche Unterstützung oder haben nicht die richtige Lösung für Ihr Problem gefunden?

Dieser Blog wird von mir, Jan Kappen, in seiner Freizeit betrieben, hier beschreibe ich Lösungen für Probleme aller Art oder technische Anleitungen mit Lösungsansätzen.

Die berufliche Unabhängigkeit

Ich bin seit Januar 2020 vollständig selbstständig und habe meine eigene Firma gegründet, die Building Networks mit Sitz in Winterberg im schönen Sauerland. Hier stehe ich als Dienstleister gerne für Anfragen, Support oder Projekte zur Verfügung.

Die Firma Building Networks bietet Ihnen:

  • Hilfe und Support per Telefon, Fernwartung oder persönlich vor Ort
  • Projekt-Unterstützung
  • Ausgezeichnete Kompetenz zu den Themen
    • Microsoft Hyper-V
    • Microsoft Failover Clustering & HA
    • Storage Spaces Direct (S2D) & Azure Stack HCI
    • Veeam Backup & Recovery
    • Microsoft Exchange
    • Microsoft Exchange Hybrid Infrastruktur
    • Microsoft Active Directory
    • Microsoft Office 365
    • Ubiquiti
    • 3CX VoIP PBX
    • Fortinet Network Security
    • Baramundi Software
    • ...

Ich freue mich über Ihren Kontakt, weitere Informationen finden Sie auf der Webseite meiner Firma unter Building-Networks.de

Jan

Jan Kappen arbeitet seit 2005 in der IT. Er hat seine Ausbildung 2008 abgeschlossen und war bis 2018 als IT-Consultant im Bereich Hyper-V, Failover Clustering und Software Defined Storage unterwegs. Seit 2015 wurde er jährlich von Microsoft als Most Valuable Professional (MVP) im Bereich "Cloud & Datacenter Management" ausgezeichnet für seine Kenntnisse und die Weitergabe seines Wissens. Jan ist häufig auf Konferenzen als Sprecher zu finden, weiterhin bloggt er viel. Von September 2018 bis Dezember 2019 war Jan als Senior Network- und Systemadministrator bei einem großen mittelständischen Unternehmen im schönen Sauerland angestellt. Im Januar 2020 hat er den Sprung in die Selbstständigkeit gewagt und ist seitdem Geschäftsführer der Firma Building Networks in Winterberg. In seiner Freizeit kümmert er sich um das Freifunk-Netzwerk in Winterberg und Umgebung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert