Compute Engine에 부팅 디스크 이미지 가져오기

부팅 디스크 이미지를 물리적 데이터 센터에서, 로컬 워크스테이션의 가상 머신에서, 또는 다른 클라우드 플랫폼 기반 가상 머신에서 Compute Engine으로 가져올 때 권장하는 방법은 이번 가이드의 모든 단계를 자동화할 수 있는 가상 디스크 가져오기 도구를 사용하는 것입니다.

자동화 도구를 사용하지 않으려면 이번 가이드에서 수동 방식인 단계별 안내를 따라도 좋습니다.

이미지 가져오기 프로세스는 한 번에 한 디스크만 가져올 수 있으며, 이 가이드에서는 부팅 디스크 이미지를 가져오는 방법을 중점적으로 살펴봅니다.

Compute Engine 공개 이미지를 기반으로 실행되는 애플리케이션을 빌드하거나 이전할 수 없는 경우에만 기존 부팅 디스크를 가져오세요. 공개 이미지는 이미 Compute Engine 환경에서 실행되도록 구성되어 있으므로, 부트로더와 운영체제 구성에 대한 걱정 없이 해당 이미지에서 애플리케이션을 실행할 수 있습니다. 그러나 다음과 같은 경우에는 자체 부팅 디스크 이미지를 가져와야 할 수 있습니다.

  • 애플리케이션에 공개 이미지로 제공되지 않는 운영체제가 필요한 경우
  • 다른 클라우드 플랫폼에서 가상 머신을 만드는 데 사용하는 기본 이미지 세트가 이미 있는 경우
  • 애플리케이션 코드를 공개 이미지 중 하나로 이전하는 데 필요한 작업이 부팅 디스크 이미지 가져오기 프로세스를 완료하는 데 필요한 작업보다 많은 경우

또는 파트너 서비스를 사용하여 가상 머신 이전에 관해 도움을 받을 수 있습니다. 자세한 내용은 VM을 Compute Engine으로 이전을 참조하세요.

개요

부팅 디스크 이미지를 Compute Engine에 가져오려면 다음 프로세스를 따르세요.

  1. 가져오기 경로를 계획합니다. 부팅 디스크 이미지를 업로드하기 전에 어디에서 준비할지, Compute Engine 환경에서 부팅된 후 이미지에 어떻게 연결할지 결정해야 합니다.
  2. Compute Engine 환경에서 부팅될 수 있고, 부팅이 된 후에는 액세스할 수 있도록 부팅 디스크를 준비합니다.
  3. 부팅 디스크 이미지 파일을 만들어서 압축합니다.
  4. 이미지 파일을 Google Cloud Storage에 업로드하고 Compute Engine에 새 커스텀 이미지로 가져옵니다.
  5. 가져온 이미지를 사용하여 가상 머신 인스턴스를 만들고 제대로 부팅되는지 확인합니다.
  6. 이미지가 성공적으로 부팅되지 않을 경우, 부팅 디스크 이미지를 다른 인스턴스에 연결하고 재구성하여 문제를 해결할 수 있습니다.
  7. 이미지를 최적화하고, 가져온 운영체제 이미지가 메타데이터 서버와 통신하고 Compute Engine의 추가 기능을 사용할 수 있도록 Linux 게스트 환경을 설치합니다.

요건

부팅 디스크를 Compute Engine에 가져오려면 기존 부팅 디스크가 다음 요구사항을 충족해야 합니다.

  • 커스텀 운영체제 커널을 빌드한 경우, 해당 커널이 하드웨어 및 커널 구성 요구사항을 충족해야 합니다. 대부분의 일반 Linux 배포판은 이미 이 요구사항을 충족하므로, 이 요구사항은 Compute Engine에서 실행될 커스텀 운영체제를 직접 빌드하는 고급 사용자에게만 해당됩니다.
  • 부팅 디스크가 2,048GB(2TB)보다 크면 안 됩니다.
  • 가져오는 부팅 디스크에 제대로 작동하는 MBR 파티션 테이블이 있거나 GPT 파티션 테이블과 MBR 부트로더의 혼합 구성이 있어야 합니다.
  • 부팅 디스크의 주 파티션은 MBR 부트로더에서 제대로 부팅만 된다면 어떤 형식이든 무방합니다.
  • 부팅 디스크의 부트로더에 quiet, rhgb, splashimage= 커널 명령줄 인수가 없어야 합니다. Compute Engine은 부팅 시 스플래시 화면을 지원하지 않습니다. 부트로더 구성 단계에서 이러한 값을 GRUB 구성에서 삭제할 수 있습니다.

