액세스할 수 없는 VM 복구


어떤 이유로든 Linux VM에 액세스할 수 없으면 다음 단계를 수행하여 VM을 복구할 수 있습니다.

필요한 역할

VM을 복구하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 VM을 복구하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

VM을 복구하려면 다음 권한이 필요합니다.

  • 프로젝트에 대한 compute.instances.create 권한
  • 프로젝트에 대한 compute.disks.create 권한
  • 프로젝트에 대한 compute.instances.get 권한
  • 디스크에 대한 compute.disks.createSnapshot 권한
  • 새 VM에 대한 compute.instances.attachDisk 권한
  • 디스크에 대한 compute.disks.use 권한
  • 신규 및 액세스할 수 없는 VM에 대한 compute.instances.start 권한
  • 신규 및 액세스할 수 없는 VM에 대한 compute.instances.stop 권한

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

VM 복구

VM에 연결할 수 없거나 부팅 디스크가 가득 찬 경우에는 임시 VM을 만들어 액세스할 수 없는 VM을 복구해야 합니다.

  1. (선택사항) 액세스할 수 없는 VM을 중지합니다.
  2. 액세스할 수 없는 VM의 부팅 디스크에서 스냅샷을 만듭니다. 루트 파일 시스템이 여러 디스크에 분할된 경우 각 디스크의 스냅샷을 만들어야 합니다.
  3. 액세스할 수 없는 VM의 OS에 가장 가까운 공개 이미지를 사용하여 임시 VM을 만듭니다. 신뢰할 수 있는 이미지 정책에 따라 공개 이미지에서 부팅 디스크를 만들 수 없는 경우도 있습니다. 이 경우 복구 VM을 만들기 전에 관리자에게 이 제한을 일시적으로 해제해 달라고 요청해야 합니다. 자세한 내용은 이미지 액세스 제약조건 설정을 참고하세요.
  4. 이전에 만든 액세스할 수 없는 VM의 부팅 디스크 스냅샷별로 다음을 실행하여 스냅샷에서 새 디스크를 만들고 복구 VM에 연결합니다.

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

      VM 인스턴스로 이동

    2. 만든 임시 VM의 이름을 클릭합니다.

    3. 수정을 클릭합니다.

    4. 추가 디스크에서 새 디스크 추가를 클릭한 후 다음을 수행합니다.

      1. 디스크 이름을 추가합니다(예: my-recovery-disk).
      2. 소스 유형에서 스냅샷 탭을 선택합니다.
      3. 소스 스냅샷 드롭다운 메뉴에서 이 단계에서 이전에 만든 소스 VM의 스냅샷을 선택합니다.
      4. 완료를 클릭합니다.
    5. 저장을 클릭합니다.

  5. SSH를 사용하여 임시 VM에 연결합니다.

  6. 다음 명령어를 실행하여 이전에 VM에 연결한 각 디스크의 이름을 확인합니다.

    lsblk -d -o NAME,SERIAL

    출력은 다음과 비슷합니다.

     NAME SERIAL
     sda  rescue-vm
     sdb  my-recovery-disk
     

    이 예에서 rescue-vm는 복구 VM의 부팅 디스크이고 my-recovery-disk는 액세스할 수 없는 VM의 스냅샷에 있는 부팅 디스크입니다. 다음 단계에서 사용할 수 없는 VM의 NAME를 기록해둡니다.

  7. 이전에 VM에 연결한 각 디스크에 대해 다음을 실행합니다.

    1. 다음 명령어를 실행하여 각 파티션의 파일 시스템을 식별합니다.

      fdisk -l /dev/NAME -o Device,Size,Type
      

      NAME을 이전 단계에서 액세스할 수 없는 VM의 부팅 디스크 이름으로 바꿉니다. 이 예시에서 이름은 sdb입니다.

      출력은 다음과 비슷합니다.

      Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
      Disk model: PersistentDisk
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 4096 bytes
      I/O size (minimum/optimal): 4096 bytes / 4096 bytes
      Disklabel type: gpt
      Disk identifier: B31430F1-F041-4555-96B9-B2F43DC057AD
      
      Device     Size Type
      /dev/sdb1    2M BIOS boot
      /dev/sdb2   20M EFI System
      /dev/sdb3   10G Linux filesystem
      

      Type 열에는 각 파티션의 파일 시스템이 나열됩니다. 파일 시스템 유형이 파티션에 없으면 다음 명령어를 실행합니다.

      file -sL /dev/PARTITION_NAME
      

      NAME을 파티션 이름으로 바꿉니다.

      출력은 파일 시스템 유형에 따라 다릅니다.

      • 파일 시스템 없음: 출력에 data만 표시되면 파티션에 파일 시스템이 없습니다. 출력 예시:

        /dev/sdb1: data
        
      • EFI 파일 시스템: 출력에서 DOS/MBR 부팅 섹터를 설명하는 경우 파티션에 EFI 파일 시스템이 있습니다. 출력 예시:

        dev/sdb2: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "mkfs.fat", sectors/cluster 4, reserved sectors
        4, root entries 512, sectors 40960 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 40, sectors/
        track 32, heads 64, serial number 0xf2af2664, label: "EFI        ", FAT (16 bit)
        
      • Linux 파일 시스템: 출력에서 파일 시스템 데이터를 설명하는 경우 파티션은 Linux 파일 시스템입니다. 출력 예시:

        /dev/sdb3: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
        

      Linux 파일 시스템의 파티션 이름을 기록해 둡니다.

    2. /rescue에 마운트 지점을 만듭니다.

      sudo mkdir /rescue
    3. Linux 파일 시스템 파티션을 /rescue에 마운트합니다.

      sudo mount PARTITION_NAME /rescue
      

      PARTITION_NAME을 이전에 확인한 Linux 파일 시스템 이름으로 바꿉니다.

    4. chroot 명령어를 사용하여 파일 시스템의 루트 디렉터리를 수정하려면 다음 명령어를 실행하여 가상 파일 시스템과 기기를 추가로 마운트해야 합니다.

      sudo mount -t proc /proc /rescue/proc
      sudo mount -t sysfs /sys /rescue/sys
      sudo mount -o bind /dev /rescue/dev
      sudo mount -o bind /dev/pts /rescue/dev/pts
      sudo mount -o bind /run /rescue/run
      

    이제 액세스할 수 없는 부팅 디스크의 파일 시스템이 /rescue에 마운트됩니다. 파일 시스템을 탐색하거나 구성 파일을 변경하거나 문제를 해결하거나 데이터를 검색할 수 있습니다.

