È possibile risparmiare molto tempo assicurandosi in modo proattivo di avere accesso a GRUB e SysRq

Si applica a: ✔️ macchine virtuali Linux

Nella maggior parte dei casi la possibilità di accedere alla console seriale e a GRUB consente di migliorare i tempi di ripristino della macchina virtuale IaaS Linux. GRUB offre opzioni di ripristino che altrimenti potrebbero richiedere più tempo per il ripristino della macchina virtuale.

I motivi per eseguire un ripristino della macchina virtuale sono molti e possono essere attribuiti a scenari come:

  • File system/kernel/MBR (Record di avvio principale) danneggiati
  • Aggiornamenti del kernel non riusciti
  • Parametri del kernel GRUB non corretti
  • Configurazione di fstab non corrette
  • Configurazioni del firewall
  • Password persa
  • File di configurazione sshd modificati
  • Configurazioni di rete

Molti altri scenari descritti in maniera dettagliata qui

Verificare che sia possibile accedere a GRUB e alla console seriale nelle macchine virtuali distribuite in Azure.

Se non si ha familiarità con la console seriale, fare riferimento a questo collegamento.

Suggerimento

Assicurarsi di eseguire i backup dei file prima di apportare modifiche

Guardare il video seguente per scoprire come è possibile ripristinare rapidamente la macchina virtuale Linux quando si ha accesso a GRUB

Video sul ripristino della macchina virtuale Linux

Sono disponibili diversi metodi per agevolare il ripristino delle macchine virtuali Linux. In un ambiente cloud, questo processo è complesso. Lo stato di avanzamento viene eseguito continuamente per gli strumenti e le funzionalità per garantire il ripristino rapido dei servizi.

Con la console seriale di Azure è possibile interagire con la macchina virtuale Linux come se si trattasse di una console di sistema.

È possibile modificare molti file di configurazione, tra cui la modalità di avvio del kernel.

Gli amministratori dei sistemi Linux/Unix più esperti apprezzeranno le modalità singolo utente e di emergenza accessibili tramite la console seriale di Azure, che rendono ridondante lo scambio di 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 portale di Azure opzioni ->Reimposta password. La funzionalità Reimposta password è nota come estensione e comunica con l'agente guest di Linux.

Sono disponibili altre estensioni, ad esempio script personalizzati, ma queste opzioni richiedono che il waagent di Linux sia attivo e in uno stato di integrità, cosa non sempre possibile.

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

La possibilità di accedere alla console seriale di Azure e a GRUB consente di correggere una modifica della password o una configurazione errata in pochi minuti anziché in ore. È anche possibile forzare l'avvio della macchina virtuale da un kernel alternativo se si dispone di più kernel su disco nello scenario in cui il kernel primario risulti danneggiato.

Screenshot della schermata del sistema operativo selezionata per l'avvio in GRUB, che mostra più kernel che possono essere scelti.

Ordine consigliato dei metodi di ripristino

Video swap su disco

Se non si ha accesso a GRUB guardare questo video per scoprire come è possibile automatizzare facilmente la procedura di scambio del disco per ripristinare la macchina virtuale

Problematiche

Non tutte le macchine virtuali Azure Linux sono configurate per impostazione predefinita per l'accesso a GRUB o configurate per essere interrotte con i comandi SysRq. Alcune distribuzioni precedenti, ad esempio SLES 11, non sono configurate per la visualizzazione della richiesta di accesso nella console seriale di Azure

In questo articolo verranno esaminate le diverse distribuzioni di Linux e le configurazioni di documenti su come rendere disponibile GRUB.

Come configurare una macchina virtuale Linux per accettare le chiavi SysRq

Per impostazione predefinita, la chiave SysRq è abilitata in alcune distribuzioni Linux più recenti, anche se in altre potrebbe essere configurata per accettare valori solo per determinate funzioni SysRq. Nelle distribuzioni precedenti, potrebbe essere disabilitata completamente.

