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 이상에만 적용됩니다.
루트 디스크를 임시 인스턴스에 연결하려면 다음 단계를 완료하십시오.
-
원본 인스턴스의 루트 볼륨에 대한 볼륨 ID 및 디바이스 이름을 가져옵니다.
-
원본 인스턴스를 중지합니다.
-
동일한 가용 영역에서 동일한 Linux 운영 체제(OS) 버전을 사용하는 Amazon Machine Image(AMI)에서 임시 인스턴스를 시작합니다.
-
원본 인스턴스에서 루트 볼륨을 분리하고, 임시 인스턴스에 보조 볼륨으로 연결합니다. 볼륨 디바이스 이름을 기록해 둡니다.
-
SSH 키 페어를 사용하여 임시 인스턴스에 연결합니다.
-
루트 사용자로 변경하려면 다음 명령을 실행합니다.
sudo su
-
블록 디바이스 이름과 파티션을 식별하려면 임시 인스턴스에서 다음 명령을 실행합니다.
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 인스턴스를 사용합니다.
-
파티셔닝된 볼륨을 사용하는 경우 다음 명령을 실행하여 /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 인스턴스 볼륨의 디바이스 이름을 참조하십시오.
-
/mnt 디렉터리에 chroot 환경을 생성하려면 다음 명령을 실행합니다.
for i in dev proc sys run; do mount -o bind /$i /mnt/$i; done; chroot /mnt
이 예에서는 원래 루트 파일 시스템의 /dev, /proc, /sys 및 /run 디렉터리를 바인드 마운트합니다. 이 구성을 사용하면 chroot 환경 내에서 실행되는 프로세스가 시스템 디렉터리에 액세스할 수 있습니다.
-
/ 디렉터리에 initramfs의 백업을 생성하려면 다음 명령을 실행합니다.
for file in /boot/initramfs-*.img; do cp "${file}" "/$(basename "$file")_$(date +%Y%m%d)"; done
- 기본 커널을 나열하려면 다음 명령을 실행합니다.
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"
- 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
- 볼륨을 종료하고 분리하려면 다음 명령을 실행합니다.
exit; umount -fl /mnt
- 임시 인스턴스에서 보조 볼륨을 분리하고, 원본 인스턴스에 루트 디바이스로 연결합니다. 4단계에서 기록해둔 디바이스 이름을 사용하십시오.
- 원본 인스턴스에 연결합니다.