Att proaktivt se till att du har åtkomst till GRUB och sysrq kan spara mycket stilleståndstid
Gäller för: ✔️ Virtuella Linux-datorer
Om du har åtkomst till seriekonsolen och GRUB förbättras återställningstiderna för din virtuella IaaS Linux-dator i de flesta fall. GRUB erbjuder återställningsalternativ som annars skulle ta längre tid att återställa den virtuella datorn.
Orsakerna till att utföra en vm-återställning är många och kan hänföras till scenarier som:
- Skadade filsystem/kernel/MBR (master boot record)
- Misslyckade kerneluppgraderingar
- Felaktiga GRUB-kernelparametrar
- Felaktiga fstab-konfigurationer
- Brandväggskonfigurationer
- Förlorat lösenord
- Konfigurationsfiler för manglad sshd
- Nätverkskonfigurationer
Många andra scenarier som beskrivs här
Kontrollera att du har åtkomst till GRUB och seriekonsolen på dina virtuella datorer som distribuerats i Azure.
Om du är nybörjare på seriekonsolen kan du läsa den här länken.
Dricks
Se till att du gör säkerhetskopior av filer innan du gör ändringar
Titta på den här videon nedan för att se hur du snabbt kan återställa din virtuella Linux-dator när du har åtkomst till GRUB
Återställa video om virtuella Linux-datorer
Det finns ett antal metoder för att återställa virtuella Linux-datorer. I en molnmiljö har den här processen varit utmanande. Framsteg görs kontinuerligt med verktyg och funktioner för att säkerställa att tjänsterna återställs snabbt.
Med Azure-seriekonsolen kan du interagera med din virtuella Linux-dator som om du befann dig i ett systemkonsol.
Du kan ändra många konfigurationsfiler, inklusive hur kerneln ska starta.
De mer erfarna Linux-/Unix-sys-administratörerna kommer att uppskatta de enskilda användar - och nödlägen som är tillgängliga via Azure-seriekonsolen, vilket gör diskväxling och borttagning av virtuella datorer för många återställningsscenarier redundanta.
Återställningsmetoden beror på det problem som uppstår, till exempel att ett förlorat eller felaktigt lösenord kan återställas via Azure Portal alternativ –> Återställ lösenord. Funktionen Återställ lösenord kallas för ett tillägg och kommunicerar med Linux-gästagenten.
Andra tillägg som anpassat skript är tillgängliga, men dessa alternativ kräver att Linux waagent är igång och i ett felfritt tillstånd, vilket inte alltid är fallet.
Att se till att du har åtkomst till Azure-seriekonsolen och GRUB innebär att en lösenordsändring eller en felaktig konfiguration kan åtgärdas på bara några minuter i stället för timmar. Du kan till och med tvinga den virtuella datorn att starta från en alternativ kernel om du har flera kärnor på disk i scenariot där din primära kernel blir skadad.
Föreslagen ordning för återställningsmetoder
Azure seriekonsol
Äldre metod
Video om diskväxling
Om du inte har åtkomst till GRUB kan du titta på den här videon och se hur du enkelt kan automatisera diskväxlingsproceduren för att återställa den virtuella datorn
Utmaningar
Alla virtuella Linux Azure-datorer har inte konfigurerats som standard för GRUB-åtkomst och de är inte heller konfigurerade för att avbrytas med sysrq-kommandona. Vissa äldre distributioner, till exempel SLES 11, är inte konfigurerade för att visa inloggningsprompten i Azure-seriekonsolen
I den här artikeln går vi igenom olika Linux-distributioner och dokumentkonfigurationer om hur du gör GRUB tillgängligt.
Så här konfigurerar du virtuella Linux-datorer för att acceptera SysRq-nycklar
Sysrq-nyckeln är aktiverad på vissa nyare Linux-distributioner som standard, men på andra kan den konfigureras för att endast acceptera värden för vissa SysRq-funktioner. Vid äldre distributioner kan den inaktiveras helt.
SysRq-funktionen är användbar för att starta om en kraschad eller icke-svarar-virtuell dator direkt från Azure-seriekonsolen, vilket också är användbart för att få åtkomst till GRUB-menyn, eller starta om en virtuell dator från ett annat portalfönster eller ssh-session kan släppa den aktuella konsolanslutningen och därmed upphöra grub-timeouter som används för att visa GRUB-menyn. Den virtuella datorn måste konfigureras för att acceptera värdet 1 för kernelparametern, vilket möjliggör alla funktioner i sysrq eller 128, vilket tillåter omstart/poweroff
Om du vill konfigurera den virtuella datorn att acceptera en omstart via SysRq-kommandon på Azure Portal måste du ange värdet 1 för kernelparametern kernel.sysrq
För att den här konfigurationen ska spara en omstart lägger du till en post i filen sysctl.conf
echo kernel.sysrq = 1 >> /etc/sysctl.conf
Så här konfigurerar du kernelparametern dynamiskt
sysctl -w kernel.sysrq=1
Om du inte har rotåtkomst eller om sudo är bruten går det inte att konfigurera sysrq från en kommandotolk.
Du kan aktivera sysrq i det här scenariot med hjälp av Azure Portal. Den här metoden kan vara fördelaktig om filen sudoers.d/waagent har brutits eller har tagits bort.
Om du använder funktionen Azure Portal Operations –> Run Command –> RunShellScript måste waagent-processen vara felfri och du kan sedan mata in det här kommandot för att aktivera sysrq
sysctl -w kernel.sysrq=1 ; echo kernel.sysrq = 1 >> /etc/sysctl.conf
Som du ser här:
När du är klar kan du försöka komma åt sysrq och se att en omstart är möjlig.
Välj Starta om och skicka SysRq-kommando
Systemet bör logga ett återställningsmeddelande som det här
Ubuntu GRUB-konfiguration
Som standard bör du kunna komma åt GRUB genom att hålla ned Esc-tangenten under den virtuella datorns start, om GRUB-menyn inte visas kan du framtvinga och hålla GRUB-menyn på skärmen i Azure-seriekonsolen med något av dessa alternativ.
Alternativ 1 – Tvingar GRUB att visas på skärmen
Uppdatera filen /etc/default/grub.d/50-cloudimg-settings.cfg för att hålla GRUB-menyn på skärmen för angiven TIMEOUT. Du behöver inte trycka på Esc eftersom GRUB visas omedelbart.
GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu
Alternativ 2 – Tillåter att Esc trycks in innan start
Liknande beteende kan upplevas genom att göra ändringar i filen /etc/default/grub och observera en 3-sekunders timeout för att träffa Esc
Kommentera ut följande två rader:
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true
och lägg till den här raden:
GRUB_TIMEOUT_STYLE=countdown
Ubuntu 12.04
Ubuntu 12.04 tillåter åtkomst till seriekonsolen men ger inte möjlighet att interagera. En inloggning: prompten visas inte
För 12.04 för att få en inloggning: fråga:
Skapa en fil med namnet /etc/init/ttyS0.conf som innehåller följande text:
# ttyS0 - getty # # This service maintains a getty on ttyS0 from the point the system is # started until it is shut down again. start on stopped rc RUNLEVEL=[12345] stop on runlevel [!12345] respawn exec /sbin/getty -L 115200 ttyS0 vt102
Be uppstarten att starta getty
sudo start ttyS0
De inställningar som krävs för att konfigurera seriekonsolen för Ubuntu-versioner finns här
Ubuntu-återställningsläge
Ytterligare återställnings- och rensningsalternativ är tillgängliga för Ubuntu via GRUB, men de här inställningarna är endast tillgängliga om du konfigurerar kernelparametrar i enlighet med detta. Om du inte konfigurerar den här kernel-startparametern skulle återställningsmenyn skickas till Azure Diagnostics och inte till Azure-seriekonsolen. Du kan få åtkomst till Ubuntu Recovery-menyn genom att följa dessa steg:
Avbryt START-processen och få åtkomst till GRUB-menyn
Välj Avancerade alternativ för Ubuntu och tryck på Retur
Markera raden som visas (återställningsläge) tryck inte på Retur utan tryck på "e"
Leta upp raden som läser in kerneln och ersätt den sista parametern nomodeset med målet som 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
Tryck på Ctrl-x för att starta och läsa in kerneln. Om allt går bra visas dessa ytterligare alternativ, som kan hjälpa dig att utföra andra återställningsalternativ
Red Hat GRUB-konfiguration
Red Hat 7.4+ GRUB-konfiguration
Standardkonfigurationen /etc/default/grub på dessa versioner är korrekt konfigurerad
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"
Aktivera SysRq-nyckeln
sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq
Red Hat 7.2- och 7.3 GRUB-konfiguration
Filen som ska ändras är /etc/default/grub – en standardkonfiguration ser ut som i det här exemplet:
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"
Ändra följande rader i /etc/default/grub
GRUB_TIMEOUT=1
to
GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="console"
to
GRUB_TERMINAL="serial console"
Lägg också till den här raden:
GRUB_SERIAL_COMMAND="serial –speed=115200 –unit=0 –word=8 –parity=no –stop=1″
/etc/default/grub bör nu se ut ungefär som i det här exemplet:
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"
Slutför och uppdatera grub-konfigurationen med hjälp av
grub2-mkconfig -o /boot/grub2/grub.cfg
Ange parametern SysRq-kernel:
sysctl -w kernel.sysrq = 1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq
Du kan också konfigurera GRUB och SysRq med en enda rad i gränssnittet eller via körkommandot. Säkerhetskopiera dina filer innan du kör det här kommandot:
cp /etc/default/grub /etc/default/grub.bak; sed -i 's/GRUB_TIMEOUT=1/GRUB_TIMEOUT=5/g' /etc/default/grub; sed -i 's/GRUB_TERMINAL_OUTPUT="console"/GRUB_TERMINAL="serial console"/g' /etc/default/grub; echo "GRUB_SERIAL_COMMAND=\"serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1\"" >> /etc/default/grub;grub2-mkconfig -o /boot/grub2/grub.cfg;sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 /etc/sysctl.conf;sysctl -a | grep -i sysrq
Red Hat 6.x GRUB-konfiguration
Filen som ska ändras är /boot/grub/grub.conf. Värdet timeout
avgör hur länge GRUB visas.
#boot=/dev/vda
default=0
timeout=15
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
serial --unit=0 --speed=9600
terminal serial
terminal --timeout=5 serial console
Den sista radterminalen –-timeout=5 seriekonsolen ökar grub-tidsgränsen ytterligare genom att lägga till en uppmaning på 5 sekunder som visar Tryck på valfri tangent för att fortsätta.
GRUB-menyn bör visas på skärmen för den konfigurerade timeouten=15 utan att du behöver trycka på Esc. Klicka på konsolen i webbläsaren för att aktivera menyn och välj den kernel som krävs.
SuSE
SLES 12 sp1
Använd antingen YaST bootloader enligt de officiella dokumenten
Eller lägg till/ändra till /etc/default/grub följande parametrar:
GRUB_TERMINAL=serial
GRUB_TIMEOUT=5
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=9600 --parity=no"
```console
Verify that ttys0 is used in the GRUB_CMDLINE_LINUX or GRUB_CMDLINE_LINUX_DEFAULT
```console
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,9600n"
Återskapa grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
SLES 11 SP4
Seriekonsolen visas och visar startmeddelanden men visar ingen inloggning: fråga
Öppna en ssh-session på den virtuella datorn och uppdatera filen /etc/inittab genom att avkommentera den här raden:
#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102
Kör sedan kommandot
telinit q
För att aktivera GRUB bör följande ändringar göras i /boot/grub/menu.lst
timeout 5
serial --unit=0 --speed=9600 --parity=no
terminal --timeout=5 serial console
root (hd0,0)
kernel /boot/vmlinuz-3.0.101-108.74-default root=/dev/disk/by-uuid/ab6b62bb--
1a8c-45eb-96b1-1fbc535b9265 disk=/dev/sda USE_BY_UUID_DEVICE_NAMES=1 earlyprinttk=ttyS0 console=ttyS0 showopts vga=0x314
Den här konfigurationen gör att meddelandet Tryck på valfri tangent för att fortsätta visas i konsolen i 5 sekunder
Sedan visas GRUB-menyn i ytterligare 5 sekunder – genom att trycka på nedåtpilen avbryter du räknaren och väljer en kernel som du vill starta antingen lägger till nyckelordssingeln för enanvändarläge som kräver att rotlösenordet anges.
Om du lägger till kommandot init=/bin/bash läses kerneln in, men init-programmet ersätts av ett bash-gränssnitt.
Du får åtkomst till ett gränssnitt utan att behöva ange ett lösenord. Du kan sedan fortsätta med att uppdatera lösenordet för Linux-konton eller göra andra konfigurationsändringar.
Tvinga kerneln till en bash-prompt
Om du har åtkomst till GRUB kan du avbryta initieringsprocessen. Den här interaktionen är användbar för många återställningsprocedurer. Om du inte har rotlösenord och en enskild användare kräver att du har ett rotlösenord kan du starta kerneln och ersätta init-programmet med en bash-prompt – det här avbrottet kan uppnås genom att lägga till init=/bin/bash på startlinjen för kerneln
Montera om RW-filsystemet /(rot) med kommandot
mount -o remount,rw /
Nu kan du utföra rotlösenordsändring eller många andra Linux-konfigurationsändringar
Starta om den virtuella datorn med
/sbin/reboot -f
Läge för en användare
Du kan också behöva komma åt den virtuella datorn i enanvändar- eller nödläge. Välj den kernel som du vill starta eller avbryta med hjälp av piltangenterna. Ange önskat läge genom att lägga till nyckelordet enkel eller 1 på kernel-startraden. På RHEL-system kan du också lägga till rd.break.
Mer information om hur du kommer åt enanvändarläge finns i det här dokumentet
Nästa steg
Läs mer om Azure-seriekonsolen
Kontakta oss för att få hjälp
Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.