게스트 환경 설치

이 페이지에서는 가상 머신(VM) 인스턴스에 게스트 환경을 수동으로 설치하는 방법을 설명합니다. 게스트 환경은 인스턴스가 Compute Engine에서 실행되는 데 필요한 스크립트, 데몬, 바이너리 모음입니다. 자세한 내용은 게스트 환경을 참조하세요.

대개 Google에서 제공하는 공개 OS 이미지를 사용하면 게스트 환경이 자동으로 포함됩니다. 게스트 환경이 자동으로 포함되는 OS 이미지의 전체 목록은 운영체제 세부정보를 참조하세요.

게스트 환경이 설치되지 않았거나 오래된 경우 설치하거나 업데이트합니다. 이러한 시나리오를 확인하려면 게스트 환경을 설치 또는 업데이트해야 하는 경우를 참조하세요.

시작하기 전에

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인합니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음 옵션 중 하나를 선택하여 Compute Engine에 인증하면 됩니다.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Google Cloud CLI를 설치합니다. 설치 후 다음 명령어를 실행하여 Google Cloud CLI를 초기화합니다.

      gcloud init

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

    2. Set a default region and zone.

게스트 환경을 설치 또는 업데이트해야 하는 경우

대부분의 경우 게스트 환경을 수동으로 설치하거나 업데이트할 필요가 없습니다. 수동으로 설치하거나 업데이트해야 하는 경우를 알아보려면 다음 섹션을 검토하세요.

설치 요구사항 확인

게스트 환경을 설치하기 전에 게스트 환경 검증 절차를 통해 인스턴스에서 게스트 환경이 실행되는지 확인합니다. 인스턴스에서 게스트 환경을 사용할 수 있지만 오래된 경우 게스트 환경을 업데이트합니다.

다음과 같은 상황에서는 게스트 환경을 설치해야 할 수 있습니다.

  • 필요한 Google 제공 OS 이미지에 게스트 환경이 설치되어 있지 않습니다.

  • 커스텀 이미지 또는 가상 디스크를 Compute Engine으로 가져오고 게스트 환경을 자동으로 설치하지 않도록 선택했습니다.

    가상 디스크 또는 커스텀 이미지를 가져올 때 Compute Engine에서 게스트 환경을 설치하게 할 수 있습니다. 그러나 가져오는 과정에서 게스트 환경을 설치하지 않도록 선택한 경우 게스트 환경을 수동으로 설치해야 합니다.

  • Migrate to Virtual Machines를 사용하여 VM을 Compute Engine으로 마이그레이션합니다.

게스트 환경을 설치하려면 설치 방법을 참조하세요.

업데이트 요구사항 확인

다음과 같은 상황에서는 게스트 환경을 업데이트해야 할 수 있습니다.

게스트 환경을 업데이트하려면 게스트 환경 업데이트를 참조하세요.

설치 방법

게스트 환경은 여러 방법으로 설치할 수 있습니다. 다음 옵션 중 하나를 선택합니다.

지원되는 운영체제

정식 버전(GA) 수명 주기 또는 확장 수명 주기 지원 단계에 있는 OS 이미지 버전을 사용하는 VM에 게스트 환경을 설치하거나 업데이트할 수 있습니다.

Compute Engine에서 OS 이미지 버전 및 수명 주기 단계 목록을 검토하려면 운영체제 세부정보를 참조하세요.

제한사항

가져오기 도구를 수동으로 설치하거나 사용하여 Fedora CoreOS 및 Container-Optimized(COS) 운영체제의 게스트 환경을 설치할 수 없습니다. COS의 경우 게스트 환경이 핵심 구성요소로 포함된 Google 제공 공개 이미지를 사용하는 것이 좋습니다.

게스트 환경 설치

게스트 환경을 수동으로 설치하려면 인스턴스에 연결할 수 있는지 여부에 따라 다음 방법 중 하나를 선택하세요.

현재 위치에 게스트 환경 설치

SSH를 통해 대상 인스턴스에 연결할 수 있는 경우에는 이 방법을 사용하여 게스트 환경을 설치합니다. 게스트 환경을 설치할 인스턴스에 연결할 수 없는 경우에는 부팅 디스크를 클론하고 시작 스크립트를 사용하여 게스트 환경을 설치합니다.

SSH 암호 기반 인증을 사용하여 연결할 수 있는 경우 가져온 이미지에 이 절차가 유용합니다. 함수 키 기반 SSH를 사용하는 사용자 계정이 하나 이상 있는 경우에도 이 방법을 사용하여 게스트 환경을 다시 설치할 수 있습니다.