가져오는 이미지 파일은 다음 요구사항을 충족해야 합니다.

  • 디스크 이미지 파일 이름이 disk.raw여야 합니다.
  • RAW 이미지 파일의 크기가 1GB 단위여야 합니다. 예를 들어, 10GB나 11GB인 파일은 허용되지만 10.5GB는 안 됩니다.
  • 압축 파일은 gzip 압축tar 유틸리티의 oldgnu 형식 옵션을 사용하는 .tar.gz 파일이어야 합니다.

원하는 모든 운영체제의 부팅 디스크 이미지를 가져올 수 있지만 다른 시스템보다 Compute Engine 환경에 맞게 구성하기 더 쉬운 시스템이 있습니다. 다음 운영체제는 이 가이드에 대한 테스트를 거쳤습니다.

  • Debian 7 및 Debian 8
  • RHEL/CentOS 6
  • openSUSE 13.x
  • Ubuntu 12.04, 14.04, 16.04

다음 운영체제의 경우 이 가이드에서 다루지 않는 추가 구성 단계가 필요할 수 있습니다.

  • Debian 6 이하
  • RHEL/CentOS 7
  • RHEL/CentOS 5 이하
  • Ubuntu 10.04 이하

이미지 가져오기 비용

시작하기 전에 가져오기 프로세스에 드는 비용을 파악하세요. 네트워크 수신을 통해 부팅 디스크 이미지 파일을 Google Cloud Storage에 업로드할 때와 해당 이미지를 Compute Engine 커스텀 이미지로 가져올 때는 비용이 발생하지 않습니다. 그러나 가져오기 프로세스의 일부 특정 단계에서 비용이 발생합니다.

  • 압축된 이미지 파일을 Google Cloud Storage 기본 버킷에 임시로 저장하는 데 드는 비용. 커스텀 Compute Engine 이미지로 가져오기 전에 임시 Google Cloud Storage 버킷을 사용하여 파일을 보관해야 합니다. 가져오기 프로세스를 완료한 후에 해당 버킷을 삭제할 수 있습니다.
  • Compute Engine으로 가져오기를 완료한 후 커스텀 이미지를 저장하는 데 드는 비용.
  • 기존 데이터 센터, 네트워크 제공업체, 현재 클라우드 서비스에서 데이터 송신을 위한 잠재적 비용. 이미지 파일은 압축한 후에도 크기가 매우 클 수 있으므로 이러한 파일을 Compute Engine에 복사할 경우 일부 플랫폼에서 송신 비용이 많이 발생할 수 있습니다.
  • Compute Engine 영구 디스크의 비용과 이미지를 Compute Engine에 가져온 후 이미지를 구성할 수 있는 가상 머신 인스턴스의 비용.

가져오기 경로의 계획 및 준비

