Come posso risolvere l'errore “Kernel panic - not syncing" nella mia istanza EC2?
Desidero aggiornare il kernel o riavviare la mia istanza Amazon Elastic Compute Cloud (Amazon EC2) Linux per la mancanza dei moduli kernel o initramfs. Tuttavia, ricevo l'errore “Kernel panic - not syncing".
Breve descrizione
L'errore "Kernel panic - not syncing" si verifica quando il dispositivo o l'indirizzo non esiste. Per risolvere il problema, avvia un'istanza temporanea e collega il disco principale difettoso come unità secondaria per eseguire la diagnostica.
Importante: prima di arrestare e avviare l'istanza, intraprendi le seguenti azioni:
- Crea un backup del volume Amazon Elastic Block Store (Amazon EBS).
Nota: se l'istanza è supportata da un archivio dell'istanza o ha volumi di storage dell'istanza contenenti dati, Amazon EC2 elimina i dati quando arresti l'istanza. - Rimuovi temporaneamente l'istanza dal relativo gruppo Amazon EC2 Auto Scaling quando completi i passaggi di risoluzione.
Nota: se arresti un'istanza che si trova in un gruppo EC2 Auto Scaling, potresti terminare l'istanza se così è previsto dalle impostazioni di protezione dalla riduzione orizzontale. Le istanze avviate con Amazon EMR, AWS CloudFormation o AWS Elastic Beanstalk potrebbero far parte di un gruppo Auto Scaling. - Imposta il comportamento di chiusura dell'istanza su Arresta per assicurarti che le istanze non terminino quando le arresti.
Nota: quando arresti e avvii un'istanza, l'indirizzo IP pubblico dell'istanza cambia. È consigliabile utilizzare un indirizzo IP elastico per indirizzare il traffico esterno all'istanza anziché un indirizzo IP pubblico.
Per ulteriori informazioni, consulta Cosa succede quando arresti un'istanza.
Risoluzione
Nota: i seguenti passaggi di risoluzione sono validi solo per Amazon Linux 2, Amazon Linux 2023, Fedora 16 e versioni successive e Red Hat Enterprise Linux (RHEL) 7 e versioni successive.
Per collegare il disco principale a un'istanza temporanea, completa i seguenti passaggi:
-
Ottieni l'ID del volume e il nome del dispositivo del volume principale dell'istanza originale.
-
Avvia un'istanza temporanea da un'Amazon Machine Image (AMI) con la stessa versione del sistema operativo Linux nella stessa zona di disponibilità.
-
Scollega il volume principale dall'istanza originale e collegalo all'istanza temporanea come volume secondario. Prendi nota del nome del dispositivo del volume.
-
Utilizza la coppia di chiavi SSH per connetterti all'istanza temporanea.
-
Per passare all'utente root, esegui questo comando:
sudo su -
Per identificare il nome e la partizione del dispositivo a blocchi, esegui questo comando dall'istanza temporanea:
lsblkEsempio di output:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdf 202:80 0 101G 0 disk └─xvdf1 202:81 0 101G 0 part xvdg 202:80 0 10G 0 diskQuesto esempio utilizza un'istanza XEN con driver blkfront.
-
Se utilizzi un volume partizionato, esegui questo comando per montare la partizione /dev/xvdf1 invece del dispositivo /dev/xvdf:
mount -o nouuid /dev/xvdf1 /mntNota: sia /dev/xvda che /dev/xvdf sono volumi partizionati, mentre /dev/xvdg non lo è.
Se utilizzi un'istanza costruita su AWS Nitro System, il nome del dispositivo del volume è simile a /dev/nvme[0-26]n1. Per montare la partizione nella directory /mnt, esegui questo comando:mount -o nouuid /dev/nvme1n1p1 /mntNota: sostituisci nvme1n1p1 con il nome del dispositivo a blocchi identificato nel passaggio 7. Per ulteriori informazioni, consulta Nomi dei dispositivi per i volumi sulle istanze Amazon EC2.
-
Per creare un ambiente chroot nella directory /mnt, esegui questo comando:
for i in dev proc sys run; do mount -o bind /$i /mnt/$i; done; chroot /mntL'esempio esegue il bind mount delle directory /dev, /proc, /sys e /run dal file system root originale. Questa configurazione consente ai processi eseguiti all'interno dell'ambiente chroot di accedere alle directory di sistema.
-
Per creare un backup degli initramfs nella directory**/**, esegui questo comando:
for file in /boot/initramfs-*.img; do cp "${file}" "/$(basename "$file")_$(date +%Y%m%d)"; done
- Per elencare il kernel predefinito, esegui questo comando:
grubby --default-kernel
Esempio di output:
/boot/vmlinuz-5.15.156-102.160.amzn2.x86_64
L'output precedente elenca i kernel che si avviano allo startup. Per elencare i kernel e gli initramfs nella directory di avvio, esegui questo comando:
ls -lh /boot/vmlinuz* && ls -lh /boot/initr*
Esempio di output:
-rwxr-xr-x. 1 root root 9.7M Apr 23 20:37 /boot/vmlinuz-5.10.215-203.850.amzn2.x86_64-rwxr-xr-x. 1 root root 9.9M Apr 23 17:00 /boot/vmlinuz-5.15.156-102.160.amzn2.x86_64 -rw-------. 1 root root 12M May 3 23:45 /boot/initramfs-5.10.215-203.850.amzn2.x86_64.img -rw-------. 1 root root 9.8M May 14 08:03 /boot/initramfs-5.15.156-102.160.amzn2.x86_64.img
Prendi nota dei file kernel vmlinuz che hanno file initramfs corrispondenti. Per ricostruire l'initramfs, esegui questo comando:
dracut --force --verbose /boot/initramfs-kernelVersion.img kernelVersion
Nota: sostituisci kernelVersion con l'ultima versione del kernel. Per determinare se l'istanza si avvia da UEFI o BIOS, esegui questo comando:
boot_mode=$(ls /sys/firmware/efi/efivars >/dev/null 2>&1 && echo "EFI" || echo "BIOS"); echo "Boot mode detected: $boot_mode"
- Aggiorna la configurazione di grub. Se l'istanza si avvia da BIOS, esegui questo comando:
grub2-mkconfig -o /boot/grub2/grub.cfg
Nota: quando esegui il comando precedente, potresti ricevere il messaggio di errore "device-mapper: reload ioctl on osprober-linux-xvda2 (253:0) failed: Device or resource busy Command failed". Per risolvere il problema, aggiunge il parametro GRUB_DISABLE_OS_PROBER=true al file /etc/default/grub, quindi esegui nuovamente il comando.
Se l'istanza si avvia da UEFI, esegui questi comandi in base al sistema operativo.
UEFI:
Amazon Linux 2 e Amazon Linux 2023:
grub2-mkconfig -o /boot/efi/EFI/amzn/grub.cfg
Fedora 16+:
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
Red Hat 7+:
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
- Per uscire e scollegare il volume, esegui questo comando:
exit; umount -fl /mnt
- Scollega il volume secondario dall'istanza temporanea e collegalo all'istanza originale come dispositivo principale. Utilizza il nome del dispositivo che hai annotato nel passaggio 4.
- Connettiti all'istanza originale.
- Argomenti
- Compute
- Lingua
- Italiano
Video correlati

