VM 시작 문제 해결


이 문서에는 할당량 오류, 부팅 디스크, 시작 스크립트로 인한 VM 시작 문제의 문제 해결 정보가 포함되어 있습니다.

할당량 오류

인스턴스를 시작하려고 시도할 때 할당량 오류가 수신되면 추가 CPU 할당량을 요청해야 합니다. 자세한 내용은 리소스 할당량 문서의 VM 인스턴스 섹션을 참조하세요.

부팅 디스크

인스턴스가 시작되지 않고 인스턴스에 연결할 수 없거나 대화형 직렬 콘솔을 통해 로그인할 수 없는 경우 부팅 디스크가 부팅 및 시작 프로세스를 완료하지 못하는 이유를 확인합니다.

부팅 디스크가 부팅되지 않는 이유 확인

  • 부팅 디스크가 꽉 찼는지 확인합니다.

    부팅 디스크가 완전히 찼고 운영체제에서 자동 크기 조절을 지원하지 않을 경우 인스턴스에 연결할 수 없습니다. 새로운 인스턴스를 생성하고 부팅 디스크도 다시 생성해야 합니다. 자세한 내용은 VM 또는 전체 부팅 디스크 복구를 참조하세요.

  • 가상 머신 인스턴스의 직렬 포트 출력을 검사합니다.

    인스턴스의 BIOS, 부트로더, 커널은 인스턴스의 직렬 포트 출력에 디버그 메시지를 출력하여 인스턴스에 발생한 오류나 문제에 대한 중요한 정보를 제공합니다. Cloud Logging에 직렬 포트 출력을 로깅하도록 사용 설정하면 인스턴스가 실행 중이 아닐 때도 이 정보에 액세스할 수 있습니다.

  • 직렬 콘솔에 대한 대화형 액세스를 사용 설정합니다.

    인스턴스의 직렬 콘솔에 대한 대화형 액세스를 사용 설정하면 인스턴스를 완전히 부팅하지 않아도 인스턴스 내에서 로그인하여 부팅 문제를 디버그할 수 있습니다. 자세한 내용은 직렬 콘솔과 상호작용을 참조하세요.

  • 디스크의 파일 시스템이 유효한지 확인합니다.

    파일 시스템이 손상되었거나 잘못된 경우 인스턴스를 시작할 수 없습니다. 다음과 같이 디스크의 파일 시스템을 검사합니다.

    1. 필요한 경우 문제가 되는 디스크를 연결되어 있는 인스턴스에서 분리합니다.

      gcloud compute instances delete old-instance --keep-disks boot
      
    2. 최신 Google 제공 이미지가 있는 새 인스턴스를 시작합니다.

      gcloud compute instances create debug-instance
    3. 디스크를 비부팅 디스크로 연결하되 마운트는 하지 않습니다. DISK를 부팅되지 않는 디스크의 이름으로 바꿉니다. 인스턴스에서 디스크를 식별하는 기기 이름을 기록해 둡니다.

      gcloud compute instances attach-disk debug-instance \
          --disk DISK \
          --device-name debug-disk
      
    4. 인스턴스에 연결합니다.

      gcloud compute ssh debug-instance
      
    5. part1 표기법으로 식별되는 디스크의 루트 파티션을 찾습니다. 이 경우 디스크의 루트 파티션은 /dev/sdb1에 있습니다.

      ls -l /dev/disk/by-id
      total 0
      lrwxrwxrwx 1 root root  9 Jan 22 17:09 google-debug-disk -> ../../sdb
      lrwxrwxrwx 1 root root 10 Jan 22 17:09 google-debug-disk-part1 -> ../../sdb1
      lrwxrwxrwx 1 root root  9 Jan 22 17:02 google-persistent-disk-0 -> ../../sda
      lrwxrwxrwx 1 root root 10 Jan 22 17:02 google-persistent-disk-0-part1 -> ../../sda1
      lrwxrwxrwx 1 root root  9 Jan 22 17:09 scsi-0Google_PersistentDisk_debug-disk -> ../../sdb
      lrwxrwxrwx 1 root root 10 Jan 22 17:09 scsi-0Google_PersistentDisk_debug-disk-part1 -> ../../sdb1
      lrwxrwxrwx 1 root root  9 Jan 22 17:02 scsi-0Google_PersistentDisk_persistent-disk-0 -> ../../sda
      lrwxrwxrwx 1 root root 10 Jan 22 17:02 scsi-0Google_PersistentDisk_persistent-disk-0-part1 -> ../../sda1
      
    6. 루트 파티션에서 파일 시스템 검사를 실행합니다.

      sudo fsck /dev/sdb1
      fsck from util-linux 2.20.1
      e2fsck 1.42.5 (29-Jul-2012)
      /dev/sdb1: clean, 19829/655360 files, 208111/2621184 blocks
      
    7. 파일 시스템을 마운트합니다.

       sudo mkdir /mydisk
      
       sudo mount /dev/sdb1 /mydisk
      
    8. 디스크에 커널 파일이 있는지 확인합니다.

       ls /mydisk/boot/vmlinuz-*
       /mydisk/boot/vmlinuz-3.2.0-4-amd64
       

  • 디스크에 유효한 마스터 부트 레코드(MBR)가 있는지 확인합니다.

    영구 부팅 디스크(예: /dev/sdb)에 연결된 디버그 인스턴스에서 다음과 같은 명령어를 실행합니다.

    sudo parted /dev/sdb print
    

    MBR이 유효하면 파일 시스템에 대한 정보가 나열됩니다.

    Disk /dev/sdb: 10.7GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: msdos
    Disk Flags:
    Number  Start   End     Size    Type     File system  Flags
     1      2097kB  10.7GB  10.7GB  primary  ext4         boot
    