디스크를 가져오는 방법은 Compute Engine으로 옮기려는 시스템의 현재 구성에 따라 다릅니다. 부팅 디스크 이미지 파일을 만들어서 압축할 수 있는 시스템과 이미지 파일을 Google Cloud Storage에 업로드할 수 있는 시스템이 필요합니다. 가져오기 경로를 계획할 때 다음 사항을 고려하세요.

  • 이미지 가져오기 경로를 계획할 때는 올바르게 작동하는 운영체제 환경에서 부팅 디스크를 구성해야 합니다. 이 프로세스를 수행하면 Compute Engine 이외의 환경에서는 부팅 디스크가 부팅되지 않을 수 있습니다. 시스템을 Compute Engine으로 가져올 때 디스크의 데이터 손실을 막거나, 비즈니스 애플리케이션의 기능이 중단되는 것을 막는 것은 사용자의 책임입니다.
  • 현재 시스템의 액세스 구성을 확인하고, 시스템을 Compute Engine으로 가져온 후에 시스템에 어떤 방식으로 액세스할 것인지 계획합니다.
    • 시스템에 기존 사용자 로그인 또는 SSH 구성이 있는 경우, 부트로더만 구성한 후 나중에 이미지가 Compute Engine에서 최적으로 실행되도록 구성할 수 있습니다. 기존 SSH 구성을 통해 인스턴스에 액세스하거나 양방향 직렬 콘솔에서 직접 사용자 로그인을 통해 인스턴스에 액세스할 수 있습니다.
    • 시스템에 기존 사용자 로그인 또는 SSH 구성이 없다면 Compute Engine에서 부팅된 후에 액세스할 수 있도록 부팅 디스크를 구성해야 합니다.
  • 가져오기 프로세스는 부팅 디스크의 크기와 네트워크 연결 속도에 따라 몇 시간 또는 며칠이 소요될 수 있습니다.
  • 부팅 디스크 이미지를 만들고 압축하는 시스템에는 부팅 디스크 이외에 저장 기기에 이미지 파일을 만들 수 있는 충분한 저장 공간이 있어야 합니다. 일반적으로 이미지와 tar.gz 파일은 부팅 디스크의 2~3배에 달하는 공간을 사용합니다.
  • 가져오려는 기존 시스템의 파일 시스템 구조를 파악합니다.
    • 운영체제와 애플리케이션 파일이 여러 디스크에 분산되어 있는 경우, 각 디스크를 개별적으로 가져오고 각 이미지를 사용하여 Compute Engine 가상 머신 인스턴스에 고유한 영구 디스크를 만듭니다.
    • 시스템의 부팅 볼륨이 여러 디스크가 하나의 논리 볼륨으로 작동하는 RAID 구성으로 되어 있다면, 배열의 각 디스크에 하나의 이미지를 만들기보다는 전체 배열에서 하나의 이미지를 만드는 것이 좋습니다. Compute Engine 영구 디스크를 사용하면 RAID 구성이 필요하지 않습니다.
  • 시스템이 신뢰할 수 있는 플랫폼 모듈 또는 소프트웨어 수준 암호화를 통해 부팅 디스크의 콘텐츠를 암호화한다면, 부팅 디스크 이미지 파일을 만들기 전에 부팅 디스크를 복호화합니다. Google은 암호화된 이미지를 읽을 수 없습니다. 이미지는 업로드된 후에 암호화되며, 사용자는 영구 디스크Cloud Storage 버킷에 고유한 암호화 키를 지정할 수 있습니다.

가져오기 프로세스를 완료할 수 있는 시스템을 식별하거나 만든 후, 해당 시스템에 연결하고 부트로더를 구성합니다.

부팅 디스크 이미지 준비

실행 중인 시스템에서 부팅 디스크 이미지를 준비하여 Compute Engine 환경에서 사용할 수 있도록 합니다.

  • 이미지가 Compute Engine에서 부팅될 수 있도록 부팅 디스크의 부트로더를 구성합니다.
  • Compute Engine으로 가져온 후에 액세스하여 가상 머신 인스턴스로 시작할 수 있도록 부팅 디스크의 SSH 또는 사용자 로그인 액세스를 구성합니다.

이 프로세스로 인해 Compute Engine 외부에서 시스템을 부팅할 수 없게 될 수 있으므로, 가져오려는 부팅 디스크의 사본을 이용하여 격리된 시스템에서 이 단계를 완료하는 것을 권장합니다.

부트로더 구성

Compute Engine에서 부팅될 수 있도록 시스템의 부트로더를 구성합니다.

  1. 가져오려는 부팅 디스크가 있는 시스템의 터미널에 연결합니다.

  2. GRUB 구성 파일을 수정합니다. 일반적으로 이 파일은 /etc/default/grub에 있으나 일부 오래된 배포판의 경우 비표준 디렉토리에 위치할 수도 있습니다.

  3. GRUB 구성 파일을 다음과 같이 변경합니다.

    • splashimage=가 있는 모든 줄을 삭제합니다. Compute Engine은 부팅 시 스플래시 화면을 지원하지 않습니다.
    • rhgbquiet 커널 명령줄 인수를 삭제합니다.
    • 인스턴스가 양방향 직렬 콘솔과 작동할 수 있도록 커널 명령줄 인수에 console=ttyS0,38400n8d를 추가합니다.
  4. grub.cfg 파일을 다시 생성합니다. 배포판에 따라 다음 명령어 중 하나를 사용합니다.

    • Debian 및 Ubuntu: sudo update-grub
    • RHEL, CentOS, SUSE, openSUSE: sudo grub-mkconfig -o /boot/grub/grub.cfg
  5. /etc/fstab 파일을 수정하고 부팅 디스크 자체와 부팅 디스크의 파티션을 제외한 모든 디스크와 파티션에 대한 참조를 삭제합니다. /etc/fstab에 잘못된 항목이 있으면 시스템 시작 프로세스가 멈출 수 있습니다.

