Delen via


Proactief ervoor zorgen dat u toegang hebt tot GRUB en sysrq kunt u veel uitvalt

Van toepassing op: ✔️ Virtuele Linux-machines

Opmerking

New! VM-hulp proberen voor snellere diagnostische gegevens

U wordt aangeraden VM-hulp uit te voeren voor Windows of VM-hulp voor Linux. Met deze diagnostische hulpprogramma's op basis van scripts kunt u veelvoorkomende problemen identificeren die van invloed zijn op de Azure VM-gastagent en de algehele VM-status.

Als u toegang hebt tot de seriële console en GRUB, worden de hersteltijden van uw virtuele IaaS Linux-machine in de meeste gevallen verbeterd. GRUB biedt herstelopties die anders langer duren om uw VIRTUELE machine te herstellen.

De redenen voor het uitvoeren van een VM-herstel zijn veel en kunnen worden toegeschreven aan scenario's zoals:

  • Beschadigde bestandssystemen/kernel/MBR (Master Boot Record)
  • Mislukte kernelupgrades
  • Onjuiste GRUB-kernelparameters
  • Onjuiste fstab-configuraties
  • Firewallconfiguraties
  • Wachtwoord verloren
  • SSHD-configuratiebestanden beheren
  • Netwerkconfiguraties

Veel andere scenario's, zoals hier wordt beschreven

Controleer of u toegang hebt tot GRUB en de seriële console op uw VM's die zijn geïmplementeerd in Azure.

Als u geen gebruik hebt van seriële console, raadpleegt u deze koppeling.

Tip

Zorg ervoor dat u back-ups van bestanden maakt voordat u wijzigingen aanbrengt

Bekijk deze video hieronder om te zien hoe u uw Linux-VM snel kunt herstellen zodra u toegang hebt tot GRUB

Video van Linux-VM herstellen

Er zijn een aantal methoden om het herstel van virtuele Linux-machines te helpen. In een cloudomgeving is dit proces lastig geweest. Er wordt voortdurend vooruitgang geboekt met hulpprogramma's en functies om ervoor te zorgen dat services snel worden hersteld.

Met de seriële Azure-console kunt u communiceren met uw Linux-VM alsof u zich in de console van een systeem bevonden.

U kunt veel configuratiebestanden bewerken, waaronder hoe de kernel wordt opgestart.

De meer ervaren Linux-/Unix-sys-beheerders waarderen de modus voor één gebruiker en noodgeval die toegankelijk zijn via de seriële Azure-console, waardoor schijfwisseling en VM-verwijdering voor veel herstelscenario's overbodig zijn.

De herstelmethode is afhankelijk van het probleem dat wordt ervaren, bijvoorbeeld een verloren of verkeerd geplaatst wachtwoord kan opnieuw worden ingesteld via de opties ->Wachtwoord opnieuw instellen in De Azure-portal. De functie Wachtwoord opnieuw instellen wordt een extensie genoemd en communiceert met de Linux-gastagent.

Andere extensies, zoals Aangepast script, zijn beschikbaar, maar voor deze opties is vereist dat de Linux waagent actief is en in een goede staat is, wat niet altijd het geval is.

Schermopname van de agentstatus op de pagina Eigenschappen in Azure Portal.

Ervoor zorgen dat u toegang hebt tot de Seriële Console van Azure en GRUB betekent dat een wachtwoordwijziging of een onjuiste configuratie binnen enkele minuten in plaats van uren kan worden gecorrigeerd. U kunt zelfs afdwingen dat de VIRTUELE machine wordt opgestart vanaf een alternatieve kernel als u meerdere kernels op schijf hebt in het scenario waarin uw primaire kernel beschadigd raakt.

Schermopname van het geselecteerde scherm voor het opstarten van het besturingssysteem in GRUB, waarin meerdere kernels kunnen worden gekozen.

Voorgestelde volgorde van herstelmethoden

Video over wisselen van schijf

Als u geen toegang hebt tot GRUB bekijkt u deze video en bekijkt u hoe u de procedure voor het wisselen van schijven eenvoudig kunt automatiseren om uw VIRTUELE machine te herstellen

Uitdagingen

Niet alle Linux Azure-VM's zijn standaard geconfigureerd voor GRUB-toegang en ze zijn allemaal geconfigureerd om te worden onderbroken met de sysrq-opdrachten. Sommige oudere distributies, zoals SLES 11, zijn niet geconfigureerd om de aanmeldingsprompt weer te geven in de seriële Console van Azure

In dit artikel bekijken we verschillende Linux-distributies en documentconfiguraties over het beschikbaar maken van GRUB.

Linux-VM configureren voor het accepteren van SysRq-sleutels

De sysrq-sleutel is standaard ingeschakeld voor sommige nieuwere Linux-distributies, hoewel op andere distributies kan worden geconfigureerd voor het accepteren van waarden alleen voor bepaalde SysRq-functies. Bij oudere distributies is het mogelijk volledig uitgeschakeld.

