어떤 이유로든 Linux VM에 액세스할 수 없으면 다음 단계를 수행하여 VM을 복구할 수 있습니다.
필요한 역할
VM을 복구하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
Compute 인스턴스 관리자(v1)(
roles/compute.instanceAdmin.v1
) -
서비스 계정을 사용하는 VM:
서비스 계정 사용자(
roles/iam.serviceAccountUser
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
이러한 사전 정의된 역할에는 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을 복구해야 합니다.
- (선택사항) 액세스할 수 없는 VM을 중지합니다.
- 액세스할 수 없는 VM의 부팅 디스크에서 스냅샷을 만듭니다. 루트 파일 시스템이 여러 디스크에 분할된 경우 각 디스크의 스냅샷을 만들어야 합니다.
- 액세스할 수 없는 VM의 OS에 가장 가까운 공개 이미지를 사용하여 임시 VM을 만듭니다. 신뢰할 수 있는 이미지 정책에 따라 공개 이미지에서 부팅 디스크를 만들 수 없는 경우도 있습니다. 이 경우 복구 VM을 만들기 전에 관리자에게 이 제한을 일시적으로 해제해 달라고 요청해야 합니다. 자세한 내용은 이미지 액세스 제약조건 설정을 참고하세요.
이전에 만든 액세스할 수 없는 VM의 부팅 디스크 스냅샷별로 다음을 실행하여 스냅샷에서 새 디스크를 만들고 복구 VM에 연결합니다.
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
만든 임시 VM의 이름을 클릭합니다.
수정을 클릭합니다.
추가 디스크에서
새 디스크 추가를 클릭한 후 다음을 수행합니다.- 디스크 이름을 추가합니다(예: my-recovery-disk).
- 소스 유형에서 스냅샷 탭을 선택합니다.
- 소스 스냅샷 드롭다운 메뉴에서 이 단계에서 이전에 만든 소스 VM의 스냅샷을 선택합니다.
- 완료를 클릭합니다.
저장을 클릭합니다.
SSH를 사용하여 임시 VM에 연결합니다.
다음 명령어를 실행하여 이전에 VM에 연결한 각 디스크의 이름을 확인합니다.
lsblk -d -o NAME,SERIAL
출력은 다음과 비슷합니다.
NAME SERIAL sda rescue-vm sdb my-recovery-disk
이 예에서
rescue-vm
는 복구 VM의 부팅 디스크이고my-recovery-disk
는 액세스할 수 없는 VM의 스냅샷에 있는 부팅 디스크입니다. 다음 단계에서 사용할 수 없는 VM의NAME
를 기록해둡니다.이전에 VM에 연결한 각 디스크에 대해 다음을 실행합니다.
다음 명령어를 실행하여 각 파티션의 파일 시스템을 식별합니다.
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 파일 시스템의 파티션 이름을 기록해 둡니다.
/rescue
에 마운트 지점을 만듭니다.sudo mkdir /rescue
Linux 파일 시스템 파티션을
/rescue
에 마운트합니다.sudo mount PARTITION_NAME /rescue
PARTITION_NAME을 이전에 확인한 Linux 파일 시스템 이름으로 바꿉니다.
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을 복원합니다.
임시 VM의
/rescue
에 마운트된 추가 디스크를 마운트 해제합니다.cd ~ sudo umount /rescue
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
만든 임시 VM을 선택합니다.
수정을 클릭합니다.
추가 디스크에서 이전 단계에서 만든 디스크의
를 클릭하여 임시 VM에서 추가 디스크를 분리합니다.저장을 클릭합니다.
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
이제 SSH를 사용하여 VM에 연결할 수 있어야 합니다.