부팅 문제 해결

부팅 및 시작 프로세스의 어느 단계에서 실패하는지 확인 후 다음 작업 중 하나를 수행하여 문제를 해결하면 됩니다.

독립형 부팅 디스크 만들기

가져온 이미지를 임시 VM 인스턴스에 연결된 보조 디스크에 마운트합니다. Cloud Console 또는 gcloud 도구를 사용하여 업로드한 이미지에서 독립형 디스크를 만들고 독립형 디스크가 연결된 임시 VM을 만들 수 있습니다. 이 인스턴스를 사용하여 독립형 디스크의 파일을 수정하고 해당 이미지가 시작되지 않는 문제를 해결할 수 있습니다.

Console

가져온 부팅 디스크 이미지로 독립형 디스크를 만듭니다. 또는 인스턴스에서 부팅 디스크를 분리한 후 분리된 부팅 디스크를 사용하여 인스턴스를 만들 수 있습니다.

  1. Cloud Console에서 디스크 페이지로 이동합니다.

    디스크로 이동

  2. 디스크 만들기를 클릭합니다.
  3. 디스크 만들기 페이지에서 다음 속성을 지정합니다.
    • 영역: Select a zone near you. You must use this same zone when you create your temporary instance.
    • 디스크 소스 유형: 이미지
    • 소스 이미지: Specify the name of the boot disk image that you imported.
  4. 만들기를 클릭하여 디스크를 만듭니다.

독립형 디스크를 연결할 수 있는 임시 인스턴스를 만들고 Cloud Console 환경에서 작동하도록 부트로더를 구성합니다.

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

    인스턴스로 이동

  2. 인스턴스 만들기 버튼을 클릭합니다.

  3. 인스턴스 만들기 페이지에서 인스턴스 이름과 인스턴스를 찾을 영역을 지정합니다. 이 영역은 독립형 디스크를 만든 영역과 같아야 합니다.

  4. 관리, 보안, 디스크, 네트워킹, 단독 테넌트 섹션을 펼칩니다.

  5. 추가 디스크 섹션의 디스크 탭에서 기존 디스크 연결을 클릭합니다. 새 섹션이 표시됩니다.

  6. 디스크 섹션의 드롭다운 목록에서 이전에 만들었던 독립형 디스크를 선택합니다. 그러면 독립형 디스크가 인스턴스에 연결되므로 나중에 이 디스크를 마운트하고 디스크 콘텐츠를 수정할 수 있습니다.

  7. 완료를 클릭하여 디스크 연결을 마칩니다.

  8. 만들기 버튼을 클릭하여 인스턴스를 만듭니다.

gcloud

가져온 부팅 디스크 이미지로 독립형 디스크를 만듭니다. 또는 인스턴스에서 부팅 디스크를 분리한 후 분리된 부팅 디스크를 대신 사용하여 인스턴스를 만들 수 있습니다.

gcloud compute disks create DISK_NAME \
    --zone=ZONE \
    --image=IMAGE_NAME

다음을 바꿉니다.

  • DISK_NAME: 새 독립형 디스크의 이름입니다.

  • ZONE: 가까운 영역입니다. 임시 인스턴스를 만들 때 이와 동일한 영역을 사용해야 합니다.

  • IMAGE_NAME: 가져온 부팅 디스크 이미지의 이름입니다.

독립형 디스크를 연결할 수 있는 임시 인스턴스를 만들고 Cloud Console 환경에서 작동하도록 부트로더를 구성합니다.

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --disk name=DISK_NAME

다음을 바꿉니다.

  • INSTANCE_NAME: 인스턴스의 고유한 이름입니다.

  • ZONE: 독립형 디스크를 만든 영역입니다.

  • DISK_NAME: 가져온 부팅 디스크 이미지에서 만든 독립형 디스크의 이름입니다.

연결된 독립형 디스크로 인스턴스를 만들면 원래 부팅 디스크 이미지에서 부트로더를 수정할 수 있는 가상 환경이 구축됩니다.

부팅 디스크 구성

