Linux Compute Engine 인스턴스 부팅 문제 해결

이 문서는 Linux Compute Engine 인스턴스가 부팅되지 않는 이유를 파악하고 일반적인 문제를 해결하는 데 도움이 됩니다.

부팅에 실패한 컴퓨팅 인스턴스에는 일반적으로 다음 증상 중 하나 이상이 표시됩니다.

  • 컴퓨팅 인스턴스가 RUNNING 상태이지만 SSH를 사용하여 연결할 수 없습니다.
  • 직렬 콘솔 출력이 부팅 시퀀스 도중에 중지되거나 긴급 또는 복구 프롬프트에서 종료됩니다.
  • 직렬 콘솔 출력에 FAILED, error:, Kernel panic 또는 emergency mode가 포함됩니다.

부팅 문제를 해결하려면 먼저 원인을 파악한 후, 계속 연결할 수 있는 경우 컴퓨팅 인스턴스 내부에서 수정하거나, 부팅 디스크를 다른 컴퓨팅 인스턴스에 연결하여 오프라인으로 수정합니다.

컴퓨팅 인스턴스가 부팅을 완료했지만 연결할 수 없는 경우 SSH 오류 문제 해결을 참조하세요.

시작하기 전에

  • 컴퓨팅 인스턴스가 직렬 콘솔 출력을 작성하는지 확인합니다. 직렬 포트 출력은 컴퓨팅 인스턴스가 실행되는 동안 사용할 수 있습니다. 컴퓨팅 인스턴스가 중지된 후에도 이를 유지하려면 Cloud Logging에 대한 직렬 포트 로깅을 사용 설정하세요. 자세한 내용은 직렬 포트 출력 보기를 참고하세요.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인합니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음 옵션 중 하나를 선택하여 Compute Engine에 인증하면 됩니다.
    1. Google Cloud CLI를 설치합니다. 설치 후 다음 명령어를 실행하여 Google Cloud CLI를 초기화합니다.

      gcloud init

      외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

    2. 기본 리전 및 영역을 설정합니다.

원인 자동 감지

직렬 콘솔 출력을 수동으로 읽기 전에 다음 도구 중 하나를 사용하세요. 각각 컴퓨팅 인스턴스의 가장 최근 부팅 출력을 읽고, 가장 가능성 있는 원인을 보고하고, 이 문서의 일치하는 섹션으로 연결됩니다.

콘솔

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 컴퓨팅 인스턴스 행에서 SSH를 클릭합니다.

  3. 연결에 실패하면 연결 대화상자에서 문제 해결을 클릭합니다. 문제 해결 도구는 직렬 콘솔 출력을 분석하는 부팅 검사를 포함하여 연결 검사를 실행합니다.

gcloud

SSH를 사용하여 연결할 수 없는 컴퓨팅 인스턴스를 확인하려면 연결 확인과 부팅 확인을 실행하는 gcloud CLI SSH 문제 해결사를 실행하세요.

gcloud compute ssh INSTANCE_NAME --zone=ZONE --troubleshoot

부팅 시퀀스를 직접 확인하려면 부팅 진단 명령어를 실행합니다.

이 명령어를 사용하려면 알파 명령어 구성요소를 설치했는지 확인합니다.

gcloud alpha compute diagnose boot INSTANCE_NAME --zone=ZONE

다음을 바꿉니다.

  • INSTANCE_NAME: 컴퓨팅 인스턴스의 이름입니다.
  • ZONE: 컴퓨팅 인스턴스를 포함하는 영역입니다.

부팅 문제가 감지되면 출력에 원인이 표시되고 해결 방법이 연결됩니다. 문제가 발견되지 않으면 수동 단계를 계속 진행합니다.

직렬 콘솔 출력 읽기

도구에서 문제를 감지하지 못하거나 원인을 확인하려면 직접 직렬 콘솔 출력을 읽으세요.

콘솔

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 직렬 포트 출력을 보려는 컴퓨팅 인스턴스를 선택합니다.

  3. 로그에서 직렬 포트 1(콘솔)을 클릭합니다.