부트로더를 구성한 후 디스크 이미지 파일을 만들고 압축합니다.

이미지에 SSH 또는 사용자 로그인 액세스 구성

이미지가 Compute Engine에서 가상 머신 인스턴스로 실행되면 해당 인스턴스에 액세스하는 방법이 있어야 합니다. 기존 SSH 구성을 사용하여 인스턴스에 연결하거나 양방향 직렬 콘솔에 연결하여 사용자 이름과 비밀번호를 사용하여 로그인할 수 있습니다.

디스크 이미지 파일을 만들고 압축하기 전에 SSH 또는 사용자 로그인 구성을 완료합니다.

디스크 이미지 파일을 만들고 압축하기

Compute Engine에 가져오려는 시스템의 부팅 디스크 이미지 파일을 만들어서 압축합니다. 이미지 파일을 만들고 압축하는 프로세스는 시스템이 작동하는 플랫폼에 따라 다릅니다.

일반

거의 모든 시스템에서, 이 프로세스를 이용하여 Compute Engine에 가져올 수 있는 RAW 이미지 파일을 만들 수 있습니다. 가져오려는 실행 중인 시스템에서 이 프로세스를 완료하거나, 부팅 디스크를 다른 시스템의 보조 디스크로 연결하여 정지된 디스크에서 부팅 디스크 이미지를 만들 수도 있습니다. 디스크 이미지 파일을 임시로 저장할 충분한 공간이 있는지 확인하세요. 이 예에서는 실행 중인 시스템에서 이미지를 가져옵니다.

  1. 가져오려는 부팅 디스크가 있는 시스템의 터미널에 연결합니다.

  2. lsblk 명령어를 사용하여, 이미지를 만들 때 사용할 소스 부팅 디스크와 이미지 파일을 작성하기에 충분한 공간이 있는 위치를 확인합니다. 이 예에서는 /dev/sda가 소스 부팅 디스크이고 /dev/sdb/tmp 디렉토리에 마운트된 대용량 보조 디스크입니다. /dev/sda가 실행 중이지만 여기서 이미지 파일을 만들 수 있습니다. 데이터를 능동적으로 처리하거나 애플리케이션을 실행하고 있지 않은 조용한 시스템에서 이 작업을 수행하는 것이 가장 좋습니다.

    $ lsblk
    
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0  100G  0 disk
    ├─sda1   8:1    0   96G  0 part /
    ├─sda2   8:2    0    1K  0 part
    └─sda3   8:5    0    4G  0 part [SWAP]
    sdb      8:16   0  500G  0 disk /tmp
    sr0     11:0    1 1024M  0 rom
    
  3. 부팅 디스크에서 이미지 파일을 만듭니다.

    $ sudo dd if=/dev/sda of=/tmp/disk.raw bs=4M conv=sparse
    
  4. disk.raw 파일을 쓴 디렉토리로 변경합니다.

    $ cd /tmp
    
  5. 원시 디스크를 tar.gz 형식으로 압축합니다. 이 단계에서는 이미지 파일을 Google Cloud Storage에 더 빨리 업로드할 수 있도록 압축합니다. OSX에서 gtar을 설치하고 이 단계에서 tar 대신 사용합니다.

    $ sudo tar -Sczf /tmp/compressed-image.tar.gz disk.raw
    

AWS EC2

