Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Come posso tornare a un kernel stabile noto dopo che un aggiornamento ha bloccato il riavvio della mia istanza EC2?
Un aggiornamento ha impedito il riavvio della mia istanza Amazon Elastic Compute Cloud (Amazon EC2). Desidero tornare a un kernel stabile.
Breve descrizione
Se hai effettuato un aggiornamento del kernel di un'istanza EC2 Linux ma ora il kernel è danneggiato, l'istanza non riesce a riavviarsi. Inoltre, non puoi utilizzare SSH per connetterti all'istanza in questione.
Per risolvere il problema, accedi al volume principale utilizzando la Console seriale EC2. Oppure crea un'istanza di ripristino temporanea, quindi rimonta il volume Amazon Elastic Block Store (Amazon EBS) sull'istanza di ripristino. Configura GNU GRUB per usare il kernel precedente, quindi riavvia l'istanza.
Risoluzione
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Accedi al volume principale dell'istanza
Per accedere al volume principale, utilizza la Console seriale EC2 o un'istanza di ripristino.
Utilizza la Console seriale EC2
Prerequisiti: devi avere già configurato l'accesso alla Console seriale EC2. Se l'istanza non è raggiungibile e non hai già configurato l'accesso, devi utilizzare un'istanza di ripristino per accedere al volume principale. Inoltre, assicurati di rispettare i prerequisiti della Console seriale.
Se hai attivato la Console seriale EC2 per Linux, utilizzala per risolvere i problemi di avvio, configurazione di rete e configurazione SSH dei tipi di istanze basate su Nitro.
Puoi utilizzare la Console seriale per connetterti all'istanza senza una connessione di rete funzionante.
Prima di utilizzare la Console seriale, concedi l'accesso a livello di account AWS. Quindi crea policy AWS Identity and Access Management (AWS IAM) che garantiscano l'accesso agli utenti IAM. Ogni istanza che utilizza la Console seriale deve inoltre includere almeno un utente basato su password.
Utilizza un'istanza di ripristino
Importante: non eseguire questa procedura su un'istanza supportata da un archivio dell'istanza. La procedura di ripristino richiede l'arresto e l'avvio dell'istanza, per cui perderai i dati dell'istanza.
Per accedere al volume principale utilizzando un'istanza di ripristino, completa i seguenti passaggi:
-
Scollega il volume principale Amazon EBS (/dev/xvda or /dev/sda1) dall'istanza interessata. Annota il nome del dispositivo del volume principale.
Nota: per identificare più facilmente il volume EBS nei passaggi successivi, contrassegnalo prima di scollegarlo. Il dispositivo principale è diverso a seconda dell'Amazon Machine Image (AMI). Ad esempio, Amazon Linux 2 (AL2) e Amazon Linux 2023 (AL2023) utilizzano /dev/xvda. Invece, Ubuntu 14, 16, 18, CentOS 7 e Red Hat Enterprise Linux (RHEL) 7.5 utilizzano /dev/sda1. -
Avvia un'istanza EC2 di ripristino nella stessa zona di disponibilità dello snapshot.
Nota: controlla il codice prodotto dell'istanza. Alcuni codici prodotto richiedono l'avvio di un'istanza EC2 nello stesso tipo di sistema operativo. Ad esempio, se l'istanza EC2 interessata è un'AMI RHEL a pagamento, devi avviare un'AMI con lo stesso codice prodotto. Se hai un'istanza AL2, devi creare un'istanza di ripristino AL2 per evitare errori. -
Collega il volume come dispositivo secondario (/dev/sdf) all'istanza di ripristino.
-
Per visualizzare i dispositivi disco disponibili, esegui questo comando:
lsblkEsempio di output:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 15G 0 disk └─xvda1 202:1 0 15G 0 part / xvdf 202:0 0 15G 0 disk └─xvdf1 202:1 0 15G 0 partNota: ke istanze basate su Nitro mostrano i volumi EBS come dispositivi a blocchi NVMe con il nome del disco nvme[0-26]n1. Esempio di output di un'istanza basata su Nitro:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 8G 0 disk └─nvme0n1p1 259:1 0 8G 0 part / └─nvme0n1p128 259:2 0 1M 0 part nvme1n1 259:3 0 100G 0 disk └─nvme1n1p1 259:4 0 100G 0 part / -
Per diventare l'utente root, esegui questo comando:
sudo -i -
Per montare la partizione root del volume montato su /mnt, esegui questo comando:
mount -o nouuid /dev/xvdf1 /mntNota: sostituisci /dev/xvdf1 con la partizione root del volume. Se /mnt non esiste nella configurazione, esegui questi comandi per creare una directory di montaggio, quindi monta la partizione root nella nuova directory:
mkdir /mnt mount -o nouuid /dev/xvdf1 /mntNota: se ricevi un errore quando esegui il comando mount precedente, esegui invece questo comando:
mount /dev/xvdf1 /mntQuindi utilizza la directory di montaggio per accedere ai dati dell'istanza interessata.
-
Per montare /dev, /run, /proc e /sys dell'istanza di ripristino negli stessi percorsi del volume montato, esegui questo comando:
for m in dev proc run sys; do mount -o bind {,/mnt}/$m; done
- Se hai una partizione /boot separata, montala su /mnt/boot.
- Per passare alla directory di montaggio, esegui questo comando:
chroot /mnt
Aggiorna il kernel predefinito nel bootloader GRUB
Puoi trovare il kernel corrotto nella posizione 0 nell'elenco e l'ultimo kernel stabile nella posizione 1. Per sostituire il kernel corrotto con il kernel stabile, completa i seguenti passaggi in base alla distribuzione.
GRUB1 (Legacy GRUB) per Red Hat 6
Per sostituire il kernel corrotto con il kernel stabile nel file /boot/grub/grub.conf, esegui questo comando:
sed -i '/^default/ s/0/1/' /boot/grub/grub.conf
**GRUB2 per Ubuntu 14 LTS, 16.04 e 18.04 **
Completa i seguenti passaggi:
-
Per sostituire la voce di menu predefinita GRUB_DEFAULT=0 corrotta con il valore GRUB_DEFAULT=saved stabile nel file /etc/default/grub, esegui questo comando:
sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=saved/g' /etc/default/grub -
Per assicurarti che GRUB riconosca la modifica, esegui questo comando:
update-grubNota: potresti ricevere l'errore "device-mapper: reload ioctl on osprober-linux-xvdaX failed: Device or resource busy Command failed" quando ricostruisci il file di configurazione di grub. Per risolvere questo problema, aggiungi il parametro GRUB_DISABLE_OS_PROBER=true al file /etc/default/grub, quindi esegui nuovamente il comando precedente.
-
Per assicurarti che Amazon EC2 carichi il kernel stabile al successivo riavvio, esegui questo comando:
grub-set-default 1
**GRUB2 per RHEL 7 e AL2 **
Completa i seguenti passaggi:
-
Per sostituire la voce di menu predefinita GRUB_DEFAULT=0 corrotta con il valore GRUB_DEFAULT-saved stabile nel file /etc/default/grub, esegui questo comando:
sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=saved/g' /etc/default/grub -
Per aggiornare GRUB e rigenerare il file /boot/grub2/grub.cfg, esegui questo comando:
grub2-mkconfig -o /boot/grub2/grub.cfgNota: potresti ricevere l'errore "device-mapper: reload ioctl on osprober-linux-xvdaX failed: Device or resource busy Command failed" quando ricostruisci il file di configurazione di grub. Per risolvere questo problema, aggiungi il parametro GRUB_DISABLE_OS_PROBER=true al file /etc/default/grub, quindi esegui nuovamente il comando precedente.
-
Per assicurarti che Amazon EC2 carichi il kernel stabile al successivo riavvio, esegui questo comando:
grub2-set-default 1
GRUB2 per RHEL 8 e CentOS 8 e AL2023
GRUB2 utilizza i file blscfg e le voci in /boot/loader per la configurazione di avvio invece del precedente formato grub.cfg. È consigliabile utilizzare lo strumento grubby per gestire i file blscfg e recuperare informazioni da /boot/loader/entries/. Se i file blscfg mancano o sono corrotti, grubby non mostra alcun risultato. Devi rigenerare i file per ripristinare la funzionalità.
Per aggiornare il kernel predefinito in GRUB2, completa i seguenti passaggi:
-
Per vedere l'attuale kernel predefinito, esegui questo comando:
grubby --default-kernel -
Per vedere tutti i kernel disponibili e i relativi indici, esegui questo comando:
grubby --info=ALLEsempio di output:
root@ip-172-31-29-221 /]# grubby --info=ALLindex=0 kernel="/boot/vmlinuz-4.18.0-305.el8.x86_64" args="ro console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto $tuned_params" root="UUID=d35fe619-1d06-4ace-9fe3-169baad3e421" initrd="/boot/initramfs-4.18.0-305.el8.x86_64.img $tuned_initrd" title="Red Hat Enterprise Linux (4.18.0-305.el8.x86_64) 8.4 (Ootpa)" id="0c75beb2b6ca4d78b335e92f0002b619-4.18.0-305.el8.x86_64" index=1 kernel="/boot/vmlinuz-0-rescue-0c75beb2b6ca4d78b335e92f0002b619" args="ro console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto" root="UUID=d35fe619-1d06-4ace-9fe3-169baad3e421" initrd="/boot/initramfs-0-rescue-0c75beb2b6ca4d78b335e92f0002b619.img" title="Red Hat Enterprise Linux (0-rescue-0c75beb2b6ca4d78b335e92f0002b619) 8.4 (Ootpa)" id="0c75beb2b6ca4d78b335e92f0002b619-0-rescue" index=2 kernel="/boot/vmlinuz-4.18.0-305.3.1.el8_4.x86_64" args="ro console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto $tuned_params" root="UUID=d35fe619-1d06-4ace-9fe3-169baad3e421" initrd="/boot/initramfs-4.18.0-305.3.1.el8_4.x86_64.img $tuned_initrd" title="Red Hat Enterprise Linux (4.18.0-305.3.1.el8_4.x86_64) 8.4 (Ootpa)" id="ec2fa869f66b627b3c98f33dfa6bc44d-4.18.0-305.3.1.el8_4.x86_64"Annota il percorso del kernel che hai impostato come predefinito per l'istanza. Nell'esempio precedente, il percorso del kernel all'indice 2 è /boot/vmlinuz- 0-4.18.0-80.4.2.el8_1.x86_64.
-
Per modificare il kernel predefinito dell'istanza, esegui questo comando:
grubby --set-default=/boot/vmlinuz-4.18.0-305.3.1.el8_4.x86_64Nota: sostituisci 4.18.0-305.3.1.el8_4.x86_64 con il numero di versione del tuo kernel.
-
Per verificare di aver configurato correttamente il kernel predefinito, esegui questo comando:
grubby --default-kernel
Riavvia l'istanza
Se hai utilizzato la Console seriale EC2, ora Amazon EC2 carica il kernel stabile. Puoi riavviare l'istanza.
Se hai utilizzato un'istanza di ripristino per accedere al volume principale, completa i seguenti passaggi:
-
Per uscire da chroot e smontare /dev, /run, /proc e /sys, esegui questo comando:
exit umount /mnt/{dev,proc,run,sys,} -
Collega il volume principale all'istanza originale come volume principale /dev/xvda o /dev/sda1
-
Ora Amazon EC2 carica il kernel stabile. Puoi riavviare l'istanza.
- Argomenti
- Compute
- Lingua
- Italiano
Video correlati

