Garantire in modo proattivo l'accesso a GRUB e sysrq potrebbe farti risparmiare un sacco di tempo di inattività
Si applica a: ✔️ macchine virtuali Linux
L'accesso alla console seriale e a GRUB migliorerà i tempi di ripristino della tua macchina virtuale Linux IaaS nella maggior parte dei casi. GRUB offre opzioni di ripristino che altrimenti richiederebbero più tempo per ripristinare la tua VM.
I motivi per eseguire un ripristino di VM sono molteplici e possono essere attribuiti a scenari quali:
- File system/kernel/MBR (Master Boot Record) danneggiati
- Aggiornamenti del kernel non riusciti
- Parametri del kernel GRUB errati
- Configurazioni fstab errate
- Configurazioni firewall
- Password dimenticata
- File di configurazione sshd alterati
- Configurazioni di rete
Molti altri scenari come dettagliato qui
Verificare di poter accedere a GRUB e alla console seriale sulle macchine virtuali distribuite in Azure.
Se non si conosce la Console seriale, fare riferimento a questo collegamento.
Suggerimento
Assicurati di eseguire il backup dei file prima di apportare modifiche
Guarda questo video qui sotto per vedere come ripristinare rapidamente la tua VM Linux una volta che hai accesso a GRUB
Video sul ripristino delle macchine virtuali Linux
Esistono diversi metodi per facilitare il ripristino delle macchine virtuali Linux. In un ambiente cloud, questo processo è stato impegnativo. Vengono compiuti continui progressi in termini di strumenti e funzionalità per garantire che i servizi vengano ripristinati rapidamente.
Con la console seriale di Azure puoi interagire con la tua macchina virtuale Linux come se fossi alla console di un sistema.
Puoi manipolare molti file di configurazione incluso il modo in cui il kernel si avvierà.
Gli amministratori di sistema Linux/Unix più esperti apprezzeranno le modalità singolo utente ed emergenza accessibili tramite la console seriale di Azure che rendono superflui effettuare lo swapping dei dischi e l'eliminazione della macchina virtuale per molti scenari di ripristino.
Il metodo di ripristino dipende dal problema riscontrato, ad esempio una password persa o smarrita può essere reimpostata tramite le opzioni del portale di Azure ->Reimposta password. La funzione Reimposta password è nota come estensione e comunica con l'agente Linux Guest.
Sono disponibili altre estensioni come lo Script personalizzato. Tuttavia queste opzioni richiedono che il comando waagent di Linux sia attivo e in uno stato integro, che non sempre avviene.
Garantire l'accesso alla console seriale di Azure e a GRUB significa che una modifica della password o una configurazione errata possono essere corrette in pochi minuti invece che in ore. Nell'ipotesi in cui il kernel primario sia danneggiato, se si dispone di più kernel sul disco, è possibile anche forzare l'avvio della macchina virtuale da un kernel alternativo.
Ordine suggerito dei metodi di ripristino
Console seriale di Azure
Metodo legacy
Video di scambio del disco
Se non hai accesso a GRUB, guarda questo video e scopri come automatizzare facilmente la procedura di scambio del disco per ripristinare la tua VM
Problematiche
Non tutte le macchine virtuali Linux Azure sono configurate per impostazione predefinita per l'accesso GRUB e non sono nemmeno tutte configurate per essere interrotte con i comandi sysrq. Alcune distribuzioni meno recenti, ad esempio SLES 11, non sono configurate per visualizzare il prompt di accesso nella Console seriale di Azure
In questo articolo esamineremo varie distribuzioni Linux e documenteremo le configurazioni sul modo in cui rendere disponibile GRUB.
Come configurare la macchina virtuale Linux per accettare le chiavi SysRq
In alcune distribuzioni Linux più recenti, la chiave sysrq è abilitata per impostazione predefinita, anche se su altre distribuzioni potrebbe essere configurata per accettare valori solo per determinate funzioni SysRq. Nelle distribuzioni precedenti, potrebbe essere disabilitata completamente.
La funzionalità SysRq è utile per riavviare una macchina virtuale che ha subito un arresto anomalo, oppure che non risponde direttamente dalla Console seriale di Azure, e anche per ottenere l'accesso al menu GRUB. In alternativa il riavvio di una macchina virtuale da un'altra finestra del portale o da una sessione SSH potrebbe interrompere la connessione della console corrente e quindi far scadere i timeout GRUB che vengono utilizzati per visualizzare il relativo menu. La VM deve essere configurata per accettare un valore di 1 per il parametro del kernel, che abilita tutte le funzioni di sysrq o 128, che consente il riavvio/spegnimento
Per configurare la macchina virtuale in modo che accetti un riavvio tramite i comandi SysRq nel portale di Azure, sarà necessario impostare il parametro del kernel.sysrq su un valore pari a 1.
Affinché questa configurazione mantenga un riavvio, aggiungere una voce al file sysctl.conf
echo kernel.sysrq = 1 >> /etc/sysctl.conf
Per configurare il parametro del kernel in modo dinamico
sysctl -w kernel.sysrq=1
Se non si dispone dell'accesso root, oppure se "sudo" è danneggiato, non sarà possibile configurare sysrq da un prompt della shell.
È possibile abilitare sysrq in questo scenario usando il portale di Azure. Questo metodo può essere utile se il file sudoers.d/waagent è danneggiato o è stato eliminato.
L'utilizzo della funzionalità Operazioni del portale di Azure -> Esegui comando -> RunShellScript richiede che il processo waagent sia integro, quindi è possibile immettere questo comando per abilitare sysrq
sysctl -w kernel.sysrq=1 ; echo kernel.sysrq = 1 >> /etc/sysctl.conf
Come mostrato qui:
Una volta completato,è possibile provare ad accedere a sysrq e si dovrebbe visualizzare che è possibile eseguire un riavvio.
Seleziona Riavvia e Invia comando SysRq
Il sistema dovrebbe registrare un messaggio di ripristino come questo
Configurazione di Ubuntu GRUB
Per impostazione predefinita dovresti essere in grado di accedere a GRUB tenendo premuto il tasto Esc durante l'avvio della VM, se il menu di GRUB non viene visualizzato puoi forzare e mantenere il menu di GRUB sullo schermo nella console seriale di Azure usando una di queste opzioni.
Opzione 1: forza la visualizzazione di GRUB sullo schermo
Aggiorna il file /etc/default/grub.d/50-cloudimg-settings.cfg per mantenere il menu di GRUB sullo schermo per il TIMEOUT specificato. Non è necessario premere Esc poiché GRUB verrà visualizzato immediatamente.
GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu
Opzione 2: consente di premere ESC prima dell'avvio
Un comportamento simile può essere riscontrato apportando modifiche al file /etc/default/grub e osservando un timeout di 3 secondi per premere Esc
Commenta queste due righe:
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true
e aggiungi questa riga:
GRUB_TIMEOUT_STYLE=countdown
Ubuntu 12.04
Ubuntu 12.04 consentirà l'accesso alla console seriale ma non offre la possibilità di interagire. Non viene visualizzato un prompt di accesso:
Per ottenere un prompt di accesso per la versione 12.04:
Crea un file chiamato /etc/init/ttyS0.conf contenente il seguente testo:
# 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
Chiedere a upstart di avviare il getty
sudo start ttyS0
Le impostazioni necessarie per configurare la console seriale per le versioni di Ubuntu sono disponibili qui
Modalità di recupero di Ubuntu
Ulteriori opzioni di ripristino e pulizia sono disponibili per Ubuntu tramite GRUB, tuttavia queste impostazioni sono accessibili solo se si configurano i parametri del kernel di conseguenza. La mancata configurazione di questo parametro di avvio del kernel forzerebbe l'invio del menu di ripristino alla diagnostica di Azure e non alla console seriale di Azure. Puoi ottenere l'accesso al menu di ripristino di Ubuntu seguendo questi passaggi:
Interrompere il processo di avvio e accedere al menu di GRUB
Seleziona Opzioni avanzate per Ubuntu e premi invio
Selezionare la riga che visualizza (modalità ripristino) non premere invio ma premere "e"
Individuare la riga che caricherà il kernel e sostituire l'ultimo parametro nomodeset con una destinazione come 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
Premi Ctrl-x per avviare e caricare il kernel. Se tutto va bene, vedrai queste opzioni aggiuntive, che possono aiutarti a eseguire altre opzioni di ripristino
Configurazione Red Hat GRUB
Configurazione Red Hat 7.4+ GRUB
La configurazione predefinita /etc/default/grub su queste versioni è adeguatamente configurata
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"
Abilita la chiave SysRq
sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq
Configurazione GRUB Red Hat 7.2 e 7.3
Il file da modificare è /etc/default/grub – una configurazione predefinita è simile a questo esempio:
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"
Modifica le seguenti righe in /etc/default/grub
GRUB_TIMEOUT=1
to
GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="console"
to
GRUB_TERMINAL="serial console"
Aggiungi anche questa riga:
GRUB_SERIAL_COMMAND="serial –speed=115200 –unit=0 –word=8 –parity=no –stop=1″
/etc/default/grub ora dovrebbe essere simile a questo esempio:
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"
Completa e aggiorna la configurazione di grub usando
grub2-mkconfig -o /boot/grub2/grub.cfg
Imposta il parametro del kernel SysRq:
sysctl -w kernel.sysrq = 1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq
In alternativa, puoi configurare GRUB e SysRq utilizzando una singola riga nella shell o tramite il comando Esegui. Eseguire il backup dei file prima di eseguire questo comando:
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
Configurazione GRUB di Red Hat 6.x
Il file da modificare è /boot/grub/grub.conf. Il valore timeout
determinerà la durata della visualizzazione di GRUB.
#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
L'ultima riga terminale --timeout=5 console seriale aumenterà ulteriormente il timeout di GRUB aggiungendo un prompt di 5 secondi che visualizza Premere un tasto per continuare.
Il menu di GRUB dovrebbe apparire sullo schermo per il timeout configurato=15 senza la necessità di premere Esc. Assicurati di fare clic su Console nel browser per rendere attivo il menu e selezionare il kernel richiesto.
SuSE
SLES 12 sp1
Utilizzare il bootloader YaST come da documentazione ufficiale docs.
Oppure aggiungi/modifica in /etc/default/grub i seguenti parametri:
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"
Ricrea il file grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
SLES 11 SP4
La Console seriale viene visualizzata e mostra i messaggi di avvio, ma non visualizza il prompt login:
Aprire una sessione ssh nella macchina virtuale e aggiornare il file /etc/inittab eliminando il commento da questa riga:
#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102
Quindi esegui il comando
telinit q
Per abilitare GRUB, è necessario apportare le seguenti modifiche a /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
Questa configurazione consentirà al messaggio Premi un tasto qualsiasi per continuare di apparire sulla console per 5 secondi
Verrà quindi visualizzato il menu GRUB per altri 5 secondi; premendo la freccia giù si fermerà il contatore e si potrà selezionare un kernel da avviare o aggiungere la parola chiave single per la modalità utente singolo che richiede l'impostazione della password di root.
L'aggiunta del comando init=/bin/bash carica il kernel, ma assicura che il programma di init sia sostituito da shell bash.
Otterrai l'accesso a una shell senza dover inserire una password. È quindi possibile procedere all'aggiornamento della password per gli account Linux o apportare altre modifiche alla configurazione.
Forzare il kernel a utilizzare il prompt di bash
L'accesso a GRUB consente di interrompere il processo di inizializzazione, questa interazione è utile per molte procedure di ripristino. Se non si dispone della password di root e il singolo utente richiede una password di root, è possibile avviare il kernel sostituendo il programma di init con un prompt di bash; questa interruzione può essere ottenuta aggiungendo init=/bin/bash alla linea di avvio del kernel
Rimontare il file system RW / (root) utilizzando il comando
mount -o remount,rw /
Ora puoi eseguire la modifica della password di root o molte altre modifiche alla configurazione di Linux
Riavvia la VM con
/sbin/reboot -f
Modalità utente singolo
In alternativa, potrebbe essere necessario accedere alla VM in modalità utente singolo o di emergenza. Seleziona il kernel che desideri avviare o interrompere utilizzando i tasti freccia. Per scegliere la modalità desiderata, aggiungere la parola chiave single o 1 alla riga di avvio del kernel. Sui sistemi RHEL, puoi anche aggiungere rd.break.
Per ulteriori informazioni su come accedere alla modalità utente singolo, vedere questo documento
Passaggi successivi
Ulteriori informazioni sulla Console seriale di Azure
Contattaci per ricevere assistenza
In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.