CentOS/RHEL/Rocky

  1. 사용 중인 운영체제 버전이 지원되는지 확인합니다.
  2. CentOS/RHEL/Rocky Linux 버전을 확인합니다. 그런 다음 소스 저장소 파일 /etc/yum.repos.d/google-cloud.repo를 만듭니다.

    eval $(grep VERSION_ID /etc/os-release)
    sudo tee /etc/yum.repos.d/google-cloud.repo << EOM
    [google-compute-engine]
    name=Google Compute Engine
    baseurl=https://packages.cloud.google.com/yum/repos/google-compute-engine-el${VERSION_ID/.*}-x86_64-stable
    enabled=1
    gpgcheck=1
    repo_gpgcheck=0
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
          https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOM
    
  3. 패키지 목록을 업데이트합니다.

    sudo yum makecache
    sudo yum updateinfo
    
  4. 게스트 환경 패키지를 설치합니다.

    sudo yum install -y google-compute-engine google-osconfig-agent
    
  5. 인스턴스를 다시 시작합니다. 그런 다음 콘솔 로그를 검사하여 백업을 시작할 때 게스트 환경이 로드되는지 확인합니다.

  6. SSH를 사용해 인스턴스에 연결하여 확인합니다. 자세한 내용은 SSH를 사용하여 인스턴스에 연결을 참조하세요.

Debian

Debian 버전에 해당하는 단계를 완료합니다.

Debian 13 이상

  1. 사용 중인 운영체제 버전이 지원되는지 확인합니다.
  2. 공개 저장소 GPG 키를 /etc/apt/keyrings에 설치합니다.

    sudo curl https://packages.cloud.google.com/apt/doc/apt-key.gpg -o /etc/apt/keyrings/google-keyring.gpg
    
  3. Debian 배포판의 이름을 확인합니다. 그런 다음 소스 목록 파일 /etc/apt/sources.list.d/google-cloud.list를 만듭니다.

    eval $(grep VERSION_CODENAME /etc/os-release)
    sudo tee /etc/apt/sources.list.d/google-cloud.list << EOM
    deb [signed-by=/etc/apt/keyrings/google-keyring.gpg] http://packages.cloud.google.com/apt google-compute-engine-${VERSION_CODENAME}-stable main
    EOM
    
  4. 패키지 목록을 업데이트합니다.

    sudo apt update
    
  5. 게스트 환경 패키지를 설치합니다.

    sudo apt install -y gce-configs-trixie
    sudo apt install -y google-compute-engine google-osconfig-agent
    
  6. 인스턴스를 다시 시작합니다. 그런 다음 콘솔 로그를 검사하여 백업을 시작할 때 게스트 환경이 로드되는지 확인합니다.

  7. SSH를 사용해 인스턴스에 연결하여 확인합니다. 자세한 내용은 SSH를 사용하여 인스턴스에 연결을 참조하세요.

Debian 12 이하

  1. 사용 중인 운영체제 버전이 지원되는지 확인합니다.
  2. 공개 저장소 GPG 키를 설치합니다.

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    
  3. Debian 배포판의 이름을 확인합니다. 그런 다음 소스 목록 파일 /etc/apt/sources.list.d/google-cloud.list를 만듭니다.

    eval $(grep VERSION_CODENAME /etc/os-release)
    sudo tee /etc/apt/sources.list.d/google-cloud.list << EOM
    deb http://packages.cloud.google.com/apt google-compute-engine-${VERSION_CODENAME}-stable main
    deb http://packages.cloud.google.com/apt google-cloud-packages-archive-keyring-${VERSION_CODENAME} main
    EOM
    
  4. 패키지 목록을 업데이트합니다.

    sudo apt update
    
  5. 게스트 환경 패키지를 설치합니다.

    sudo apt install -y google-cloud-packages-archive-keyring
    sudo apt install -y google-compute-engine google-osconfig-agent
    
  6. 인스턴스를 다시 시작합니다. 그런 다음 콘솔 로그를 검사하여 백업을 시작할 때 게스트 환경이 로드되는지 확인합니다.

  7. SSH를 사용해 인스턴스에 연결하여 확인합니다. 자세한 내용은 SSH를 사용하여 인스턴스에 연결을 참조하세요.

Ubuntu

  1. 사용 중인 운영체제 버전이 지원되는지 확인합니다.

  2. Universe 저장소를 사용 설정합니다. Canonical은 게스트 환경용 패키지를 Universe 저장소에 게시합니다.

    sudo apt-add-repository universe
  3. 패키지 목록을 업데이트합니다.

    sudo apt update
  4. 게스트 환경 패키지를 설치합니다.

    sudo apt install -y google-compute-engine google-osconfig-agent
    
  5. 인스턴스를 다시 시작합니다. 그런 다음 콘솔 로그를 검사하여 백업을 시작할 때 게스트 환경이 로드되는지 확인합니다.

  6. SSH를 사용해 인스턴스에 연결하여 확인합니다. 자세한 내용은 SSH를 사용하여 인스턴스에 연결을 참조하세요.