La funzionalità SysRq è utile per il riavvio di una macchina virtuale arrestata in modo anomalo o che non risponde direttamente dalla console seriale di Azure, utile anche per accedere al menu GRUB; in alternativa riavviando una macchina virtuale da un'altra finestra del portale o da una sessione ssh si potrebbe perdere la connessione corrente della console, facendo scadere i timeout di GRUB su cui viene visualizzato il menu GRUB. La macchina virtuale deve essere configurata in modo da accettare un valore pari a 1 per il parametro kernel, che abilita tutte le funzioni di SysRq o 128, che consente il riavvio/spegnimento

Video sull'abilitazione di SysRw

Per configurare la macchina virtuale in modo che accetti un riavvio tramite i comandi SysRq nel portale di Azure, è necessario impostare il valore 1 per il parametro kernel kernel.sysrq

Affinché questa configurazione renda permanente il riavvio, aggiungere una voce al file sysctl.conf

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

Per configurare dinamicamente il parametro kernel

sysctl -w kernel.sysrq=1

Se non si dispone di accesso radice o se il sudo è danneggiato, non sarà possibile configurare SysRq da un prompt della shell.

In questo scenario è possibile abilitare SysRq usando il portale di Azure. Questo metodo può risultare vantaggioso se il file sudoers.d/waagent è stato danneggiato o è stato eliminato.

L'uso della funzionalità portale di Azure Operations -> Run Command -> RunShellScript richiede che il processo waagent sia integro, quindi inserire questo comando per abilitare sysrq

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

Come illustrato di seguito:

Screenshot della finestra RunShellScript quando si inserisce il comando.

Al termine, è possibile provare ad accedere a SysRq e verificare che sia possibile riavviare il computer.

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

Selezionare Riavvia e il comando Invia SysRq

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

Il sistema deve registrare un messaggio di reimpostazione, ad esempio

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

Configurazione di Ubuntu GRUB

Per impostazione predefinita, si dovrebbe essere in grado di accedere a GRUB tenendo premuto il tasto ESC durante l'avvio della macchina virtuale. Se il menu GRUB non è visualizzato, è possibile forzare e mantenere il menu GRUB sullo schermo nella console seriale di Azure usando una di queste opzioni.

Opzione 1: forza la visualizzazione di GRUB sullo schermo

Aggiornare il file /etc/default/grub.d/50-cloudimg-Settings.cfg per mantenere il menu GRUB sullo schermo per il TIMEOUT specificato. Non è necessario premere ESC perché GRUB verrà visualizzato immediatamente.

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

Opzione 2: consente la pressione di ESC prima dell'avvio

Un comportamento simile può essere sperimentato apportando modifiche al file /etc/default/grub e osservando un timeout di 3 secondi per premere ESC

Impostare come commento le due righe seguenti:

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

e aggiungere questa riga:

GRUB_TIMEOUT_STYLE=countdown

Ubuntu 12.04

Ubuntu 12.04 consente l'accesso alla console seriale, ma non offre la possibilità di interagire. Un prompt account di accesso: non è visibile

Per 12.04 ottenere un prompt account di accesso::

  1. Creare un file denominato /etc/init/ttyS0.conf contenente il testo seguente:

    # 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. Richiedere l'avvio per avviare il Getty

    sudo start ttyS0
    

È possibile trovare le impostazioni necessarie per configurare la console seriale per le versioni di Ubuntu qui

Modalità di ripristino Ubuntu

Sono disponibili opzioni aggiuntive per il ripristino e la pulizia per Ubuntu tramite GRUB, tuttavia queste impostazioni sono accessibili solo se si configurano i parametri del kernel di conseguenza. Se non si configura questo parametro di avvio del kernel, il menu di ripristino verrà inviato alla Diagnostica di Azure e non alla console seriale di Azure. È possibile ottenere l'accesso al menu ripristino di Ubuntu attenendosi alla procedura seguente:

Interrompere il processo di avvio e accedere al menu GRUB

Selezionare Opzioni avanzate per Ubuntu e premere Invio

Screenshot che mostra la console seriale con opzioni avanzate per Ubuntu selezionata.

Selezionare la visualizzazione della riga (modalità di ripristino) non premere INVIO ma premere "e"

Screenshot che 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 destinazione 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

Screenshot che mostra la console seriale con il valore modificato.

Premere CTRL+x per avviare e caricare il kernel. Se tutto viene eseguito correttamente, vengono visualizzate le opzioni aggiuntive che consentono di eseguire altre opzioni di ripristino

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

