このドキュメントでは、割り当てエラー、ブートディスク、起動スクリプトが原因で VM の起動時に発生する問題のトラブルシューティングについて説明します。
割り当てのエラー
インスタンスを起動しようとしたときに割り当てエラーが発生する場合は、追加の CPU 割り当てをリクエストする必要があります。詳細については、リソースの割り当てドキュメントの VM インスタンスのセクションをご覧ください。
ブートディスク
インスタンスが起動せず、インスタンスに接続できないかインタラクティブ シリアル コンソールからログインできない場合、ブートディスクの起動プロセスが完了しない理由を確認します。
ブートディスクが起動しない理由を特定する
ブートディスクに空き容量があることを確認する。
ブートディスクの空き容量がまったくなく、オペレーティング システムで自動サイズ変更がサポートされていない場合は、インスタンスに接続できません。新しいインスタンスを作成し、ブートディスクを再作成する必要があります。詳細については、VM または完全なブートディスクの復元をご覧ください。
仮想マシン インスタンスのシリアルポート出力を確認する。
インスタンスの BIOS、ブートローダー、カーネルは、インスタンスのシリアルポート出力にデバッグ メッセージを出力します。そこには、インスタンスで発生したエラーや問題に関する貴重な情報が含まれています。Cloud Logging へのシリアルポート出力ロギングを有効にすると、インスタンスが実行されていない場合でも、この情報にアクセスできます。
シリアル コンソールへのインタラクティブ アクセスを有効にする。
インスタンスのシリアル コンソールへのインタラクティブ アクセスを有効にすると、インスタンスが完全に起動しなくても、インスタンスにログインして起動の問題をデバッグできます。詳細については、シリアル コンソールとのやり取りをご覧ください。
ディスクに有効なファイル システムがあることを確認する。
ファイル システムが破損しているなど、有効でない場合は、インスタンスを起動することはできません。ディスクのファイル システムを確認します。
問題のディスクを接続先のインスタンスから接続解除します(該当する場合)。
gcloud compute instances delete old-instance --keep-disks boot
Google が提供する最新のイメージを使用して新しいインスタンスを作成します。
gcloud compute instances create debug-instance
問題のディスクを非ブートディスクとしてアタッチします。マウントはしないでください。次の例の
DISK
を問題のディスクの名前に置き換えます。インスタンス上のディスクを識別するデバイス名をメモします。gcloud compute instances attach-disk debug-instance \ --disk DISK \ --device-name debug-disk
インスタンスに接続します。
gcloud compute ssh debug-instance
ディスクのルート パーティションを見つけます。
part1
と記載されているのがルート パーティションです。この例では、ディスクのルート パーティションは/dev/sdb1
にあります。ls -l /dev/disk/by-id total 0 lrwxrwxrwx 1 root root 9 Jan 22 17:09 google-debug-disk -> ../../sdb lrwxrwxrwx 1 root root 10 Jan 22 17:09 google-debug-disk-part1 -> ../../sdb1 lrwxrwxrwx 1 root root 9 Jan 22 17:02 google-persistent-disk-0 -> ../../sda lrwxrwxrwx 1 root root 10 Jan 22 17:02 google-persistent-disk-0-part1 -> ../../sda1 lrwxrwxrwx 1 root root 9 Jan 22 17:09 scsi-0Google_PersistentDisk_debug-disk -> ../../sdb lrwxrwxrwx 1 root root 10 Jan 22 17:09 scsi-0Google_PersistentDisk_debug-disk-part1 -> ../../sdb1 lrwxrwxrwx 1 root root 9 Jan 22 17:02 scsi-0Google_PersistentDisk_persistent-disk-0 -> ../../sda lrwxrwxrwx 1 root root 10 Jan 22 17:02 scsi-0Google_PersistentDisk_persistent-disk-0-part1 -> ../../sda1
ルート パーティションでファイル システム チェックを実行します。
sudo fsck /dev/sdb1 fsck from util-linux 2.20.1 e2fsck 1.42.5 (29-Jul-2012) /dev/sdb1: clean, 19829/655360 files, 208111/2621184 blocks
ファイル システムをマウントします。
sudo mkdir /mydisk
sudo mount /dev/sdb1 /mydisk
ディスクにカーネル ファイルがあることを確認します。
ls /mydisk/boot/vmlinuz-* /mydisk/boot/vmlinuz-3.2.0-4-amd64
ディスクに有効なマスター ブートレコード(MBR)があることを確認する。
永続ブートディスクがアタッチされたデバッグ インスタンス(
/dev/sdb
など)で次のコマンドを実行します。sudo parted /dev/sdb print
MBR が有効であれば、ファイル システムに関する情報が表示されます。
Disk /dev/sdb: 10.7GB Sector size (logical/physical): 512B/4096B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 2097kB 10.7GB 10.7GB primary ext4 boot
起動に関する問題を解決する
起動処理が失敗する場所を特定したら、次のいずれかのアクションを実行して問題を修正できます。
インポートしたイメージを使用して、スタンドアロン ブートディスクを作成する
最初からやり直して再度ブートディスク イメージをインポートする
スタンドアロン ブートディスクの作成
インポートしたイメージを、一時 VM インスタンスにアタッチされているセカンダリ ディスクにマウントします。コンソールまたは gcloud CLI を使用して、アップロードしたイメージからスタンドアロン ディスクを作成し、スタンドアロン ディスクがアタッチされた一時 VM を作成します。このインスタンスを使用することで、スタンドアロン ディスクのファイルの変更や、イメージの起動の失敗に関する問題を解決できます。
Console
インポートしたブートディスク イメージからスタンドアロン ディスクを作成します。あるいは、ブートディスクをインスタンスから接続解除し、接続解除したブートディスクを代わりに使用してインスタンスを作成することもできます。
- コンソールで、[ディスク] ページに移動します。
- [ディスクを作成] をクリックします。
- [ディスクの作成] ページで、次の属性を指定します。
-
ゾーン:
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.
-
ゾーン:
- ディスクを作成するには、[作成] をクリックします。
スタンドアロン ディスクを接続する一時インスタンスを作成し、コンソール環境で機能するようにブートローダーを構成します。
Google Cloud コンソールで、[VM インスタンス] ページに移動します。
[インスタンスを作成] ボタンをクリックします。
[インスタンスの作成] ページで、インスタンスの名前と、インスタンスを配置するゾーンを指定します。このゾーンは、スタンドアロン ディスクを作成したのと同じゾーンである必要があります。
[管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] セクションを展開します。
[ディスク] タブの [追加ディスク] セクションで、[既存のディスクを接続] をクリックします。新しいセクションが表示されます。
[ディスク] セクションで、作成したスタンドアロン ディスクをプルダウン リストから選択します。これによりスタンドアロン ディスクがインスタンスに接続されるため、ディスクをマウントしてディスクのコンテンツを後で変更できるようになります。
[完了] をクリックしてディスクの接続を完了します。
[作成] ボタンをクリックしてインスタンスを作成します。
gcloud
インポートしたブートディスク イメージからスタンドアロン ディスクを作成します。あるいは、ブートディスクをインスタンスから接続解除し、接続解除したブートディスクを代わりに使用してインスタンスを作成することもできます。
gcloud compute disks create DISK_NAME \ --zone=ZONE \ --image=IMAGE_NAME
次のように置き換えます。
DISK_NAME
: 新しいスタンドアロン ディスクの名前。
: 近辺のゾーン。一時インスタンスを作成するときも、これを同じゾーンを使用する必要があります。ZONE
IMAGE_NAME
: インポートしたブートディスク イメージの名前。
スタンドアロン ディスクを接続する一時インスタンスを作成し、コンソール環境で機能するようにブートローダーを構成します。
gcloud compute instances create INSTANCE_NAME \ --zone=ZONE \ --disk name=DISK_NAME
以下を置き換えます。
INSTANCE_NAME
: インスタンスの一意の名前ZONE
: スタンドアロン ディスクを作成したゾーンDISK_NAME
: インポートしたブートディスク イメージから作成したスタンドアロン ディスクの名前
アタッチしたスタンドアロン ディスクを使用してインスタンスを作成すると、仮想環境が作成されます。この環境で、元のブートディスク イメージからブートローダーを変更できます。
ブートディスクの構成
インスタンスに接続し、スタンドアロン ディスクをマウントして、Compute Engine で正常に起動するようにブートローダーを構成します。
- ブラウザ内 SSH または
gcloud compute ssh
コマンドを使用して、一時インスタンスに接続します。 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
スタンドアロン ディスクのルート パーティションを
/tmp
ディレクトリにマウントします。この例では、/dev/sdb1
がルート パーティションであり、他のパーティションについては変更する必要はありません。パーティション スキームによっては、複数のパーティションをマウントしなければ、変更する必要のあるすべてのファイルにアクセスできない場合もあります。sudo mount /dev/sdb1 /tmp
ディスクの起動プロセスが失敗する原因となっている可能性のあるファイルを編集します。詳細については、ブートローダーの構成手順をご覧ください。
一時インスタンスからブートディスクのマウントを解除します。
sudo umount /tmp
ブートディスクの使用
このディスクの構成が完了したら、ディスクを切断して、新しいインスタンスのブートディスクとして使用します。
Console
一時インスタンスからスタンドアロン ディスクを切断します。
Google Cloud Console で、[VM インスタンス] ページに移動します。
インスタンスのリストから、スタンドアロン ブートディスクを変更した一時インスタンスの名前をクリックします。インスタンスの詳細ページが開きます。
インスタンス詳細ページの一番上で [編集] をクリックします。
[追加ディスク] で、スタンドアロン ディスクの横にある [X] をクリックして、一時インスタンスからの切断を指定します。
[保存] をクリックして、変更を保存します。
切断したスタンドアロン ディスクを使用してインスタンスを作成します。
Google Cloud Console で、[VM インスタンス] ページに移動します。
[インスタンスを作成] ボタンをクリックします。
[インスタンスの作成] ページで、インスタンスの名前と、インスタンスを配置するゾーンを指定します。このゾーンは、スタンドアロン ディスクを作成したのと同じゾーンである必要があります。
[ブートディスク] で [変更] をクリックし、ブートディスクの構成を開始します。
[既存のディスク] タブで、スタンドアロン ブートディスクを選択し、新しいインスタンスのブートディスクとして使用します。
[作成] ボタンをクリックしてインスタンスを作成します。
gcloud
一時インスタンスからスタンドアロン ディスクを切断します。
gcloud compute instances detach-disk INSTANCE_NAME \ --disk name=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
: インポートしたブートディスク イメージから作成したスタンドアロン ディスクの名前
変更したブートディスクを使用して、作成したインスタンスをテストします。インスタンスに接続できない状態のままである場合は、シリアル コンソールの出力を読み、起動プロセスが失敗した場所をもう一度確認します。ブートディスク イメージの問題が修正されるまで、トラブルシューティングの処理を繰り返します。
起動スクリプト
起動スクリプトの問題は、メタデータ サーバーとのネットワーク接続に関連している可能性があります。
Linux VM の場合、Compute Engine は、メタデータ サーバーとの接続を確認してから、メタデータ サーバーからカスタム起動スクリプトやシャットダウン スクリプトなどの情報を取得します。メタデータ サーバーが応答していないか、ネットワークが構成されていない場合、VM は起動を完了しません。
v20160606 より前のイメージを使用する Linux VM の場合、シリアルポート出力に
"Waiting for metadata server, attempt N"
が表示されます。N
は試行回数を表します。この問題は、一時的なネットワークの問題によって最大 7 分間続く場合がありますが、自動的に解決されます。7 分経っても問題が自動的に解決されない場合は、VM インスタンスを再作成してください。