Amazon EC2 인스턴스를 가져올 경우, AMI 도구를 사용하여 Amazon EBS 볼륨을 묶습니다.

  1. 계정 설정 콘솔에서 Amazon 계정 ID를 찾아서 기록합니다.

  2. Amazon EC2 인스턴스에서 EC2 AMI 도구를 다운로드하여 설치합니다.

  3. 다음 인수를 사용하여 ec2-bundle-vol을 루트로 실행하되, cert-<hash>.pem을 인증서 파일로, pk-<hash>.pem을 비공개 키로, AWS_ACCOUNT_ID를 Amazon 계정 ID로 바꿉니다. 이 명령어는 image 파일을 생성합니다.

    ec2-bundle-vol -c /tmp/build/cert-<hash>.pem \
        -k /tmp/build/pk-<hash>.pem -u AWS_ACCOUNT_ID \
        -r x86_64 --no-filter --exclude /tmp/build \
        --grub-config /tmp/build/menu.lst \
        --fstab /tmp/build/fstab
    
  4. 원시 디스크를 tar.gz 형식으로 압축합니다. 이 단계에서는 이미지 파일을 Google Cloud Storage에 더 빨리 업로드할 수 있도록 압축합니다. OSX에서 gtar을 설치하고 이 단계에서 tar 대신 사용합니다.

    $ sudo tar -Sczf /tmp/compressed-image.tar.gz disk.raw
    

Virtual Box

VirtualBox 환경에서 시스템을 준비한 경우, VBoxManage 도구를 사용하여 .vdi 또는 .qcow2 디스크 이미지를 disk.raw 형식으로 변환할 수 있습니다.

  1. 가져오려는 VirtualBox 게스트 머신을 종료합니다. VirtualBox 인터페이스 또는 VBoxManage 유틸리티로 게스트 머신을 종료할 수 있습니다.

    VBoxManage controlvm [GUEST_NAME] acpipowerbutton
    

    여기서, [GUEST_NAME]은 게스트 머신의 이름입니다.

  2. VBoxManage 유틸리티를 사용하여 게스트 이미지를 RAW 형식으로 변환합니다.

    VBoxManage clonemedium [GUEST_IMAGE] \
        ~/disk.raw --format RAW
    

    여기서, [GUEST_IMAGE]는 게스트 이미지 .vdi 또는 .qcow2 파일의 경로입니다.

  3. 원시 디스크를 tar.gz 형식으로 압축합니다. 이 단계에서는 이미지 파일을 Google Cloud Storage에 더 빨리 업로드할 수 있도록 압축합니다. OSX에서 gtar을 설치하고 이 단계에서 tar 대신 사용합니다.

    $ sudo tar --format=oldgnu -Sczf /tmp/compressed-image.tar.gz disk.raw
    

이미지 파일이 압축되어 Google Cloud Storage에 업로드할 준비가 되었습니다.

이미지를 커스텀 이미지 목록으로 가져오기

파일을 Google Cloud Storage에 업로드하고 이미지를 커스텀 이미지 목록으로 가져옵니다. 필요 시, 이미지 가져오기 단계를 수행하면서 이미지를 암호화할 수 있습니다.

콘솔 또는 Cloud SDK 도구로 이미지를 가져옵니다.

콘솔

compressed-image.tar.gz 파일을 로컬 워크스테이션에 복사하고 GCP Console을 사용하여 버킷을 만들고 파일을 업로드합니다.

  1. GCP Console에서 Cloud Storage 브라우저 페이지로 이동합니다.

    브라우저 페이지로 이동

  2. 페이지 상단에서 버킷 만들기를 클릭합니다.
  3. 고유한 버킷 이름, 표준 저장소 등급, 이미지 파일을 저장하려는 위치를 지정합니다.
  4. 만들기를 클릭하여 버킷을 만듭니다. 브라우저 페이지가 새 버킷으로 이동합니다.
  5. 페이지 상단에서 파일 업로드를 클릭합니다.
  6. 파일 대화상자에서, 시스템에서 다운로드한 compressed-image.tar.gz 파일을 선택합니다. 로컬 워크스테이션에서 파일이 업로드됩니다. 이 단계는 압축한 이미지 파일의 크기와 네트워크 연결 속도에 따라 몇 시간이 소요될 수 있습니다.

