Salta al contenuto

Come posso risolvere l'errore “Kernel panic - not syncing" nella mia istanza EC2?

5 minuti di lettura
0

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:

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:

  1. Ottieni l'ID del volume e il nome del dispositivo del volume principale dell'istanza originale.

  2. Arresta l'istanza originale.

  3. Avvia un'istanza temporanea da un'Amazon Machine Image (AMI) con la stessa versione del sistema operativo Linux nella stessa zona di disponibilità.

  4. Scollega il volume principale dall'istanza originale e collegalo all'istanza temporanea come volume secondario. Prendi nota del nome del dispositivo del volume.

  5. Utilizza la coppia di chiavi SSH per connetterti all'istanza temporanea.

  6. Per passare all'utente root, esegui questo comando:

    sudo su
  7. Per identificare il nome e la partizione del dispositivo a blocchi, esegui questo comando dall'istanza temporanea:

    lsblk

    Esempio 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 disk

    Questo esempio utilizza un'istanza XEN con driver blkfront.

  8. Se utilizzi un volume partizionato, esegui questo comando per montare la partizione /dev/xvdf1 invece del dispositivo /dev/xvdf:

    mount -o nouuid  /dev/xvdf1 /mnt

    Nota: 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 /mnt

    Nota: 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.

  9. 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 /mnt

    L'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.

  10. 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
  1. 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"
  1. 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
  1. Per uscire e scollegare il volume, esegui questo comando:
exit; umount -fl /mnt
  1. 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.
  2. Connettiti all'istanza originale.
AWS UFFICIALEAggiornata un anno fa