Configurazione di Red Hat GRUB

Configurazione di Red Hat 7.4+ GRUB

La configurazione predefinita di /etc/default/grub in queste versioni è configurata adeguatamente

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"

Abilitare la chiave SysRq

sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

Configurazione GRUB di 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"

Modificare le righe seguenti in /etc/default/grub

GRUB_TIMEOUT=1 

to

GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="console"

to

GRUB_TERMINAL="serial console"

Aggiungere questa riga:

GRUB_SERIAL_COMMAND="serial –speed=115200 –unit=0 –word=8 –parity=no –stop=1″

/etc/default/grub dovrebbe ora 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"

Completare e aggiornare la configurazione di GRUB usando

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

Impostare il parametro del kernel SysRq:

sysctl -w kernel.sysrq = 1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

In alternativa, è possibile configurare GRUB e SysRq usando 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 di Red Hat 6.x GRUB

Il file da modificare è /boot/grub/grub.conf. Il valore timeout determinerà per quanto tempo viene visualizzato 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 terminal –-timeout=5 serial console aumenterà ulteriormente il timeout di GRUB aggiungendo un prompt di 5 secondi che visualizza Premere un tasto qualsiasi per continuare.

Screenshot che mostra una console con output.

Il menu GRUB dovrebbe essere visualizzato sullo schermo per il timeout configurato=15 senza la necessità di premere ESC. Assicurarsi di fare clic nella console nel browser per attivare il menu e selezionare il kernel richiesto.

Screenshot che mostra una console con due opzioni di Linux.

SuSE

SLES 12 sp1

Usare il bootloader di YaST secondo quanto indicato nella documentazione ufficiale

In alternativa, modificare /etc/default/grub o aggiungervi i parametri seguenti:

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"

Ricreare il grub.cfg

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

SLES 11 SP4

Viene visualizzata la console seriale con i messaggi di avvio ma non viene visualizzato un prompt login:

Aprire una sessione ssh nella macchina virtuale e aggiornare il file /etc/inittab mediante l'annullamento del commento di questa riga:

#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102

Successivamente, eseguire il comando

telinit q

Per abilitare GRUB, è necessario apportare le modifiche seguenti 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 Premere un tasto qualsiasi per continuare di essere visualizzato nella console per 5 secondi

Il menu GRUB verrà visualizzato per altri 5 secondi; premendo la freccia giù si interrompe il contatore e si seleziona un kernel che si vuole avviare aggiungendo la parola chiave singolo per la modalità utente singolo che richiede l'impostazione della password radice.

Se si aggiunge il comando init =/bin/bash il kernel verrà caricato, ma si garantisce che il programma init sia sostituito da una shell bash.

Si otterrà l'accesso a una shell senza dover immettere una password. È quindi possibile procedere con l'aggiornamento della password per gli account Linux o apportare altre modifiche alla configurazione.

Forzare il kernel a una richiesta 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 radice e l'utente singolo richiede una password radice, è possibile avviare il kernel sostituendo il programma init con un prompt bash. Per ottenere questa interruzione, aggiungere init =/bin/bash alla riga di avvio del kernel

Screenshot che mostra una console con la riga di avvio aggiornata.

Rimontare l'RW del file system (radice) usando il comando

mount -o remount,rw /

Screenshot che mostra una console con un'azione di nuovo montaggio.

A questo punto è possibile eseguire una modifica della password radice o molte altre modifiche alla configurazione di Linux

Screenshot che mostra una console in cui è possibile modificare la password radice e altre configurazioni.

Riavviare la macchina virtuale con

/sbin/reboot -f

Modalità utente singolo

In alternativa, potrebbe essere necessario accedere alla macchina virtuale in modalità utente singolo o di emergenza. Selezionare il kernel che si vuole avviare o interrompere usando i tasti di direzione. Immettere la modalità desiderata aggiungendo la parola chiave singolo o 1 alla riga di avvio del kernel. Nei sistemi RHEL è inoltre possibile aggiungere rd.break.

Per altre informazioni su come accedere alla modalità utente singolo, vedere questo documento

Screenshot della voce *Ubuntu nell'avvio della schermata del sistema operativo selezionata in GRUB.

Passaggi successivi

Altre 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.