なんらかの理由で 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 インスタンス] ページに移動します。
アクセスできない VM がまだ実行されている場合は、VM を停止します。
停止した VM の名前をクリックし、[
編集] をクリックします。[ブートディスク] で
[ブート ディスクを切断する] をクリックし、アクセス不能な VM から既存のブートディスクを解除します。次に、VM をレスキューするで、以前に作成・修正したディスクを接続します。
[ブートディスクを構成する] をクリックして、このページの- [ブートディスク] セクションで、[既存のディスク] タブをクリックします。
- プルダウン リストで、前のセクションで作成したディスク(
my-recovery-disk
など)を選択します。 - [選択]、[保存] の順にクリックします。
SSH を使用して VM に接続できるようになっているはずです。