Condividi tramite


Garantire in modo proattivo l'accesso a GRUB e sysrq potrebbe farti risparmiare un sacco di tempo di inattività

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.

Consiglio

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.

                             Screenshot dello stato dell'agente nella pagina Proprietà nel portale di Azure.                                           

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.

                             Screenshot della schermata del sistema operativo selezionato all'avvio in GRUB, che mostra che è possibile scegliere più kernel.                                           

Ordine suggerito dei metodi di ripristino

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

Sfide

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

Abilita video sysrq

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:

                             Screenshot della finestra RunShellScript quando si inserisce il comando.                                           

Una volta completato,è possibile provare ad accedere a sysrq e si dovrebbe visualizzare che è possibile eseguire un riavvio.

                             Screenshot dell'opzione Invia comando SysRq sotto l'icona della tastiera nella barra dei pulsanti.                                           

Seleziona Riavvia e Invia comando SysRq

                             Screenshot dell'opzione Riavvia nella finestra di dialogo Invia comando SysRq al guest.                                           

Il sistema dovrebbe registrare un messaggio di ripristino come questo

                             Screenshot del registro dei messaggi di reimpostazione nell'interfaccia della riga di comando.                                           

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:

  1. 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
    
  2. 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

                             Lo screenshot mostra la console seriale con le opzioni avanzate per Ubuntu selezionate.                                           

Selezionare la riga che visualizza (modalità ripristino) non premere invio ma premere "e"

                             Lo screenshot mostra la console seriale con una versione della modalità di ripristino selezionata.                                           

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

                             Lo screenshot mostra la console seriale con il valore modificato.                                           

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

                             Lo screenshot mostra la console seriale nel menu di ripristino, che offre opzioni di ripristino aggiuntive.                                           

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.

                             Lo screenshot mostra una console con l'output.                                           

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.

                             Lo screenshot mostra una console con due opzioni Linux.                                           

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

                             Lo screenshot mostra una console con la riga di avvio aggiornata.                                           

Rimontare il file system RW / (root) utilizzando il comando

mount -o remount,rw /

                             Screenshot che mostra una console con un'azione di rimontaggio.                                           

Ora puoi eseguire la modifica della password di root o molte altre modifiche alla configurazione di Linux

                             Lo screenshot mostra una console in cui è possibile modificare la password di root e altre configurazioni.                                           

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

                             Screenshot della voce *Ubuntu nella schermata di avvio del sistema operativo selezionato in GRUB.                                           

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.