Google Cloud Storage에 이미지를 업로드한 후, 이미지 파일을 커스텀 이미지 목록으로 가져옵니다.

  1. GCP Console에서 이미지 페이지로 이동합니다.

    이미지 페이지로 이동

  2. 페이지 상단에서 이미지 만들기를 클릭합니다.
  3. 이름 필드에서 이미지의 고유한 이름을 지정합니다.
  4. 필요 시, 새 이미지의 이미지 계열을 지정하거나 이미지에 특정한 암호화 설정을 구성합니다.
  5. 소스 메뉴에서 Cloud Storage 파일을 선택합니다.
  6. Cloud Storage에 업로드한 compressed-image.tar.gz 파일의 경로를 입력합니다.

    [BUCKET_NAME]/compressed-image.tar.gz
    
  7. 만들기 버튼을 클릭하여 이미지를 가져옵니다. 이 프로세스는 부팅 디스크 이미지의 크기에 따라 몇 분이 소요될 수 있습니다.

이제 이미지가 이미지 페이지에 포함되었지만, 이 이미지를 사용하여 제대로 작동하는 가상 머신 인스턴스를 만들려면 먼저 부트로더를 구성해야 합니다.

gcloud 및 gsutil

gsutil 도구와 gcloud 도구를 사용하여 압축된 부팅 디스크 이미지 파일을 업로드합니다. 부팅 디스크 이미지를 만든 시스템에서 이 프로세스를 완료해도 되고, 해당 파일을 다른 시스템에 복사하여 업로드 프로세스를 완료해도 됩니다.

  1. compressed-image.tar.gz를 업로드하려는 시스템에 Cloud SDK를 설치하고 초기화합니다.

  2. gsutil 도구를 사용하여 새 Cloud Storage 버킷을 만듭니다.

     $ gsutil mb gs://[BUCKET_NAME]
     

  3. compressed-image.tar.gz 파일을 새 버킷에 업로드합니다.

     $ gsutil cp compressed-image.tar.gz gs://[BUCKET_NAME]
     

  4. 이미지 파일을 새 커스텀 이미지로 가져옵니다.

     $ gcloud compute images create [IMAGE_NAME] --source-uri gs://[BUCKET_NAME]/compressed-image.tar.gz
     

이제 이미지가 커스텀 이미지 목록에 포함되었지만, 이 이미지를 사용하여 제대로 작동하는 가상 머신 인스턴스를 만들려면 먼저 부트로더를 구성해야 합니다.

  $ gcloud compute images list --no-standard-images
  
  NAME                                            PROJECT                  FAMILY                    DEPRECATED  STATUS
  [IMAGE_NAME]                                    [PROJECT_ID]                                                   READY
  

가져온 이미지가 작동하는지 테스트

가져온 이미지가 올바르게 작동하는지 확인합니다. 가져온 이미지를 사용하는 부팅 디스크로 인스턴스를 만듭니다.

콘솔

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

    인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭합니다.
  3. 부팅 디스크 섹션에서 변경을 클릭하여 부팅 디스크 구성을 시작합니다.
  4. 커스텀 이미지 탭에서 가져온 이미지를 클릭합니다.
  5. 선택을 클릭하여 부팅 디스크 구성을 확인합니다.
  6. 만들기 버튼을 클릭하여 인스턴스를 만듭니다.

gcloud

gcloud compute instances create [INSTANCE_NAME] --zone [ZONE] --image [IMAGE_NAME]

각 항목의 의미는 다음과 같습니다.

  • [INSTANCE_NAME]은 인스턴스의 고유한 이름입니다.
  • [ZONE]은 독립형 디스크를 만든 영역입니다.
  • [IMAGE_NAME]은 가져온 이미지의 이름입니다.

인스턴스를 만든 후, 제대로 부팅되었는지 확인합니다. 직렬 포트 출력을 확인합니다.

콘솔

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

    인스턴스 페이지로 이동

  2. 인스턴스 목록에서 가져온 이미지로 만든 인스턴스의 이름을 클릭합니다. 인스턴스 세부정보 페이지가 열립니다.
  3. 인스턴스 세부정보 페이지의 하단에서 직렬 포트 보기를 클릭하여 이 인스턴스의 직렬 포트 출력을 확인합니다.