De SysRq-functie is handig voor het opnieuw opstarten van een vastgelopen of niet-reagerende VM rechtstreeks vanuit de Seriële Console van Azure, ook handig bij het verkrijgen van toegang tot het GRUB-menu. Als u een VIRTUELE machine opnieuw opstart vanuit een ander portalvenster of een ssh-sessie, kan uw huidige consoleverbinding worden verwijderd, waardoor grub-time-outs verlopen die worden gebruikt om het GRUB-menu weer te geven. De VM moet worden geconfigureerd om een waarde van 1 te accepteren voor de kernelparameter, waarmee alle functies van sysrq of 128 worden ingeschakeld, waardoor opnieuw opstarten/uitschakeling mogelijk is

Sysrq-video inschakelen

Als u de VM wilt configureren voor het accepteren van opnieuw opstarten via SysRq-opdrachten in Azure Portal, moet u een waarde van 1 instellen voor de kernelparameter kernel.sysrq

Als u deze configuratie opnieuw wilt laten opstarten, voegt u een vermelding toe aan het bestand sysctl.conf

sudo echo kernel.sysrq = 1 >> /etc/sysctl.conf

De kernelparameter dynamisch configureren

sudo sysctl -w kernel.sysrq=1

Als u geen hoofdtoegang hebt of sudo is verbroken, is het niet mogelijk sysrq te configureren vanaf een shellprompt.

U kunt sysrq in dit scenario inschakelen met behulp van Azure Portal. Deze methode kan nuttig zijn als het bestand sudoers.d/waagent is verbroken of is verwijderd.

Als u de Azure-portalbewerkingen - Opdracht uitvoeren ->> RunShellScript-functie gebruikt, moet het waagent-proces in orde zijn. Vervolgens kunt u deze opdracht injecteren om sysrq in te schakelen

sudo sysctl -w kernel.sysrq=1 ; sudo echo kernel.sysrq = 1 >> /etc/sysctl.conf

Zoals hier wordt weergegeven:

Schermopname van het RunShellScript-venster wanneer u de opdracht injecteert.

Zodra dit is voltooid, kunt u proberen toegang te krijgen tot sysrq en moet u zien dat opnieuw opstarten mogelijk is.

Schermopname van de opdrachtoptie SysRq verzenden onder het toetsenbordpictogram op de knopbalk.

Opdracht SysRq opnieuw opstarten en verzenden selecteren

Schermopname van de optie Opnieuw opstarten in het dialoogvenster SysRq verzenden naar gast.

Het systeem moet een resetbericht registreren, zoals dit

Schermopname van het logboek voor het opnieuw instellen van berichten in de opdrachtregelinterface.

Ubuntu GRUB-configuratie

Standaard moet u toegang hebben tot GRUB door esc ingedrukt te houden tijdens het opstarten van de VIRTUELE machine, als het GRUB-menu niet wordt weergegeven, kunt u het GRUB-menu op het scherm in de Seriële Console van Azure forceren en behouden met behulp van een van deze opties.

Optie 1 : dwingt GRUB weer te geven op het scherm

Werk het bestand /etc/default/grub.d/50-cloudimg-settings.cfg bij om het GRUB-menu op het scherm te houden voor de opgegeven TIMEOUT. U hoeft niet op Esc te drukken omdat GRUB onmiddellijk wordt weergegeven.

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

Optie 2 : Hiermee kan Esc worden ingedrukt voordat u opstart

Vergelijkbaar gedrag kan worden ervaren door wijzigingen aan te brengen in het bestand /etc/default/grub en een time-out van 3 seconden te observeren om op Esc te drukken

Markeer deze twee regels als commentaar:

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

en voeg deze regel toe:

GRUB_TIMEOUT_STYLE=countdown

Zorg ervoor dat de serial-getty@ttyS0.service is ingeschakeld zodat systemd een aanmeldingsprompt op die console biedt:

sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service

Ubuntu-herstelmodus

Er zijn extra herstel- en opschoonopties beschikbaar voor Ubuntu via GRUB, maar deze instellingen zijn alleen toegankelijk als u de kernelparameters dienovereenkomstig configureert. Als u deze kernelstartparameter niet configureert, wordt het herstelmenu naar azure Diagnostics verzonden en niet naar de seriële Console van Azure. U kunt toegang krijgen tot het Menu Ubuntu Recovery door de volgende stappen uit te voeren:

Het BOOT-proces onderbreken en het GRUB-menu openen

Selecteer Geavanceerde opties voor Ubuntu en druk op Enter

Schermopname van de seriële console met geavanceerde opties voor Ubuntu geselecteerd.

Selecteer de regel die wordt weergegeven (herstelmodus) druk niet op Enter, maar druk op "e"

Schermopname van de seriële console met een versie van de herstelmodus geselecteerd.

Zoek de regel die de kernel laadt en vervang de laatste parameter nomodeset door de bestemming als console=ttyS0

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery nomodeset

change to

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery console=ttyS0

Schermopname van de seriële console met de gewijzigde waarde.