gcloud

gcloud compute instances get-serial-port-output INSTANCE_NAME --zone=ZONE

다음을 바꿉니다.

  • INSTANCE_NAME: 컴퓨팅 인스턴스의 이름입니다.
  • ZONE: 컴퓨팅 인스턴스를 포함하는 영역입니다.

마지막 부팅으로 이동합니다. 유용한 줄은 일반적으로 첫 번째 [FAILED] 줄, Kernel panic 줄 또는 긴급 상황 프롬프트 바로 앞에 있습니다. 찾은 내용을 다음 섹션의 서명과 비교합니다.

일반적인 부팅 문제

다음 섹션에는 Linux 컴퓨팅 인스턴스의 일반적인 부팅 실패, 직렬 콘솔 출력 서명, 해결 방법이 나와 있습니다. 대부분의 해결 방법에서는 오프라인으로 디스크 수정에 설명된 대로 부팅 디스크를 복구 VM에 연결해야 합니다.

/etc/fstab 파일 항목을 마운트할 수 없음

증상: 직렬 콘솔 출력에 다음과 같은 줄이 포함되고 그 뒤에 You are in emergency mode가 표시됩니다.

UUID=1234abcd-... does not exist
Timed out waiting for device /dev/sdb1
mount: special device /dev/sdb1 does not exist
[DEPEND] Dependency failed for /mnt/data.mount

원인: /etc/fstab의 항목이 컴퓨팅 인스턴스에 연결되지 않은 기기나 UUID를 참조하거나 파일 시스템을 마운트할 수 없습니다. systemd 서비스가 부팅을 중지하고 긴급 모드로 전환됩니다.

해결 방법: 복구 VM에서 마운트된 디스크의 /etc/fstab 항목을 수정하거나 삭제합니다. 절차는 fstab 오류로 인한 Linux VM 부팅 문제 해결을 참조하세요. 누락된 기기가 부팅을 차단하지 못하도록 하는 마운트 옵션은 디스크 마운트를 참조하세요.

GRUB이 구성 또는 커널을 로드할 수 없음

증상: 부팅이 GRUB 프롬프트에서 중지되고 직렬 콘솔 출력에 다음과 같은 줄이 포함됩니다.

error: file '/boot/grub/grub.cfg' not found
error: file '/vmlinuz-6.1.0-18-amd64' not found
error: no such partition
error: no such device
error: unknown filesystem
error: you need to load the kernel first
grub rescue>
Minimal BASH-like line editing is supported

원인: GRUB 부트 로더가 구성 파일, 모듈 또는 구성이 참조하는 커널 및 초기 RAM 디스크를 찾을 수 없습니다. 이 문제는 패키지 업그레이드 실패, 파티션 레이아웃 변경, /boot 파티션 재포맷 또는 손상, 파일 시스템 UUID가 변경된 클론 디스크 후에 발생합니다.

해결 방법: 복구 VM에서 부팅 디스크를 마운트하고 VM 복구에 설명된 대로 chroot 환경을 입력한 후 부트로더 구성에 설명된 대로 GRUB 구성 파일을 재생성합니다. 부팅 로더를 복구할 수 없는 경우 스냅샷에서 디스크를 복원합니다.

초기 RAM 디스크가 루트 파일 시스템을 마운트할 수 없음

증상: 직렬 콘솔 출력에 다음과 같은 줄이 포함됩니다.

dracut-initqueue[452]: Warning: dracut-initqueue timeout - starting timeout scripts
dracut: FATAL: ...
Failed to mount /sysroot
ALERT! UUID=1234abcd-... does not exist. Dropping to a shell!
Gave up waiting for root file system device
VFS: Unable to mount root fs on unknown-block(0,0)

