このページでは、Compute Engine で動作している VM インスタンスのゲスト環境を手動でインストールする方法を説明します。
ほとんどの場合、Google 提供の公開イメージを使用して作成された VM を使用すると、ゲスト環境を手動でインストールする必要がありません。
ゲスト環境を手動でインストールする必要があるかどうかを判断するには、次の点を確認します。
- ゲスト環境を手動でインストールする場合を確認する。
- ゲスト環境を検証する手順を使用して、インスタンスでゲスト環境が動作しているかどうかを確認する。
始める前に
-
このガイドの
- ローカルツールをインストールするか、Cloud Shell を使用できます。
- ローカルツールのインストール:
gcloud
コマンドライン ツールをインストールします。- jq コマンドライン JSON プロセッサをインストールします。これにより、
gcloud
の出力をフィルタリングできます。
- Cloud Shell の使用(
gcloud
およびjq
がプリインストール済み):
- ローカルツールのインストール:
- デフォルト プロパティを設定します。
gcloud config set compute/zone [ZONE]
gcloud config set compute/region [REGION]
gcloud config set project [PROJECT]
gcloud
コマンドラインの例を使用する場合、以下を行います。
目次
オペレーティング システムのサポート
ゲスト環境の手動インストールは、次のオペレーティン グシステムで行えます。
- Ubuntu 14.04 以降
- CentOS 6、7
- Red Hat Enterprise Linux(RHEL)6、7
- Debian 9
- Windows Server 2019
- Windows Server 1809、1803
- Windows Server 1709
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2008 R2
- Windows Server 上の SQL Server
- Windows bring your own license(ベータ版):
- Windows 7
- Windows 10
ゲスト環境のインストールには、インポート ツールの使用をおすすめします。インストール オプションの一覧については、インストール方法をご覧ください。
SUSE、CoreOS、Container-Optimized の各オペレーティング システム用のゲスト環境を手動でインストールすることはできません。これらのオペレーティング システムのいずれかが必要な場合は、すべての公開イメージの中核としてゲスト環境が含まれているため、公開イメージを使用することをおすすめします。
ゲスト環境をインストールする
インストール方法
ゲスト環境のインストール方法は 3 つあります。次のいずれかを選択します。
- インポート ツールを使用する。インポート ツールの使用手順については、イメージを起動可能にするをご覧ください。
- SSH または RDP を使用してインスタンスに接続し、ゲスト環境をインプレースでインストールする。
- ブートディスクのクローンを作成し、起動スクリプトを使用してゲスト環境をインストールする。
ゲスト環境をインプレースでインストールする
SSH を使用してターゲット インスタンスに接続できる場合、この方法を使用してゲスト環境をインストールします。インスタンスに接続してゲスト環境をインストールできない場合は、ブートディスクのクローンを作成して起動スクリプトでゲスト環境をインストールします。
SSH パスワード ベースの認証を使用して接続できる場合は、この手順がイメージのインポートに便利です。機能キーベースの SSH を使用したユーザー アカウントが 1 つ以上ある場合は、ゲスト環境の再インストールにも使用できます。
CentOS/RHEL
- お使いのオペレーティング システムのバージョンがサポートされていることを確認します。
CentOS/RHEL のバージョンを特定して、ソース repo ファイル
/etc/yum.repos.d/google-cloud.repo
を作成します。OS_RELEASE_FILE="/etc/redhat-release" if [ ! -f $OS_RELEASE_FILE ]; then OS_RELEASE_FILE="/etc/centos-release" fi DIST=$(cat $OS_RELEASE_FILE | grep -o '[0-9].*' | awk -F'.' '{print $1}') sudo tee /etc/yum.repos.d/google-cloud.repo << EOM [google-cloud-compute] name=Google Cloud Compute baseurl=https://packages.cloud.google.com/yum/repos/google-cloud-compute-el${DIST}-x86_64-stable enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOM
パッケージ リストを更新します。
sudo yum makecache sudo yum updateinfo
ゲスト環境パッケージをインストールします。
declare -a PKG_LIST=(python-google-compute-engine \ google-compute-engine-oslogin \ google-compute-engine) for pkg in ${PKG_LIST[@]}; do sudo yum install -y $pkg done
インスタンスを再起動して、コンソールログを調査することで、バックアップの開始時にゲスト環境が読み込まれることを確認します。
SSH を使用してインスタンスに接続できることを確認します。
Debian
- お使いのオペレーティング システムのバージョンがサポートされていることを確認します。
公開 repo GPG 鍵をインストールします。
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Debian distro の名前を特定し、ソースリスト ファイル
/etc/apt/sources.list.d/google-cloud.list
を作成します。DIST=$(cat /etc/os-release | grep "VERSION=" | sed "s/\"\|(\|)\|VERSION=//g" \ | awk '{print tolower($NF)}') sudo tee /etc/apt/sources.list.d/google-cloud.list << EOM deb http://packages.cloud.google.com/apt google-compute-engine-${DIST}-stable main deb http://packages.cloud.google.com/apt google-cloud-packages-archive-keyring-${DIST} main EOM
パッケージ リストを更新します。
sudo apt-get update
ゲスト環境パッケージをインストールします。
declare -a PKG_LIST=(google-cloud-packages-archive-keyring \ python-google-compute-engine \ python3-google-compute-engine \ google-compute-engine-oslogin \ google-compute-engine) for pkg in ${PKG_LIST[@]}; do sudo apt install -y $pkg done
インスタンスを再起動して、コンソールログを調査することで、バックアップの開始時にゲスト環境が読み込まれることを確認します。
SSH を使用してインスタンスに接続できることを確認します。
Ubuntu
お使いのオペレーティング システムのバージョンがサポートされていることを確認します。
Universe リポジトリを有効にします。Canonical は、そのゲスト環境用のパッケージを Universe リポジトリに公開します。
sudo apt-add-repository universe
パッケージ リストを更新します。
sudo apt-get update
ゲスト環境パッケージをインストールします。
declare -a PKG_LIST=(python-google-compute-engine \ python3-google-compute-engine \ google-compute-engine-oslogin \ gce-compute-image-packages) for pkg in ${PKG_LIST[@]}; do sudo apt install -y $pkg || echo "Not available: $pkg" done
インスタンスを再起動して、コンソールログを調査することで、バックアップの開始時にゲスト環境が読み込まれることを確認します。
SSH を使用してインスタンスに接続できることを確認します。
Windows
開始する前に、お使いのオペレーティング システムのバージョンがサポートされていることを確認します。
Windows ゲスト環境をインストールするには、昇格した PowerShell バージョン 3.0 以降のプロンプトで次のコマンドを実行します。以下の手順の Invoke-WebRequest
コマンドには、3.0 より上のバージョンの PowerShell が必要です。
GooGet
をダウンロードしてインストールします。[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 Invoke-WebRequest https://github.com/google/googet/releases/download/v2.13.0/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)を入力します。新しいコンソールを開き、
google-compute-engine-stable
リポジトリを追加します。googet addrepo google-compute-engine-stable https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable
コア Windows ゲスト環境パッケージをインストールします。
googet -noconfirm install google-compute-engine-windows \ google-compute-engine-sysprep google-compute-engine-metadata-scripts \ google-compute-engine-vss
オプションの Windows ゲスト環境パッケージをインスールします。
googet -noconfirm install google-compute-engine-auto-updater
googet
コマンドを使用します。使用可能なパッケージを表示するには、
googet available
コマンドを実行します。インストール済みのパッケージを表示するには、
googet installed
コマンドを実行します。最新のパッケージ バージョンに更新するには、
googet update
コマンドを実行します。追加のコマンドを表示するには、
googet help
を実行します。
ブートディスクのクローン作成と起動スクリプトの使用
インスタンスに接続して手動でゲスト環境をインストールできない場合、この手順を使用してゲスト環境をインストールします。この手順には、GCP Console および Cloud Shell で完了できる以下の手順が含まれています。
この方法では、Linux ディストリビューション用の手順のみが表示されます。Windows の場合は、他の 2 つのインストール方法のいずれかを使用してください。
Cloud Shell を使用してこの手順を実行します。
CentOS / RHEL
- お使いのオペレーティング システムのバージョンがサポートされていることを確認します。
- 公開 repo GPG 鍵をインストールします。
レスキュー インスタンスとして機能する新しいインスタンスを作成します。このインスタンスにレスキューという名前を付けます。このレスキュー インスタンスでは、問題インスタンスと同じ Linux OS を実行する必要はありません。この例では、レスキュー インスタンスで Debian 9 を使用します。
問題インスタンスを停止し、そのルートディスクのコピーを作成します。
問題インスタンスの変数名を設定します。これにより、後の手順でインスタンスを簡単に参照できるようになります。
export PROB_INSTANCE_NAME=INSTANCE_NAME
INSTANCE_NAME
は問題インスタンスの名前です。問題インスタンスを停止します。
gcloud compute instances stop "$PROB_INSTANCE_NAME"
問題インスタンスのブートディスクの名前を取得します。
export PROB_INSTANCE_DISK="$(gcloud compute instances describe \ "$PROB_INSTANCE_NAME" --format='json' | jq -r '.disks[] | \ select(.boot == true) | .source')"
ブートディスクのスナップショットを作成します。
export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot" gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \ --snapshot-names "$DISK_SNAPSHOT"
スナップショットから新しいディスクを作成します。
export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk" gcloud compute disks create "$NEW_DISK" \ --source-snapshot="$DISK_SNAPSHOT"
スナップショットを削除します。
gcloud compute snapshots delete "$DISK_SNAPSHOT"
新しいディスクをレスキュー インスタンスに接続し、そのルート ボリュームをマウントします。この手順では追加のディスクを 1 つだけ接続するため、新しいディスクのデバイス識別子は /dev/sdb になります。CentOS / RHEL では、デフォルトでディスク上の最初のボリュームをルート ボリュームとして使用するため、ボリューム識別子は /dev/sdb1 にする必要があります(カスタムケースでは、
lsblk
を使用してボリューム識別子を特定します)。gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
-
gcloud compute ssh rescue
レスキュー インスタンスで次の手順を行います。
新しいディスクのルート ボリュームをマウントします。
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" if [ "$?" != "0" ]; then # Handle XFS filesystem cases (CentOS/RHEL 7): sudo mount -o nouuid "$DEV" "$NEW_DISK_MOUNT_POINT" fi
rc.local
スクリプトを作成します。cat <<'EOF' >/tmp/rc.local #!/bin/bash declare -a PKG_LIST=(python-google-compute-engine \ google-compute-engine-oslogin \ google-compute-engine) declare -x YUM_SERVER="packages.cloud.google.com" declare -x REPO_FILE="/etc/yum.repos.d/google-cloud.repo" echo "== Installing a Linux guest environment for CentOS/RHEL ==" sleep 30 # Wait for network. echo "Determining CentOS/RHEL version..." OS_RELEASE_FILE="/etc/redhat-release" if [ ! -f "$OS_RELEASE_FILE" ]; then OS_RELEASE_FILE="/etc/centos-release" fi if [ ! -f "$OS_RELEASE_FILE" ]; then echo "ERROR: This system does not appear to be CentOS/RHEL." exit 1 fi DIST=$(cat "$OS_RELEASE_FILE" | grep -o '[0-9].*' | awk -F'.' '{print $1}') if [ -z $DIST ]; then echo "ERROR: Could not determine version of CentOS/RHEL." exit 1 fi echo "Updating $REPO_FILE..." tee "$REPO_FILE" << EOM [google-cloud-compute] name=Google Cloud Compute baseurl=https://$YUM_SERVER/yum/repos/google-cloud-compute-el${DIST}-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://$YUM_SERVER/yum/doc/yum-key.gpg https://$YUM_SERVER/yum/doc/rpm-package-key.gpg EOM echo "Running yum makecache..." yum makecache echo "Running yum updateinfo..." yum updateinfo echo "Installing packages..." for pkg in ${PKG_LIST[@]}; do echo "Running yum install $pkg..." yum install -y $pkg if [ "$?" != "0" ]; then echo "ERROR: Failed to install $pkg." fi done 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 now EOF
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"
新しいディスクのルート ボリュームをアンマウントします。
sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir \ "$NEW_DISK_MOUNT_POINT"
レスキュー インスタンスへの SSH セッションを終了します。
レスキュー インスタンスから新しいディスクの接続を解除します。
gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
置換インスタンスとして機能する新しいインスタンスを作成します。置換インスタンスを作成するときに、新しいディスクをブートディスクとして指定します。置換インスタンスは、Cloud Console を使用して作成できます。
- [VM インスタンス] ページに移動します。
- 問題インスタンスをクリックしてから、[クローン] をクリックします。
- 置換インスタンスの名前を指定します。[ブートディスク] セクションで、[変更] をクリックしてから、[既存のディスク] をクリックします。新しいディスクを選択します。
- [作成] をクリックします。置換インスタンスは、作成されると自動的に開始されます。
置換インスタンスが開始されると、一時的な
rc.local
スクリプトが実行され、ゲスト環境がインストールされます。このスクリプトの進行状況を監視するには、一時的なrc.local
スクリプトによって生成されたコンソールログの行を調べます。ログを表示するには、次のコマンドを実行します。gcloud compute instances get-serial-port-output [REPLACEMENT_INSTANCE_NAME]
[REPLACEMENT_INSTANCE_NAME]
は、置換インスタンスに割り当てた名前です。また、一時的な
rc.local
スクリプトが終了すると、置換インスタンスが自動的に再起動されます。2 回目の再起動中にコンソールログを調査することで、ゲスト環境が読み込まれていることを確認できます。SSH を使用してインスタンスに接続できることを確認します。
Debian
- お使いのオペレーティング システムのバージョンがサポートされていることを確認します。
レスキュー インスタンスとして機能する新しいインスタンスを作成します。このインスタンスにレスキューという名前を付けます。このレスキュー インスタンスでは、問題インスタンスと同じ Linux OS を実行する必要はありません。この例では、レスキュー インスタンスで Debian 9 を使用します。
問題インスタンスを停止し、そのルートディスクのコピーを作成します。
問題インスタンスの変数名を設定します。これにより、後の手順でインスタンスを簡単に参照できるようになります。
export PROB_INSTANCE_NAME=INSTANCE_NAME
INSTANCE_NAME
は問題インスタンスの名前です。問題インスタンスを停止します。
gcloud compute instances stop "$PROB_INSTANCE_NAME"
問題インスタンスのブートディスクの名前を取得します。
export PROB_INSTANCE_DISK="$(gcloud compute instances describe \ "$PROB_INSTANCE_NAME" --format='json' | jq -r '.disks[] | \ select(.boot == true) | .source')"
ブートディスクのスナップショットを作成します。
export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot" gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \ --snapshot-names "$DISK_SNAPSHOT"
スナップショットから新しいディスクを作成します。
export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk" gcloud compute disks create "$NEW_DISK" \ --source-snapshot="$DISK_SNAPSHOT"
スナップショットを削除します。
gcloud compute snapshots delete "$DISK_SNAPSHOT"
新しいディスクをレスキュー インスタンスに接続し、そのルート ボリュームをマウントします。この手順では追加のディスクを 1 つだけ接続するため、新しいディスクのデバイス識別子は /dev/sdb になります。Debian では、デフォルトでディスク上の最初のボリュームをルート ボリュームとして使用するため、ボリューム識別子は /dev/sdb1 にする必要があります(カスタムケースでは、
lsblk
を使用してボリューム識別子を特定します)。gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
-
gcloud compute ssh rescue
レスキュー インスタンスで次の手順を行います。
新しいディスクのルート ボリュームをマウントします。
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"
rc.local
スクリプトを作成します。cat <<'EOF' >/tmp/rc.local #!/bin/bash declare -a PKG_LIST=(google-cloud-packages-archive-keyring \ python-google-compute-engine \ python3-google-compute-engine \ google-compute-engine-oslogin \ google-compute-engine) declare -x APT_SERVER="packages.cloud.google.com" declare -x REPO_FILE="/etc/apt/sources.list.d/google-cloud.list" echo "== Installing a Linux guest environment for Debian ==" sleep 30 # Wait for network. echo "Determining Debian version..." DIST=$(cat /etc/os-release | grep "VERSION=" \ | sed "s/\"\|(\|)\|VERSION=//g" | awk '{print tolower($NF)}') if [ -z $DIST ]; then echo "ERROR: Could not determine Debian version." exit 1 fi echo "Adding GPG key for $APT_SERVER." curl https://$APT_SERVER/apt/doc/apt-key.gpg | apt-key add - echo "Updating $REPO_FILE..." tee "$REPO_FILE" << EOM deb http://$APT_SERVER/apt google-compute-engine-${DIST}-stable main deb http://$APT_SERVER/apt google-cloud-packages-archive-keyring-${DIST} main EOM echo "Running apt update..." apt-get update echo "Installing packages..." for pkg in ${PKG_LIST[@]}; do echo "Running apt install $pkg..." apt install -y $pkg if [ "$?" != "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 now EOF
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"
新しいディスクのルート ボリュームをアンマウントします。
sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
レスキュー インスタンスへの SSH セッションを終了します。
レスキュー インスタンスから新しいディスクの接続を解除します。
gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
置換インスタンスとして機能する新しいインスタンスを作成します。置換インスタンスを作成するときに、新しいディスクをブートディスクとして指定します。置換インスタンスは、Cloud Console を使用して作成できます。
- [VM インスタンス] ページに移動します。
- 問題インスタンスをクリックしてから、[クローン] をクリックします。
- 置換インスタンスの名前を指定します。[ブートディスク] セクションで、[変更] をクリックしてから、[既存のディスク] をクリックします。新しいディスクを選択します。
- [作成] をクリックします。置換インスタンスは、作成されると自動的に開始されます。
置換インスタンスが開始されると、一時的な
rc.local
スクリプトが実行され、ゲスト環境がインストールされます。このスクリプトの進行状況を監視するには、一時的なrc.local
スクリプトによって生成されたコンソールログの行を調べます。ログを表示するには、次のコマンドを実行します。gcloud compute instances get-serial-port-output REPLACEMENT_INSTANCE_NAME
REPLACEMENT_INSTANCE_NAME
は、置換インスタンスに割り当てた名前です。また、一時的な
rc.local
スクリプトが終了すると、置換インスタンスが自動的に再起動されます。2 回目の再起動中にコンソールログを調査することで、ゲスト環境が読み込まれていることを確認できます。SSH を使用してインスタンスに接続できることを確認します。
Ubuntu
- お使いのオペレーティング システムのバージョンがサポートされていることを確認します。
- 公開 repo GPG 鍵をインストールします。
レスキュー インスタンスとして機能する新しいインスタンスを作成します。このインスタンスにレスキューという名前を付けます。このレスキュー インスタンスでは、問題インスタンスと同じ Linux OS を実行する必要はありません。この例では、レスキュー インスタンスで Debian 9 を使用します。
問題インスタンスを停止し、そのルートディスクのコピーを作成します。
問題インスタンスの変数名を設定します。これにより、後の手順でインスタンスを簡単に参照できるようになります。
export PROB_INSTANCE_NAME=INSTANCE_NAME
INSTANCE_NAME
は問題インスタンスの名前です。問題インスタンスを停止します。
gcloud compute instances stop "$PROB_INSTANCE_NAME"
問題インスタンスのブートディスクの名前を取得します。
export PROB_INSTANCE_DISK="$(gcloud compute instances describe \ "$PROB_INSTANCE_NAME" --format='json' | jq -r '.disks[] | \ select(.boot == true) | .source')"
ブートディスクのスナップショットを作成します。
export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot" gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \ --snapshot-names "$DISK_SNAPSHOT"
スナップショットから新しいディスクを作成します。
export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk" gcloud compute disks create "$NEW_DISK" \ --source-snapshot="$DISK_SNAPSHOT"
スナップショットを削除します。
gcloud compute snapshots delete "$DISK_SNAPSHOT"
新しいディスクをレスキュー インスタンスに接続し、そのルート ボリュームをマウントします。この手順では追加のディスクを 1 つだけ接続するため、新しいディスクのデバイス識別子は /dev/sdb になります。Ubuntu では、デフォルトでルート ボリュームに 1 というラベルを付けるため、ボリューム識別子は /dev/sdb1 にする必要があります(カスタムケースでは、
lsblk
を使用してボリューム識別子を特定します)。gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
-
gcloud compute ssh rescue
レスキュー インスタンスで次の手順を行います。
新しいディスクのルート ボリュームをマウントします。
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"
rc.local
スクリプトを作成します。cat <<'EOF' >/tmp/rc.local #!/bin/bash declare -a PKG_LIST=(python-google-compute-engine \ python3-google-compute-engine \ google-compute-engine-oslogin \ gce-compute-image-packages) echo "== Installing a Linux guest environment for Ubuntu ==" sleep 30 # Wait for network. echo "Determining Ubuntu version..." DIST=$(cat /etc/os-release | grep "VERSION_ID=" \ | sed "s/\"\|(\|)\|VERSION_ID=//g" | awk -F. '{print tolower($1)}') if [ -z $DIST ]; then echo "ERROR: Could not determine Ubuntu version." exit 1 fi if [ "$DIST" -lt "16" ]; then # Adjust package list for older Ubuntu: echo "Ubuntu version less than 16.04." declare -a PKG_LIST=(python-google-compute-engine \ gce-compute-image-packages) fi echo "Ensuring Ubuntu universe repositories are enabled." apt-add-repository universe echo "Running apt update..." apt-get update echo "Installing packages..." for pkg in ${PKG_LIST[@]}; do echo "Running apt install $pkg..." apt install -y $pkg if [ "$?" != "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 now EOF
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"
新しいディスクのルート ボリュームをアンマウントします。
sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
レスキュー インスタンスへの SSH セッションを終了します。
レスキュー インスタンスから新しいディスクの接続を解除します。
gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
置換インスタンスとして機能する新しいインスタンスを作成します。置換インスタンスを作成するときに、新しいディスクをブートディスクとして指定します。置換インスタンスは、Cloud Console を使用して作成できます。
- [VM インスタンス] ページに移動します。
- 問題インスタンスをクリックしてから、[クローン] をクリックします。
- 置換インスタンスの名前を指定します。[ブートディスク] セクションで、[変更] をクリックしてから、[既存のディスク] をクリックします。新しいディスクを選択します。
- [作成] をクリックします。置換インスタンスは、作成されると自動的に開始されます。
置換インスタンスが開始されると、一時的な
rc.local
スクリプトが実行され、ゲスト環境がインストールされます。このスクリプトの進行状況を監視するには、一時的なrc.local
スクリプトによって生成されたコンソールログの行を調べます。ログを表示するには、次のコマンドを実行します。gcloud compute instances get-serial-port-output REPLACEMENT_INSTANCE_NAME
REPLACEMENT_INSTANCE_NAME
は、置換インスタンスに割り当てた名前です。また、一時的な
rc.local
スクリプトが終了すると、置換インスタンスが自動的に再起動されます。2 回目の再起動中にコンソールログを調査することで、ゲスト環境が読み込まれていることを確認できます。SSH を使用してインスタンスに接続できることを確認します。
ゲスト環境を検証する
ゲスト環境の存在は、インスタンスの起動中にコンソールに出力されるシステムログを調査するか、インスタンスへの接続中にインストールされたパッケージをリストすることによって判断できます。
ゲスト環境の想定されるコンソールログ
この表は、稼働中のゲスト環境が起動するときにインスタンスから発行されるコンソールログの想定される出力をまとめたものです。
OS | サービス管理 | 想定される出力 |
---|---|---|
CentOS/RHEL 7 Debian 9 Ubuntu 16.04+ |
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 |
CentOS/RHEL 6 Ubuntu 14.04 |
upstart | google-accounts: INFO Starting Google Accounts daemon google-ip-forwarding: INFO Starting Google Compute Engine Network Daemon google-clock-skew: INFO Starting Google Clock Skew daemon |
CoreOS | systemd と ignition | systemd[1]: Starting Ignition (files)... [finished] enabling unit "coreos-metadata-sshkeys@.service [finished] enabling unit "oem-gce.service" [finished] enabling unit "oem-cloudinit.service" |
Container-Optimized OS | 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 |
SUSE(SLES)12+ | 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 | GCEWindowsAgent: GCE Agent Started GCEMetadataScripts: Starting startup scripts |
インスタンスのコンソールログを表示するには、次の手順を実行します。
Console
- [VM インスタンス] ページに移動します。
gcloud
ゲスト環境で読み込まれるサービス
この表は、稼働中のゲスト環境でインスタンスに読み込む必要があるサービスをまとめたものです。サービスをリストするコマンドは、インスタンスに接続した後に実行する必要があります。そのため、このチェックはインスタンスへのアクセス権がある場合にのみ実行できます。
OS | サービスをリストするコマンド | 想定される出力 |
---|---|---|
CentOS/RHEL 7 Debian 9 Ubuntu 16.04+ |
sudo systemctl list-unit-files \ | grep google | grep enabled |
google-accounts-daemon.service enabled google-clock-skew-daemon.service enabled google-instance-setup.service enabled google-shutdown-scripts.service enabled google-startup-scripts.service enabled google-network-daemon.service enabled |
CentOS/RHEL 6 Ubuntu 14.04 |
initctl list | grep google |
google-accounts-daemon start/running google-network-daemon start/running google-clock-skew-daemon start/running google-instance-setup stop/waiting google-startup-scripts stop/waiting google-shutdown-scripts stop/waiting |
CoreOS | sudo systemctl list-unit-files \ | grep \ "oem-cloudinit\|oem-gce\|coreos-metadata-ssh" \ | grep enabled |
coreos-metadata-sshkeys@.service enabled oem-cloudinit.service enabled oem-gce.service enabled |
Container-Optimized OS | sudo systemctl list-unit-files \ | grep google |
var-lib-google.mount disabled google-accounts-daemon.service disabled google-clock-skew-daemon.service disabled google-instance-setup.service disabled google-ip-forwarding-daemon.service disabled google-network-setup.service disabled google-shutdown-scripts.service disabled google-startup-scripts.service disabled var-lib-google-remount.service static |
SUSE(SLES)12+ | sudo systemctl list-unit-files \ | grep google | grep enabled |
google-accounts-daemon.service enabled google-network-daemon.service enabled google-clock-skew-daemon.service enabled google-instance-setup.service enabled google-shutdown-scripts.service enabled google-startup-scripts.service enabled |
Windows | Get-Service GCEAgent Get-ScheduledTask GCEStartup |
Running GCEAgent GCEAgent \ GCEStartup Ready |
ゲスト環境でインストールされるパッケージ
この表は、稼働中のゲスト環境でインスタンスにインストールする必要があるパッケージをまとめたものです。インストールされるパッケージをリストするコマンドは、インスタンスに接続した後に実行する必要があります。そのため、このチェックはインスタンスへのアクセス権がある場合にのみ実行できます。
OS | パッケージをリストするコマンド | 想定される出力 |
---|---|---|
CentOS/RHEL 6 & 7 | yum list installed | grep google-compute |
google-compute-engine google-compute-engine-oslogin.x86_64 python-google-compute-engine |
Debian 9 | apt list --installed | grep google-compute |
google-compute-engine google-compute-engine-oslogin python-google-compute-engine python3-google-compute-engine |
Ubuntu 14.04 | apt list --installed \ | grep "google-compute\|gce-compute-image-packages" |
gce-compute-image-packages google-compute-engine-oslogin python-google-compute-engine |
Ubuntu 16.04+ | apt list --installed \ | grep "google-compute\|gce-compute-image-packages" |
gce-compute-image-packages google-compute-engine-oslogin python-google-compute-engine python3-google-compute-engine |
SUSE(SLES)12+ | zypper se -i | grep package \ | grep "google-compute-engine\|gce\|ClientConfigGCE" |
cloud-regionsrv-client-plugin-gce google-compute-engine-init python-gcemetadata regionServiceClientConfigGCE |
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 |
次のステップ
- トラブルシューティングのヒントをお読みください。
- メタデータの適用について学習します。
- SSH 認証鍵について学習します。