커널 패닉으로 인한 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. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

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

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

        Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

        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 ([email protected]) (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을 다시 시작할 수 있습니다.