원인: 초기 RAM 디스크 (initramfs)가 시작되었지만 루트 파일 시스템을 찾거나 마운트할 수 없습니다. 일반적인 원인은 더 이상 디스크와 일치하지 않는 root= 커널 매개변수 또는 UUID, 디스크 드라이버가 누락된 initramfs 이미지, 손상된 initramfs 이미지입니다. NVMe 디스크 인터페이스를 사용하는 머신 시리즈에서 /dev/sda과 같은 기기 경로로 디스크 이름을 지정하는 부팅 구성이 더 이상 일치하지 않습니다. 대신 UUID를 사용하세요.

해결 방법: 초기 RAM 디스크가 찾는 루트 파일 시스템이 마운트된 디스크에 있는지 확인한 후 운영체제의 초기 RAM 디스크를 다시 빌드합니다. 절차는 커널 패닉으로 인한 Linux VM 부팅 문제 해결 및 오프라인 디스크 수정을 참조하세요.

파일 시스템 손상

증상: 직렬 콘솔 출력에 다음과 같은 줄이 포함됩니다.

Bad magic number in super-block
EXT4-fs error (device sda1): ...
XFS (sda1): Metadata corruption detected
XFS (sda1): log mount/recovery failed
BTRFS error (device sda1): ...
UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.

원인: 부팅 디스크의 파일 시스템이 손상되었습니다. 일반적으로 비정상적인 종료, 디스크 꽉 참, I/O 오류 후에 발생합니다.

해결 방법: 디스크의 스냅샷을 만듭니다. 그런 다음 복구 VM에서 부팅 디스크가 부팅되지 않는 이유 확인에 설명된 대로 마운트 해제된 디스크의 파일 시스템을 확인하고 복구합니다. 확인으로 파일 시스템을 복구할 수 없는 경우 스냅샷에서 디스크를 복원하세요.

커널 패닉

증상: 직렬 콘솔 출력에 Kernel panic - not syncing:가 포함되고 그 뒤에 이유가 표시됩니다(예: Attempted to kill init!, Fatal exception, hung_task: blocked tasks, Out of memory, Fatal Machine check, NMI: Not continuing). 손상된 커널 이미지는 -- System halted로 더 일찍 중지됩니다.

원인: 커널에 복구할 수 없는 오류가 발생했습니다. 콜론 뒤의 이유는 카테고리(비정상 종료된 init, 하드웨어 머신 검사, 메모리 고갈 패닉 또는 손상된 커널 이미지)를 식별합니다.

해결 방법: 컴퓨팅 인스턴스를 재설정합니다. 패닉이 반복되면 커널 패닉으로 인한 Linux VM 부팅 문제 해결을 참고하세요.

SELinux 정책을 로드할 수 없음

증상: 직렬 콘솔 출력에 다음 중 하나가 포함되고 부팅이 중지됩니다.

Failed to load SELinux policy
Unable to load SELinux policy

오류가 아닌 Warning -- SELinux targeted policy relabel is required가 표시될 수도 있습니다. 컴퓨팅 인스턴스가 파일 시스템의 라벨을 다시 지정한 후 자동으로 재부팅됩니다.

원인: 디스크의 SELinux 정책 저장소가 누락되거나 손상되었거나 복원 또는 오프라인 변경 후 파일 라벨이 일치하지 않습니다.

해결 방법: 복구 VM에서 다음 부팅 시 전체 SELinux 재라벨 지정을 위해 마운트된 디스크를 표시하거나 정책 저장소가 손상된 경우 운영체제의 SELinux 정책 패키지를 다시 설치합니다. RHEL 기반 OS 이미지에서는 SELinux를 허용 모드로 변경에 설명된 대로 SELinux를 허용 모드로 설정하여 정책을 복구하는 동안 컴퓨팅 인스턴스를 부팅할 수 있습니다.

시스템에서 init 프로세스를 시작할 수 없음

증상: 직렬 콘솔 출력에 다음과 같은 줄이 포함됩니다.

Failed to switch root
Target filesystem doesn't have requested /sbin/init
No working init found
run-init: /sbin/init: No such file or directory
/sbin/init: error while loading shared libraries: ...