Druk op Ctrl-x om de kernel te starten en te laden. Als alles goed gaat, ziet u deze extra opties, waarmee u andere herstelopties kunt uitvoeren

Schermopname van de seriële console in het herstelmenu, dat extra herstelopties biedt.

Red Hat GRUB-configuratie

Red Hat 8.6+ GRUB-configuratie

De standaardconfiguratie /etc/default/grub voor deze versies is voldoende geconfigureerd.

GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

GRUB_TIMEOUT_STYLE=countdown
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

Zorg ervoor dat de serial-getty@ttyS0.service is ingeschakeld zodat systemd een aanmeldingsprompt op die console biedt:

sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service

SuSE

SLES 15 sp5

De standaardconfiguratie /etc/default/grub voor deze versies is voldoende geconfigureerd.

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=1
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0 net.ifnames=0 dis_ucode_ldr earlyprintk=ttyS0 multipath=off nvme_core.io_timeout=240 rootdelay=300 scsi_mod.use_blk_mq=1 USE_BY_UUID_DEVICE_NAMES=1 systemd.unified_cgroup_hierarchy=1"
GRUB_CMDLINE_LINUX=""


GRUB_DISTRIBUTOR="SLES15-SP5"
GRUB_GFXMODE=auto
GRUB_TERMINAL_INPUT="serial"
GRUB_TERMINAL_OUTPUT="serial"
GRUB_TIMEOUT_STYLE=countdow

Zorg ervoor dat de serial-getty@ttyS0.service is ingeschakeld zodat systemd een aanmeldingsprompt op die console biedt:

sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service

SLES 12 sp1

Gebruik YaST bootloader volgens de officiële documenten

Of voeg /etc/default/grub de volgende parameters toe/wijzig deze:

GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0 net.ifnames=0 dis_ucode_ldr earlyprintk=ttyS0 multipath=off nvme_core.io_timeout=240 rootdelay=300 scsi_mod.use_blk_mq=1 USE_BY_UUID_DEVICE_NAMES=1 systemd.unified_cgroup_hierarchy=1"
GRUB_TERMINAL_INPUT="serial"
GRUB_TERMINAL_OUTPUT="serial"
GRUB_TIMEOUT=10
GRUB_TIMEOUT_STYLE=countdown

Maak de grub.cfg opnieuw

grub2-mkconfig -o /boot/grub2/grub.cfg

Zorg ervoor dat de serial-getty@ttyS0.service is ingeschakeld zodat systemd een aanmeldingsprompt op die console biedt:

sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service

Met deze configuratie kan het bericht op een willekeurige toets drukken om gedurende 5 seconden op de console te blijven verschijnen

Vervolgens wordt het GRUB-menu voor een extra 5 seconden weergegeven. Door op de pijl-omlaag te drukken, onderbreekt u de teller en selecteert u een kernel die u wilt opstarten door het trefwoord één toe te voegen voor de modus voor één gebruiker waarvoor het hoofdwachtwoord moet worden ingesteld.

Als u de opdracht init=/bin/bash toevoegt, wordt de kernel geladen, maar zorgt u ervoor dat het init-programma wordt vervangen door een bash-shell.

U krijgt toegang tot een shell zonder een wachtwoord in te voeren. Vervolgens kunt u doorgaan met het bijwerken van het wachtwoord voor Linux-accounts of andere configuratiewijzigingen aanbrengen.

De kernel naar een bash-prompt dwingen

Als u toegang hebt tot GRUB, kunt u het initialisatieproces onderbreken. Deze interactie is nuttig voor veel herstelprocedures. Als u geen hoofdwachtwoord hebt en één gebruiker vereist dat u een hoofdwachtwoord hebt, kunt u de kernel opstarten die het init-programma vervangt door een bash-prompt. Deze interrupt kan worden bereikt door init=/bin/bash toe te voegen aan de kernel-opstartregel

Schermopname van een console met de bijgewerkte opstartregel.

Uw /(root) bestandssysteem RW opnieuw koppelen met behulp van de opdracht

mount -o remount,rw /

Schermopname van een console met een actie voor opnieuw koppelen.

U kunt nu hoofdwachtwoordwijzigingen of veel andere Linux-configuratiewijzigingen uitvoeren

Schermopname van een console waarin u het hoofdwachtwoord en andere configuratie kunt wijzigen.

Start de VIRTUELE machine opnieuw op met

/sbin/reboot -f

Modus Voor één gebruiker

U moet ook toegang krijgen tot de virtuele machine in de modus voor één gebruiker of noodgeval. Selecteer de kernel die u wilt opstarten of onderbreken met behulp van pijltoetsen. Voer de gewenste modus in door het trefwoord één of 1 toe te voegen aan de kernelstartregel. Op RHEL-systemen kunt u ook rd.break toevoegen.

Zie dit document voor meer informatie over het openen van de modus voor één gebruiker

Schermopname van de *Ubuntu-vermelding in het opstartscherm van het geselecteerde besturingssysteem in GRUB.

Volgende stappen

Meer informatie over de seriële Console van Azure

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.