인스턴스가 Booting from Hard Disk 0...에서 멈춘 경우, Compute Engine 환경 내에서 해당 문제를 해결하거나 원래 시스템의 부팅 디스크를 다시 구성하고 가져오기 프로세스를 반복할 수 있습니다.

gcloud

gcloud compute instances get-serial-port-output [INSTANCE_NAME]

인스턴스가 Booting from Hard Disk 0...에서 멈춘 경우, Compute Engine 환경 내에서 해당 문제를 해결하거나 원래 시스템의 부팅 디스크를 다시 구성하고 가져오기 프로세스를 반복할 수 있습니다.

인스턴스에 연결하여 인스턴스를 테스트할 수도 있습니다. 다음 옵션 중 하나를 이용하여 인스턴스에 연결합니다.

  • SSH: 인스턴스의 SSH 구성이 제대로 작동할 경우, SSH와 비공개 키를 사용하여 인스턴스에 연결할 수 있습니다. 인스턴스 페이지에서 인스턴스 IP 주소를 찾을 수 있습니다.
  • 양방향 직렬 콘솔: SSH 없이 직접 인스턴스에 로그인해야 할 경우, 양방향 직렬 콘솔을 사용 설정하여 사용자 이름과 비밀번호로 로그인할 수 있습니다.

부팅 디스크 문제 해결

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

  • 직렬 콘솔 출력을 참조하여 부팅 프로세스가 실패한 위치를 확인합니다.
  • 인스턴스가 프롬프트에서 정체되는 경우 양방향 직렬 콘솔에 연결하여 인스턴스가 부팅 프로세스를 완료하도록 할 수 있습니다.

부팅 및 시작 프로세스가 어디서 실패하는지 확인한 후, 다음 두 가지 옵션 중 하나를 이용하여 문제를 해결할 수 있습니다.

Compute Engine 내에서 부팅 디스크 문제 해결

가져온 이미지를 임시 가상 머신 인스턴스에 연결된 보조 디스크에 마운트합니다. GCP Console 또는 gcloud 도구를 사용하여, 업로드한 이미지에서 독립형 디스크를 만들고, 연결한 독립형 디스크로 임시 가상 머신을 만듭니다. 이 인스턴스를 사용하여 독립형 디스크의 파일을 수정하고, 해당 이미지가 부팅 프로세스에 실패하는 문제를 해결할 수 있습니다.

콘솔

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

  1. GCP 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. 만들기 버튼을 클릭하여 디스크를 만듭니다.

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

  1. Cloud Platform 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]은 가져온 부팅 디스크 이미지의 이름입니다.

독립형 디스크를 연결할 수 있는 임시 인스턴스를 만들고 GCP 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
    

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

콘솔

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

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

    인스턴스 페이지로 이동

  2. 인스턴스 목록에서 독립형 부팅 디스크를 수정한 임시 인스턴스의 이름을 클릭합니다. 인스턴스 세부정보 페이지가 열립니다.
  3. 인스턴스 세부정보 페이지의 상단에서 수정을 클릭합니다.
  4. 추가 디스크 섹션에서 독립형 디스크 옆에 있는 X를 클릭하여 해당 독립형 디스크를 임시 인스턴스에서 분리하려 한다는 것을 표시합니다.
  5. 인스턴스 세부정보 페이지의 하단에서 저장을 클릭하여 변경사항을 저장합니다.

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

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

    인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭합니다.
  3. 새 인스턴스 만들기 페이지에서 인스턴스 이름과 인스턴스가 위치할 영역을 지정합니다. 이 영역은 독립형 디스크를 만든 영역과 같아야 합니다.
  4. 부팅 디스크 섹션에서 변경을 클릭하여 부팅 디스크 구성을 시작합니다.
  5. 기존 디스크 탭에서 독립형 부팅 디스크를 선택하여 새 인스턴스의 부팅 디스크로 사용합니다.
  6. 만들기 버튼을 클릭하여 인스턴스를 만듭니다.

gcloud

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

gcloud compute instances detach-disk [INSTANCE_NAME] --disk [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]은 가져온 부팅 디스크 이미지에서 만든 독립형 디스크의 이름입니다.

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

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서