원인: 루트 파일 시스템이 마운트되었지만 systemd과 같은 init 프로그램이 누락되었거나 실행할 수 없거나 누락된 공유 라이브러리에 종속됩니다. 이 문제는 일반적으로 패키지 업그레이드가 중단되거나 복원이 완료되지 않은 경우에 발생합니다.

해결 방법: 복구 VM에서 VM 복구에 설명된 대로 chroot 환경을 입력하고 init 프로그램이 있고 라이브러리가 손상되지 않았는지 확인합니다. 그렇지 않은 경우 배포판의 패키지 관리자를 사용하여 init 시스템 패키지를 다시 설치합니다.

응급 모드 및 잠긴 루트 계정

증상: 직렬 콘솔 출력이 다음 중 하나로 끝납니다.

You are in emergency mode. After logging in, type "journalctl -xb" to view system logs
Give root password for maintenance (or press Control-D to continue):
Cannot open access to console, the root account is locked.

원인: 부팅 중에 단위가 실패하고 systemd가 긴급 타겟에서 중지되었습니다. Google 제공 OS 이미지에서 루트 계정에는 비밀번호가 없으므로 비상 셸을 직렬 콘솔에서 사용할 수 없습니다.

해결 방법: 긴급 프롬프트 앞의 줄에서 실패한 단위를 지정합니다. 이 오류는 일반적으로 다음 문제 중 하나로 인해 발생합니다.

오프라인으로 디스크 수정에 설명된 대로 오프라인으로 원인을 수정합니다. 긴급 셸을 사용하지 마세요.

펌웨어에서 부팅 가능한 디스크를 찾을 수 없음

증상: 직렬 콘솔 출력에 커널 메시지 전에 다음 중 하나가 포함됩니다.

No bootable device.
BdsDxe: failed to load Boot0001
Invalid partition table!
Verification failed: (0x1A) Security Violation

원인: 부팅 디스크가 부팅 기기로 연결되지 않았거나, 파티션 테이블 또는 부팅 레코드가 손상되었거나, 보안 부팅이 사용 설정된 보안 VM 인스턴스에서 부팅 로더 또는 커널이 올바르게 서명되지 않았습니다.

해결 방법: 디스크가 컴퓨팅 인스턴스의 부팅 디스크로 연결되어 있는지 확인합니다(디스크 분리 및 재연결 참고). 파티션 테이블 또는 부팅 레코드가 손상된 경우 GRUB에서 구성 또는 커널을 로드할 수 없음에 설명된 대로 부트로더를 복구합니다. 보안 부팅 위반은 디스크를 수정하여 해결할 수 없습니다. 서명된 커널과 부트로더를 복원하거나 VM 인스턴스에서 보안 VM 옵션 수정에 설명된 대로 컴퓨팅 인스턴스에서 보안 부팅을 사용 중지하세요.

오프라인으로 디스크 수정

컴퓨팅 인스턴스가 로그인 프롬프트에 도달하지 않기 때문에 대부분의 부팅 문제는 컴퓨팅 인스턴스 내부에서 해결할 수 없습니다. 대신 부팅 디스크를 임시 복구 VM에 연결하고 마운트한 후 변경하고 디스크를 다시 이동합니다. 절차는 액세스할 수 없는 VM 복구를 참고하세요.

이 문서의 해결 방법에서는 원래 부팅 디스크가 복구 VM에 연결되고 마운트되어 있다고 가정합니다. 디스크를 변경하기 전에 스냅샷을 만들어 복구에 실패할 경우 복원할 수 있도록 합니다. 절차는 보관처리 및 표준 디스크 스냅샷 만들기를 참고하세요.

디스크를 복구할 수 없는 경우 컴퓨팅 인스턴스 복원

해결 방법이 작동하지 않거나 파일 시스템을 복구할 수 없는 경우 스냅샷에서 부팅 디스크를 복원하거나 스냅샷 또는 맞춤 OS 이미지에서 새 컴퓨팅 인스턴스를 만들어 데이터를 이동하세요.

다음 단계