커널 패닉으로 인한 Linux VM 부팅 문제 해결


이 문서에는 커널 패닉 오류로 인해 VM이 응답하지 않는 문제에 대한 문제 해결 정보가 포함되어 있습니다.

시작하기 전에

  • Cloud Logging에서 직렬 포트 출력을 로깅하려면 Cloud Logging에 익숙해야 합니다.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공하는 사용자 인증 정보를 사용합니다.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      자세한 내용은 Google Cloud 인증 문서의 REST 사용 인증을 참조하세요.

커널 패닉

커널 패닉은 커널이 게스트 OS를 부팅하는 데 필요한 initramfs 모듈을 적절하게 로드할 수 없을 때 발생할 수 있습니다.

다른 형태의 커널 패닉은 커널이 특정 요청을 처리하는 방법을 모르고 중지하여 자신을 보호하는 경우에 발생할 수 있습니다. 커널 패닉은 RedHat, SUSE, CentOS, Ubuntu를 실행하는 Compute Engine VM에서 발생할 수 있습니다.

일반적인 오류 메시지

다음은 참조할 수 있도록 가장 일반적인 커널 패닉 이벤트를 보여줍니다.

Kernel panic - not syncing: hung_task: blocked tasks
Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
Kernel panic - not syncing: NMI: Not continuing
Kernel panic - not syncing: out of memory. panic_on_oom is selected
Kernel panic - not syncing: Fatal Machine check 

주요 원인

커널 패닉 오류는 여러 이유로 인해 발생할 수 있습니다. 일반적인 이유는 다음과 같습니다.

  • 커널에 해당하는 initramfs 파일과 관련된 항목이 grub.cfg 파일에 없습니다.
  • initramfs 파일이 커널 설치 중 /boot 디렉터리에 생성되지 않았습니다.
  • initramfs 파일이 일부만 생성되거나 손상되었습니다.

증상

VM 인스턴스에서 커널 패닉이 발생할 경우 일반적인 증상은 시리얼 콘솔을 사용하더라도 커널에서 VM에 연결할 수 없는 경우입니다.

게스트 OS에서 로드한 커널을 식별하려면 직렬 콘솔 로그를 확인해야 합니다. 예를 들면 다음과 같습니다.

[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.10.0-1160.95.1.el7.x86_64 (mockbuild@x86-vm-42.build.eng.bos.redhat.com) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Aug 10 10:46:21 EDT 2023
커널 패닉 오류도 확인합니다. 이 오류는 일반적으로 VM이 시작될 때 커널 줄이나 여러 스택 호출 trace가 있는 직렬 콘솔 로그 끝에 표시됩니다.

다음 예시는 initramfs 문제로 인한 커널 패닉 이벤트를 보여줍니다.

[    1.520840] No filesystem could mount root, tried:
[    1.520840]
[    1.521964] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    1.523495] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 3.10.0-1160.95.1.el7.x86_64 #1
[    1.524932] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/11/2022
[    1.526901] Call Trace:
[    1.527421]  dump_stack+0x41/0x60
[    1.527978]  panic+0xe7/0x2ac
[    1.528578]  mount_block_root+0x2be/0x2e6
[    1.529693]  ? do_early_param+0x95/0x95
[    1.530441]  prepare_namespace+0x135/0x16b
[    1.531237]  kernel_init_freeable+0x203/0x22d
[    1.532081]  ? rest_init+0xaa/0xaa
[    1.532808]  kernel_init+0xa/0x103
[    1.533395]  ret_from_fork+0x35/0x40
[    1.535229] Kernel Offset: 0x23a00000 from 0xffffffff81000000  

커널 패닉 오류 해결

커널 패닉 오류를 해결하려면 다음 단계를 수행합니다.

  1. 시리얼 콘솔에 연결하고 Google Cloud 콘솔에서 VM에 로그인합니다.

  2. Google Cloud 콘솔에서 VM의 재설정을 클릭합니다.

  3. GRUB 스플래시 화면이 표시되면 이전에 작동되던 커널 또는 구조 커널을 선택한 후 시스템을 부팅합니다. 이렇게 하면 선택한 커널로 VM이 시작됩니다.

    커널 패닉

  4. VM에 액세스할 수 없으면 VM에 대한 SSH 연결을 시작할 수 있습니다.

  5. 문제 원인을 파악하고 그에 따라 추가 조치를 수행합니다.

    예를 들어 initramfs 파일이 누락되었거나 손상되었으면 다음 단계를 수행합니다.

    1. dracut 명령어를 사용하여 원본 커널에 해당하는 initramfs 파일을 생성합니다. 예를 들면 다음과 같습니다.

      dracut -f /boot/initramfs-3.10.0-1160.95.1.el7.x86_64.img 3.10.0-1160.95.1.el7.x86_64
      
    2. grub2-mkconfig 명령어를 사용하여 grub2.cfg 파일을 업데이트합니다. 예를 들면 다음과 같습니다.

      grub2-mkconfig -o /boot/grub2/grub.cfg
      
    3. initramfs 파일이 생성된 후 오류 없이 VM을 다시 시작할 수 있습니다.