인스턴스에 연결하고 독립형 디스크를 마운트한 후 Compute Engine에서 제대로 부팅되도록 부트로더를 구성합니다.

  1. 브라우저의 SSH 또는 gcloud compute ssh 명령어를 사용하여 임시 인스턴스에 연결합니다.
  2. blkid 명령어를 사용하여 수정하려는 디스크와 마운트해야 하는 파티션을 식별합니다. 이 예시에서 /dev/sdb는 가져온 디스크입니다.

    lsblk
    
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   10G  0 disk
    └─sda1   8:1    0   10G  0 part /
    sdb      8:16   0  100G  0 disk
    ├─sdb1   8:17   0   96G  0 part
    ├─sdb2   8:18   0    1K  0 part
    └─sdb5   8:21   0    4G  0 part
    
  3. 독립형 디스크의 루트 파티션을 /tmp 디렉터리에 마운트합니다. 이 예시에서 /dev/sdb1은 루트 파티션이며 다른 파티션은 수정하지 않아도 됩니다. 사용 중인 파티션 스키마에 따라, 변경해야 하는 모든 파일에 액세스하기 위해 여러 파티션을 마운트해야 할 수 있습니다.

    sudo mount /dev/sdb1 /tmp
    
  4. 디스크 부팅 프로세스 실패의 원인이 된 파일을 수정합니다. 자세한 내용은 부트로더 구성 지침을 참조하세요.

  5. 임시 인스턴스에서 부팅 디스크의 마운트를 해제합니다.

    sudo umount /tmp
    

부팅 디스크 사용

이 디스크 구성을 완료한 후 분리하여 새 인스턴스의 부팅 디스크로 사용합니다.

Console

독립형 디스크를 임시 인스턴스에서 분리합니다.

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

    인스턴스로 이동

  2. 인스턴스 목록에서 독립형 부팅 디스크를 수정한 임시 인스턴스의 이름을 클릭합니다. 인스턴스 세부정보 페이지가 열립니다.

  3. 인스턴스 세부정보 페이지의 상단에서 수정을 클릭합니다.

  4. 추가 디스크에서 독립형 디스크 옆에 있는 X를 클릭하여 해당 독립형 디스크를 임시 인스턴스에서 분리하도록 지정합니다.

  5. 저장을 클릭하여 변경사항을 저장합니다.

분리한 독립형 디스크를 사용하여 인스턴스를 만듭니다.

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

    인스턴스로 이동

  2. 인스턴스 만들기 버튼을 클릭합니다.

  3. 인스턴스 만들기 페이지에서 인스턴스 이름과 인스턴스를 찾을 영역을 지정합니다. 이 영역은 독립형 디스크를 만든 영역과 같아야 합니다.

  4. 부팅 디스크에서 변경을 클릭하여 부팅 디스크 구성을 시작합니다.

  5. 기존 디스크 탭에서 독립형 부팅 디스크를 선택하여 새 인스턴스의 부팅 디스크로 사용합니다.

  6. 만들기 버튼을 클릭하여 인스턴스를 만듭니다.

gcloud

독립형 디스크를 임시 인스턴스에서 분리합니다.

gcloud compute instances detach-disk INSTANCE_NAME \
    --disk name=DISK_NAME

다음을 바꿉니다.

  • INSTANCE_NAME: 인스턴스의 고유한 이름입니다.
  • DISK_NAME: 새 독립형 디스크의 이름입니다.

분리한 독립형 디스크를 사용하여 인스턴스를 만듭니다.

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --disk name=DISK_NAME,boot=yes

다음을 바꿉니다.

  • INSTANCE_NAME: 인스턴스의 고유한 이름입니다.
  • ZONE: 독립형 디스크가 있는 영역입니다.
  • DISK_NAME: 가져온 부팅 디스크 이미지에서 만든 독립형 디스크의 이름입니다.

수정된 부팅 디스크를 사용하여 만든 인스턴스를 테스트합니다. 그래도 인스턴스에 연결할 수 없다면 다시 한 번 직렬 콘솔 출력을 참조하여 부팅 프로세스가 어디에서 실패하는지 확인합니다. 부팅 디스크 이미지 문제가 해결될 때까지 문제 해결 프로세스를 반복합니다.

시작 스크립트

시작 스크립트 문제는 메타데이터 서버 및 네트워크의 연결과 관련이 있을 수 있습니다.

  • Linux VM에 한해 Compute Engine은 커스텀 시작 또는 종료 스크립트 등의 정보를 메타데이터 서버에서 가져오기 전에 메타데이터 서버 연결을 기다립니다. 메타데이터 서버가 응답하지 않거나 네트워크가 아직 구성되지 않은 경우 VM 시작이 완료되지 않습니다.

  • v20160606 이전의 이미지가 있는 Linux VM의 경우 직렬 포트 출력에 "Waiting for metadata server, attempt N"이 표시됩니다. 여기서 N은 시도한 횟수입니다.

    이 같은 문제는 자체적으로 해결되는 일시적인 네트워크 문제로 인해 최대 7분간 지속될 수 있습니다. 7분이 지나도 문제가 자체적으로 해결되지 않으면 VM 인스턴스를 다시 만드세요.