변경사항을 되돌리고 액세스할 수 없는 VM 다시 부팅

문제가 해결되거나 데이터를 검색한 후에는 실제 VM을 다시 가져와야 합니다. 다음 단계를 수행하여 원래 VM을 복원합니다.

  1. 임시 VM의 /rescue에 마운트된 추가 디스크를 마운트 해제합니다.

     cd ~
     sudo umount /rescue

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

    VM 인스턴스로 이동

    1. 만든 임시 VM을 선택합니다.

    2. 수정을 클릭합니다.

    3. 추가 디스크에서 이전 단계에서 만든 디스크의 를 클릭하여 임시 VM에서 추가 디스크를 분리합니다.

    4. 저장을 클릭합니다.

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

    VM 인스턴스로 이동

    1. 액세스할 수 없는 VM이 계속 실행 중이면 VM을 중지합니다.

    2. 방금 중지한 VM의 이름을 클릭한 후 수정을 클릭합니다.

    3. 부팅 디스크에서 부팅 디스크 분리를 클릭하여 액세스할 수 없는 VM에서 종료 중인 부팅 디스크를 분리합니다.

    4. 그런 다음 부팅 디스크 구성을 클릭하여 이전에 만들고 이 페이지의 VM 복구에서 수정한 디스크를 연결합니다.

      1. 부팅 디스크 섹션에서 기존 디스크 탭을 클릭합니다.
      2. 이전 섹션에서 만든 디스크를 드롭다운 목록에서 선택합니다(예: my-recovery-disk).
      3. 선택을 클릭한 후 저장을 클릭합니다.
    5. VM을 시작합니다.

  4. 이제 SSH를 사용하여 VM에 연결할 수 있어야 합니다.