내용으로 건너뛰기

EC2 인스턴스의 "Kernel panic - not syncing" 오류를 해결하려면 어떻게 해야 합니까?

4분 분량
0

initramfs 또는 커널 모듈이 없기 때문에 커널을 업그레이드하거나 Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스를 재부팅하려고 합니다. 하지만 “Kernel panic - not syncing" 오류가 발생합니다.

간략한 설명

디바이스 또는 주소가 존재하지 않는 경우 "Kernel panic - not syncing" 오류가 발생합니다. 이 문제를 해결하려면 임시 인스턴스를 시작하고 결함이 있는 루트 디스크를 보조 드라이브로 연결하여 진단을 수행하십시오.

중요: 인스턴스를 중지하고 시작하기 전에 다음 작업을 수행하십시오.

참고: 인스턴스를 중지하고 시작할 때 인스턴스의 퍼블릭 IP 주소가 변경됩니다. 퍼블릭 IP 주소 대신 탄력적 IP 주소를 사용하여 외부 트래픽을 인스턴스로 라우팅하는 것이 가장 좋습니다.

자세한 내용은 인스턴스를 중지하면 어떻게 됩니까?를 참조하십시오.

해결 방법

참고: 다음 해결 단계는 Amazon Linux 2, Amazon Linux 2023, Fedora 16 이상 및 Red Hat Enterprise Linux(RHEL) 7 이상에만 적용됩니다.

루트 디스크를 임시 인스턴스에 연결하려면 다음 단계를 완료하십시오.

  1. 원본 인스턴스의 루트 볼륨에 대한 볼륨 ID 및 디바이스 이름을 가져옵니다.

  2. 원본 인스턴스를 중지합니다.

  3. 동일한 가용 영역에서 동일한 Linux 운영 체제(OS) 버전을 사용하는 Amazon Machine Image(AMI)에서 임시 인스턴스를 시작합니다.

  4. 원본 인스턴스에서 루트 볼륨을 분리하고, 임시 인스턴스에 보조 볼륨으로 연결합니다. 볼륨 디바이스 이름을 기록해 둡니다.

  5. SSH 키 페어를 사용하여 임시 인스턴스에 연결합니다.

  6. 루트 사용자로 변경하려면 다음 명령을 실행합니다.

    sudo su
  7. 블록 디바이스 이름과 파티션을 식별하려면 임시 인스턴스에서 다음 명령을 실행합니다.

    lsblk

    출력 예시:

    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

    이 예에서는 blkfront 드라이버가 있는 XEN 인스턴스를 사용합니다.

  8. 파티셔닝된 볼륨을 사용하는 경우 다음 명령을 실행하여 /dev/xvdf 디바이스 대신 /dev/xvdf1 파티션을 마운트합니다.

    mount -o nouuid  /dev/xvdf1 /mnt

    참고: /dev/xvda/dev/xvdf는 모두 파티셔닝된 볼륨이지만 /dev/xvdg는 아닙니다.
    AWS Nitro System에 구축된 인스턴스를 사용하는 경우 볼륨 디바이스 이름은 /dev/nvme[0-26]n1과 비슷합니다. 파티션을 /mnt 디렉터리에 마운트하려면 다음 명령을 실행합니다.

    mount -o nouuid  /dev/nvme1n1p1 /mnt

    참고: nvme1n1p1을 7단계에서 식별한 블록 디바이스 이름으로 바꾸십시오. 자세한 내용은 Amazon EC2 인스턴스 볼륨의 디바이스 이름을 참조하십시오.

  9. /mnt 디렉터리에 chroot 환경을 생성하려면 다음 명령을 실행합니다.

    for i in dev proc sys run; do mount -o bind /$i /mnt/$i; done; chroot /mnt

    이 예에서는 원래 루트 파일 시스템의 /dev, /proc, /sys/run 디렉터리를 바인드 마운트합니다. 이 구성을 사용하면 chroot 환경 내에서 실행되는 프로세스가 시스템 디렉터리에 액세스할 수 있습니다.

  10. / 디렉터리에 initramfs의 백업을 생성하려면 다음 명령을 실행합니다.

for file in /boot/initramfs-*.img; do cp "${file}" "/$(basename "$file")_$(date +%Y%m%d)"; done
  1. 기본 커널을 나열하려면 다음 명령을 실행합니다.
grubby --default-kernel

출력 예시:

/boot/vmlinuz-5.15.156-102.160.amzn2.x86_64

위 출력에는 시작 시 부팅되는 커널이 나열되어 있습니다. 부트 디렉터리의 커널과 initramfs를 나열하려면 다음 명령을 실행합니다.

 ls -lh /boot/vmlinuz* && ls -lh /boot/initr*

출력 예시:

-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

해당하는 initramfs 파일이 있는 vmlinuz 커널 파일을 확인하십시오. initramfs를 다시 빌드하려면 다음 명령을 실행합니다.

dracut --force --verbose /boot/initramfs-kernelVersion.img kernelVersion

참고: kernelVersion을 최신 커널 버전으로 교체합니다. 인스턴스가 UEFI에서 부팅되는지 또는 BIOS에서 부팅되는지 확인하려면 다음 명령을 실행합니다.

boot_mode=$(ls /sys/firmware/efi/efivars >/dev/null 2>&1 && echo "EFI" || echo "BIOS"); echo "Boot mode detected: $boot_mode"
  1. grub 구성을 업데이트합니다. 인스턴스가 BIOS에서 부팅되는 경우 다음 명령을 실행합니다.
grub2-mkconfig -o /boot/grub2/grub.cfg

참고: 위 명령을 실행할 때 "device-mapper: reload ioctl on osprober-linux-xvda2 (253:0) failed: Device or resource busy Command failed" 오류 메시지가 표시될 수 있습니다. 이 문제를 해결하려면 GRUB_DISABLE_OS_PROBER=true 파라미터를 /etc/default/grub 파일에 추가한 다음, 명령을 다시 실행합니다.
인스턴스가 UEFI에서 부팅되는 경우 OS에 따라 다음 명령을 실행합니다.
UEFI:
Amazon Linux 2 및 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. 볼륨을 종료하고 분리하려면 다음 명령을 실행합니다.
exit; umount -fl /mnt
  1. 임시 인스턴스에서 보조 볼륨을 분리하고, 원본 인스턴스에 루트 디바이스로 연결합니다. 4단계에서 기록해둔 디바이스 이름을 사용하십시오.
  2. 원본 인스턴스에 연결합니다.
AWS 공식업데이트됨 일 년 전