SLES

  1. 사용 중인 운영체제 버전이 지원되는지 확인합니다.

  2. 퍼블릭 클라우드 모듈을 활성화합니다.

    product=$(sudo SUSEConnect --list-extensions | grep -o "sle-module-public-cloud.*")
    [[ -n "$product" ]] && sudo SUSEConnect -p "$product"
    
  3. 패키지 목록을 업데이트합니다.

    sudo zypper refresh
  4. 게스트 환경 패키지를 설치합니다.

    sudo zypper install -y google-guest-{agent,configs,oslogin} \
    google-osconfig-agent
    sudo systemctl enable /usr/lib/systemd/system/google-*
    
  5. 인스턴스를 다시 시작합니다. 그런 다음 콘솔 로그를 검사하여 백업을 시작할 때 게스트 환경이 로드되는지 확인합니다.

  6. SSH를 사용해 인스턴스에 연결하여 확인합니다. 자세한 내용은 SSH를 사용하여 인스턴스에 연결을 참조하세요.

Windows

시작하기 전에 사용 중인 운영체제 버전이 지원되는지 확인합니다.

Windows 게스트 환경을 설치하려면 관리자 권한 PowerShell 버전 3.0 이상 프롬프트에서 다음 명령어를 실행하세요. Invoke-WebRequest 명령어에는 PowerShell 버전 3.0 이상이 필요합니다.

  1. GooGet을 다운로드하고 설치합니다.

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
    Invoke-WebRequest https://github.com/google/googet/releases/download/v2.18.3/googet.exe -OutFile $env:temp\googet.exe;
    & "$env:temp\googet.exe" -root C:\ProgramData\GooGet -noconfirm install -sources `
    https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable googet;
    Remove-Item "$env:temp\googet.exe"
    

    설치 도중 GooGet은 시스템 환경에 콘텐츠를 추가합니다. 설치가 완료되면 새 PowerShell 콘솔을 실행합니다. 또는 googet.exe 파일의 전체 경로(C:\ProgramData\GooGet\googet.exe)를 제공하세요.

  2. 새 콘솔 창을 열고 google-compute-engine-stable 저장소를 추가합니다.

    googet addrepo google-compute-engine-stable https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable
  3. Windows 게스트 환경의 코어 패키지를 설치합니다.

    googet -noconfirm install google-compute-engine-windows `
    google-compute-engine-sysprep google-compute-engine-metadata-scripts `
    google-compute-engine-vss google-osconfig-agent
    
  4. Windows 게스트 환경의 옵션 패키지를 설치합니다.

    googet -noconfirm install google-compute-engine-auto-updater

    googet 명령어 사용

    사용 가능한 패키지를 보려면 googet available 명령어를 실행합니다.

    설치된 패키지를 보려면 googet installed 명령어를 실행합니다.

    최신 패키지 버전으로 업데이트하려면 googet update 명령어를 실행합니다.

    추가 명령어를 보려면 googet help를 실행합니다.

부팅 디스크 클론 및 시작 스크립트 사용

인스턴스에 연결하여 게스트 환경을 수동으로 설치할 수 없는 경우 이 절차를 수행하여 게스트 환경을 설치합니다. 이 절차에는 다음과 같은 Google Cloud 콘솔 또는 Cloud Shell에서 완료할 수 있는 단계가 포함되어 있습니다.

이 방법은 Linux 배포판에만 적용됩니다. Windows의 경우 다른 2가지 설치 방법을 사용하세요.

이 절차는 Cloud Shell에서 실행합니다. Cloud Shell을 사용하지 않는 경우 이 절차를 실행하려면 jq 명령줄 JSON 프로세서를 설치하세요. 이 프로세서는 gcloud CLI 출력을 필터링합니다. Cloud Shell에는 jq가 사전 설치되어 있습니다.

CentOS/RHEL/Rocky

  1. 사용 중인 운영체제 버전이 지원되는지 확인합니다.

  2. 복구 인스턴스로 사용할 새 인스턴스를 만듭니다. 이 인스턴스 이름을 rescue로 지정합니다. 이 복구 인스턴스는 문제가 있는 인스턴스와 동일한 Linux OS를 실행하지 않아도 됩니다. 이 예시에서는 복구 인스턴스에서 Debian 9을 사용합니다.

  3. 문제가 있는 인스턴스를 중지하고 부팅 디스크의 복사본을 만듭니다.

    1. 문제가 있는 인스턴스의 변수 이름을 설정합니다. 이 변수를 사용하면 이후 단계에서 인스턴스를 쉽게 참조할 수 있습니다.

      export PROB_INSTANCE_NAME=VM_NAME

      VM_NAME을 문제가 있는 인스턴스의 이름으로 바꿉니다.

    2. 문제가 있는 인스턴스를 중지합니다.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. 문제가 있는 인스턴스의 부팅 디스크 이름을 가져옵니다.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. 부팅 디스크의 스냅샷을 만듭니다.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. 스냅샷에서 새 디스크를 만듭니다.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. 스냅샷을 삭제합니다.

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. 새 디스크를 복구 인스턴스에 연결하고 복구 인스턴스의 루트 볼륨을 마운트합니다. 이 절차에서는 추가 디스크를 하나만 연결하므로 새 디스크의 기기 식별자는 /dev/sdb가 됩니다. CentOS/RHEL/Rocky Linux는 기본적으로 디스크의 첫 번째 볼륨을 루트 볼륨으로 사용하므로 볼륨 식별자는 /dev/sdb1이 됩니다. 커스텀 구성의 경우 lsblk를 사용하여 볼륨 식별자를 결정합니다.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. SSH를 통해 복구 인스턴스에 연결합니다.

    gcloud compute ssh rescue
  6. 복구 인스턴스에서 다음 단계를 실행합니다.

    1. 새 디스크의 루트 볼륨을 마운트합니다.

      export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
      DEV="/dev/sdb1"
      sudo mkdir "$NEW_DISK_MOUNT_POINT"
      sudo mount -o nouuid "$DEV" "$NEW_DISK_MOUNT_POINT"
      
    2. rc.local 스크립트를 만듭니다.

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing Google guest environment for CentOS/RHEL/Rocky Linux =="
      sleep 30 # Wait for network.
      echo "Determining CentOS/RHEL/Rocky Linux version..."
      eval $(grep VERSION_ID /etc/os-release)
      if [[ -z $VERSION_ID ]]; then
        echo "ERROR: Could not determine version of CentOS/RHEL/Rocky Linux."
        exit 1
      fi
      echo "Updating repo file..."
      tee "/etc/yum.repos.d/google-cloud.repo" << EOM
      [google-compute-engine]
      name=Google Compute Engine
      baseurl=https://packages.cloud.google.com/yum/repos/google-compute-engine-el${VERSION_ID/.*}-x86_64-stable
      enabled=1
      gpgcheck=1
      repo_gpgcheck=0
      gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
      https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      EOM
      echo "Running yum makecache..."
      yum makecache
      echo "Running yum updateinfo..."
      yum updateinfo
      echo "Running yum install google-compute-engine..."
      yum install -y google-compute-engine
      rpm -q google-compute-engine
      if [[ $? -ne 0 ]]; then
        echo "ERROR: Failed to install ${pkg}."
      fi
      echo "Removing this rc.local script."
      rm /etc/rc.d/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
        echo "Restoring a previous rc.local script."
        mv "/etc/moved-rc.local" "/etc/rc.d/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. 기존 rc.local 파일을 백업하고, 임시 rc.local 스크립트를 마운트된 디스크의 위치로 이동하고, 부팅 시 임시 스크립트가 실행될 수 있도록 권한을 설정합니다. 임시 스크립트는 부팅이 완료되면 원래 스크립트를 대체합니다. 이렇게 하려면 다음 명령어를 실행합니다.

      if [ -f "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local" ]; then
        sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local" \
        "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
      fi
      sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local"
      sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local"
      sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local"
      
    4. 새 디스크의 루트 볼륨을 마운트 해제합니다.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir \
      "$NEW_DISK_MOUNT_POINT"
    5. 복구 인스턴스의 SSH 세션을 종료합니다.

  7. 복구 인스턴스에서 새 디스크를 분리합니다.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. 대체 인스턴스로 사용할 인스턴스를 만듭니다. 대체 인스턴스를 만들 때 새 디스크를 부팅 디스크로 지정합니다. Google Cloud 콘솔을 사용하여 대체 인스턴스를 만들 수 있습니다.

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

      VM 인스턴스로 이동

    2. 문제가 있는 인스턴스를 클릭한 다음 유사하게 만들기를 클릭합니다.

    3. 대체 인스턴스의 이름을 지정합니다. 부팅 디스크 섹션에서 변경을 클릭한 다음 기존 디스크를 클릭합니다. 새 디스크를 선택합니다.

    4. 만들기를 클릭합니다. 인스턴스가 생성되면 대체 인스턴스가 자동으로 시작됩니다.

    대체 인스턴스가 시작되면 임시 rc.local 스크립트가 실행되고 게스트 환경이 설치됩니다. 이 스크립트의 진행 상황을 보려면 콘솔 로그에서 임시 rc.local 스크립트가 생성하는 줄을 검사합니다. 로그를 보려면 다음 명령어를 실행합니다.

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    REPLACEMENT_VM_NAME을 대체 인스턴스에 할당한 이름으로 바꿉니다.

    임시 rc.local 스크립트가 완료되면 대체 인스턴스가 자동으로 재부팅됩니다. 두 번째 재부팅될 때 콘솔 로그를 검사하여 게스트 환경이 로드되는지 확인할 수 있습니다.

  9. SSH를 통해 인스턴스에 연결할 수 있는지 확인합니다.

    대체 인스턴스가 제대로 작동하는 것을 확인한 후 문제가 있는 인스턴스를 중지하거나 삭제해도 됩니다.

Debian

  1. 사용 중인 운영체제 버전이 지원되는지 확인합니다.

  2. 복구 인스턴스로 사용할 새 인스턴스를 만듭니다. 이 인스턴스 이름을 rescue로 지정합니다. 이 복구 인스턴스는 문제가 있는 인스턴스와 동일한 Linux OS를 실행하지 않아도 됩니다. 이 예시에서는 복구 인스턴스에서 Debian 9을 사용합니다.

  3. 문제가 있는 인스턴스를 중지하고 부팅 디스크의 복사본을 만듭니다.

    1. 문제가 있는 인스턴스의 변수 이름을 설정합니다. 이 변수를 사용하면 이후 단계에서 인스턴스를 쉽게 참조할 수 있습니다.

      export PROB_INSTANCE_NAME=VM_NAME

      VM_NAME을 문제가 있는 인스턴스의 이름으로 바꿉니다.

    2. 문제가 있는 인스턴스를 중지합니다.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. 문제가 있는 인스턴스의 부팅 디스크 이름을 가져옵니다.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. 부팅 디스크의 스냅샷을 만듭니다.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. 스냅샷에서 새 디스크를 만듭니다.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. 스냅샷을 삭제합니다.

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. 새 디스크를 복구 인스턴스에 연결하고 복구 인스턴스의 루트 볼륨을 마운트합니다. 이 절차에서는 추가 디스크를 하나만 연결하므로 새 디스크의 기기 식별자는 /dev/sdb가 됩니다. Debian은 기본적으로 디스크의 첫 번째 볼륨을 루트 볼륨으로 사용하므로 볼륨 식별자는 /dev/sdb1이 됩니다. 커스텀 구성의 경우 lsblk를 사용하여 볼륨 식별자를 결정합니다.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. SSH를 통해 복구 인스턴스에 연결합니다.

    gcloud compute ssh rescue
  6. 복구 인스턴스에서 다음 단계를 실행합니다.

    1. 새 디스크의 루트 볼륨을 마운트합니다.

      export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
      DEV="/dev/sdb1"
      sudo mkdir "$NEW_DISK_MOUNT_POINT"
      sudo mount "$DEV" "$NEW_DISK_MOUNT_POINT"
      
    2. rc.local 스크립트를 만듭니다.

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing Google guest environment for Debian =="
      export DEBIAN_FRONTEND=noninteractive
      sleep 30 # Wait for network.
      echo "Determining Debian version..."
      eval $(grep VERSION_CODENAME /etc/os-release)
      if [[ -z $VERSION_CODENAME ]]; then
       echo "ERROR: Could not determine Debian version."
       exit 1
      fi
      echo "Adding GPG key for Google cloud repo."
      curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
      echo "Updating repo file..."
      tee "/etc/apt/sources.list.d/google-cloud.list" << EOM
      deb http://packages.cloud.google.com/apt google-compute-engine-${VERSION_CODENAME}-stable main
      deb http://packages.cloud.google.com/apt google-cloud-packages-archive-keyring-${VERSION_CODENAME} main
      EOM
      echo "Running apt update..."
      apt update
      echo "Installing packages..."
      for pkg in google-cloud-packages-archive-keyring google-compute-engine; do
       echo "Running apt install ${pkg}..."
       apt install -y ${pkg}
       if [[ $? -ne 0 ]]; then
          echo "ERROR: Failed to install ${pkg}."
       fi
      done
      echo "Removing this rc.local script."
      rm /etc/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
       echo "Restoring a previous rc.local script."
       mv "/etc/moved-rc.local" "/etc/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. 기존 rc.local 파일을 백업하고, 임시 rc.local 스크립트를 마운트된 디스크의 위치로 이동하고, 부팅 시 임시 스크립트가 실행될 수 있도록 권한을 설정합니다. 임시 스크립트는 부팅이 완료되면 원래 스크립트를 대체합니다. 이렇게 하려면 다음 명령어를 실행합니다.

      if [[ -f "$NEW_DISK_MOUNT_POINT/etc/rc.local" ]]; then
         sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.local" \
         "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
      fi
      sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      
    4. 새 디스크의 루트 볼륨을 마운트 해제합니다.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. 복구 인스턴스의 SSH 세션을 종료합니다.

  7. 복구 인스턴스에서 새 디스크를 분리합니다.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. 대체 인스턴스로 사용할 새 인스턴스를 만듭니다. 대체 인스턴스를 만들 때 새 디스크를 부팅 디스크로 지정합니다. Google Cloud 콘솔을 사용하여 대체 인스턴스를 만들 수 있습니다.

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

      VM 인스턴스로 이동

    2. 문제가 있는 인스턴스를 클릭한 다음 유사하게 만들기를 클릭합니다.

    3. 대체 인스턴스의 이름을 지정합니다. 부팅 디스크 섹션에서 변경을 클릭한 다음 기존 디스크를 클릭합니다. 새 디스크를 선택합니다.

    4. 만들기를 클릭합니다. 인스턴스가 생성되면 대체 인스턴스가 자동으로 시작됩니다.

    대체 인스턴스가 시작되면 임시 rc.local 스크립트가 실행되고 게스트 환경이 설치됩니다. 이 스크립트의 진행 상황을 보려면 콘솔 로그에서 임시 rc.local 스크립트가 생성하는 줄을 검사합니다. 로그를 보려면 다음 명령어를 실행합니다.

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    REPLACEMENT_VM_NAME을 대체 인스턴스에 할당한 이름으로 바꿉니다.

    임시 rc.local 스크립트가 완료되면 대체 인스턴스가 자동으로 재부팅됩니다. 두 번째 재부팅될 때 콘솔 로그를 검사하여 게스트 환경이 로드되는지 확인할 수 있습니다.

  9. SSH를 통해 인스턴스에 연결할 수 있는지 확인합니다.

    대체 인스턴스가 제대로 작동하는 것을 확인한 후 문제가 있는 인스턴스를 중지하거나 삭제해도 됩니다.

Ubuntu

  1. 사용 중인 운영체제 버전이 지원되는지 확인합니다.

  2. 복구 인스턴스로 사용할 새 인스턴스를 만듭니다. 이 인스턴스 이름을 rescue로 지정합니다. 이 복구 인스턴스는 문제가 있는 인스턴스와 동일한 Linux OS를 실행하지 않아도 됩니다. 이 예시에서는 복구 인스턴스에서 Debian 9을 사용합니다.

  3. 문제가 있는 인스턴스를 중지하고 부팅 디스크의 복사본을 만듭니다.

    1. 문제가 있는 인스턴스의 변수 이름을 설정합니다. 이 변수를 사용하면 이후 단계에서 인스턴스를 쉽게 참조할 수 있습니다.

      export PROB_INSTANCE_NAME=VM_NAME

      VM_NAME을 문제가 있는 인스턴스의 이름으로 바꿉니다.

    2. 문제가 있는 인스턴스를 중지합니다.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. 문제가 있는 인스턴스의 부팅 디스크 이름을 가져옵니다.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. 부팅 디스크의 스냅샷을 만듭니다.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. 스냅샷에서 새 디스크를 만듭니다.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. 스냅샷을 삭제합니다.

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. 새 디스크를 복구 인스턴스에 연결하고 복구 인스턴스의 루트 볼륨을 마운트합니다. 이 절차에서는 추가 디스크를 하나만 연결하므로 새 디스크의 기기 식별자는 /dev/sdb가 됩니다. Ubuntu는 기본적으로 루트 볼륨의 라벨을 1로 지정하므로 볼륨 식별자는 /dev/sdb1이 됩니다. 커스텀 구성의 경우 lsblk를 사용하여 볼륨 식별자를 결정합니다.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. SSH를 통해 복구 인스턴스에 연결합니다.

    gcloud compute ssh rescue
  6. 복구 인스턴스에서 다음 단계를 실행합니다.

    1. 새 디스크의 루트 볼륨을 마운트합니다.

      export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
      DEV="/dev/sdb1"
      sudo mkdir "$NEW_DISK_MOUNT_POINT"
      sudo mount "$DEV" "$NEW_DISK_MOUNT_POINT"
      
    2. rc.local 스크립트를 만듭니다.

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing a Linux guest environment for Ubuntu =="
      sleep 30 # Wait for network.
      echo "Running apt update..."
      apt update
      echo "Installing packages..."
      echo "Running apt install google-compute-engine..."
      apt install -y google-compute-engine
      if [[ $? -ne 0 ]]; then
       echo "ERROR: Failed to install ${pkg}."
      fi
      echo "Removing this rc.local script."
      rm /etc/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
       echo "Restoring a previous rc.local script."
       mv "/etc/moved-rc.local" "/etc/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. 기존 rc.local 파일을 백업하고, 임시 rc.local 스크립트를 마운트된 디스크의 위치로 이동하고, 부팅 시 임시 스크립트가 실행될 수 있도록 권한을 설정합니다. 임시 스크립트는 부팅이 완료되면 원래 스크립트를 대체합니다. 이렇게 하려면 다음 명령어를 실행합니다.

      if [[ -f "$NEW_DISK_MOUNT_POINT/etc/rc.local" ]]; then
         sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.local" \
         "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
      fi
      sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      
    4. 새 디스크의 루트 볼륨을 마운트 해제합니다.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. 복구 인스턴스의 SSH 세션을 종료합니다.

  7. 복구 인스턴스에서 새 디스크를 분리합니다.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. 대체 인스턴스로 사용할 새 인스턴스를 만듭니다. 대체 인스턴스를 만들 때 새 디스크를 부팅 디스크로 지정합니다. Google Cloud 콘솔을 사용하여 대체 인스턴스를 만들 수 있습니다.

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

      VM 인스턴스로 이동

    2. 문제가 있는 인스턴스를 클릭한 다음 유사하게 만들기를 클릭합니다.

    3. 대체 인스턴스의 이름을 지정합니다. 부팅 디스크 섹션에서 변경을 클릭한 다음 기존 디스크를 클릭합니다. 새 디스크를 선택합니다.

    4. 만들기를 클릭합니다. 인스턴스가 생성되면 대체 인스턴스가 자동으로 시작됩니다.

    대체 인스턴스가 시작되면 임시 rc.local 스크립트가 실행되고 게스트 환경이 설치됩니다. 이 스크립트의 진행 상황을 보려면 콘솔 로그에서 임시 rc.local 스크립트가 생성하는 줄을 검사합니다. 로그를 보려면 다음 명령어를 실행합니다.

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    REPLACEMENT_VM_NAME을 대체 인스턴스에 할당한 이름으로 바꿉니다.

    임시 rc.local 스크립트가 완료되면 대체 인스턴스가 자동으로 재부팅됩니다. 두 번째 재부팅될 때 콘솔 로그를 검사하여 게스트 환경이 로드되는지 확인할 수 있습니다.

  9. SSH를 통해 인스턴스에 연결할 수 있는지 확인합니다.

    대체 인스턴스가 제대로 작동하는 것을 확인한 후 문제가 있는 인스턴스를 중지하거나 삭제해도 됩니다.

게스트 환경 업데이트

게스트 환경이 오래되었다는 메시지가 표시되면 다음과 같이 운영체제의 패키지를 업데이트합니다.

CentOS/RHEL/Rocky

CentOS, RHEL, Rocky Linux 운영체제를 업데이트하려면 다음 명령어를 실행합니다.

sudo yum makecache
sudo yum install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

Debian

Debian 운영체제를 업데이트하려면 다음 명령어를 실행합니다.

sudo apt update
sudo apt install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

Ubuntu

Ubuntu 운영체제를 업데이트하려면 다음 명령어를 실행합니다.

sudo apt update
sudo apt install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

SLES

SLES 운영체제를 업데이트하려면 다음 명령어를 실행합니다.

sudo zypper refresh
sudo zypper install google-guest-{agent,configs,oslogin} \
google-osconfig-agent

Windows

Windows 운영체제를 업데이트하려면 다음 명령어를 실행합니다.

googet update

게스트 환경 검증

인스턴스가 부팅되는 동안 콘솔에 표시되는 시스템 로그를 검사하거나 인스턴스에 연결되어 있는 동안 설치된 패키지를 나열하여 게스트 환경이 설치되어 있는지 확인할 수 있습니다.

게스트 환경의 예상 콘솔 로그 보기

다음 표에는 인스턴스가 시작될 때 게스트 환경이 작동 중인 인스턴스에서 표시되는 콘솔 로그의 예상 출력이 요약되어 있습니다.

운영체제 서비스 관리 예상 출력
CentOS/RHEL/Rocky Linux
Debian
Ubuntu
SLES
Container-Optimized OS 89 이상
systemd
google_guest_agent: GCE Agent Started (version YYYYMMDD.NN)
google_metadata_script_runner: Starting startup scripts (version YYYYMMDD.NN)
OSConfigAgent Info: OSConfig Agent (version YYYYMMDD.NN)
Container-Optimized OS 85 이하 systemd
Started Google Compute Engine Accounts Daemon
Started Google Compute Engine Network Daemon
Started Google Compute Engine Clock Skew Daemon
Started Google Compute Engine Instance Setup
Started Google Compute Engine Startup Scripts
Started Google Compute Engine Shutdown Scripts
Windows
GCEGuestAgent: GCE Agent Started (version YYYYMMDD.NN)
GCEMetadataScripts: Starting startup scripts (version YYYYMMDD.NN)
OSConfigAgent Info: OSConfig Agent (version YYYYMMDD.NN)

인스턴스의 콘솔 로그를 보려면 다음 단계를 따르세요.

콘솔

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

    VM 인스턴스로 이동

    1. 검사해야 하는 인스턴스를 선택합니다.
    2. 인스턴스를 다시 시작하거나 재설정합니다.
    3. 로그에서 직렬 포트 1(콘솔)을 클릭합니다.
    4. 이 단계 앞에 나오는 표에서 예상 출력을 검색합니다.

gcloud

  1. 인스턴스를 다시 시작하거나 재설정합니다.
  2. gcloud compute instances get-serial-port-output 하위 명령어를 사용하여 Google Cloud CLI를 통해 연결하세요. 예를 들면 다음과 같습니다.

    gcloud compute instances get-serial-port-output VM_NAME

    VM_NAME을 검사해야 하는 인스턴스의 이름으로 바꿉니다.

  3. 이 단계 앞에 나오는 표에서 예상 출력을 검색합니다.

운영체제 버전별로 로드된 서비스 보기

다음 표에는 게스트 환경이 작동 중인 인스턴스에 로드되어야 하는 서비스가 요약되어 있습니다. 인스턴스에 연결한 후 서비스 목록을 나열하는 명령어를 실행해야 합니다. 따라서 인스턴스에 액세스할 수 있는 경우에만 이 검사를 실행할 수 있습니다.

운영체제 서비스를 나열하는 명령어 예상 출력
CentOS/RHEL/Rocky Linux
Debian
sudo systemctl list-unit-files \
| grep google | grep enabled
google-disk-expand.service             enabled
google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
Ubuntu
sudo systemctl list-unit-files \
| grep google | grep enabled
google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
Container-Optimized OS
sudo systemctl list-unit-files \
| grep google
var-lib-google.mount                   disabled
google-guest-agent.service             disabled
google-osconfig-agent.service          disabled
google-osconfig-init.service           disabled
google-oslogin-cache.service           static
google-shutdown-scripts.service        disabled
google-startup-scripts.service         disabled
var-lib-google-remount.service         static
google-oslogin-cache.timer             disabled 
SLES 12 이상
sudo systemctl list-unit-files \
| grep google | grep enabled
google-guest-agent.service              enabled
google-osconfig-agent.service           enabled
google-shutdown-scripts.service         enabled
google-startup-scripts.service          enabled
google-oslogin-cache.timer              enabled 
Windows
Get-Service GCEAgent
Get-ScheduledTask GCEStartup
Running    GCEAgent   GCEAgent
\          GCEStartup Ready

운영체제 버전별로 설치된 패키지 보기

다음 표에는 게스트 환경이 작동 중인 인스턴스에 설치해야 하는 패키지가 요약되어 있습니다. 인스턴스에 연결한 후 설치된 패키지를 나열하는 명령어를 실행해야 합니다. 따라서 인스턴스에 액세스할 수 있는 경우에만 이 검사를 실행할 수 있습니다.

이러한 패키지에 대한 자세한 내용은 게스트 환경 구성요소를 참조하세요.

운영체제 패키지를 나열하는 명령어 예상 출력
CentOS/RHEL/Rocky Linux
rpm -qa --queryformat '%{NAME}\n' \
| grep -iE 'google|gce'

패키지 목록은 다를 수 있습니다. google-cloud-cli-anthoscli와 같은 구성요소도 포함될 수 있습니다. RHEL 이미지에는 버전별 패키지 (예: google-rhui-client-rhel8) 또는 SAP별 변형이 있을 수 있습니다.

google-osconfig-agent
google-compute-engine-oslogin
google-guest-agent
gce-disk-expand
google-compute-engine
google-cloud-cli
google-cloud-ops-agent
Debian
apt list --installed \
| grep -i google
gce-disk-expand
google-cloud-packages-archive-keyring
google-cloud-sdk
google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
Ubuntu
apt list --installed \
| grep -i google
google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
SUSE(SLES)
rpm -qa --queryformat '%{NAME}\n' \
| grep -i google
google-guest-configs
google-osconfig-agent
google-guest-oslogin
google-guest-agent
Windows
googet installed
certgen
googet
google-compute-engine-auto-updater
google-compute-engine-driver-gga
google-compute-engine-driver-netkvm
google-compute-engine-driver-pvpanic
google-compute-engine-driver-vioscsi
google-compute-engine-metadata-scripts
google-compute-engine-powershell
google-compute-engine-sysprep
google-compute-engine-vss
google-compute-engine-windows
google-osconfig-agent

다음 단계