アクセスできない VM の問題を解決する


なんらかの理由で Linux VM にアクセスできない場合は、次の手順で VM のレスキューを試みることができます。

必要なロール

VM をレスキューするために必要な権限を取得するには、プロジェクトに対する次の IAM ロールの付与を管理者に依頼してください。

ロールの付与の詳細については、アクセス権の管理をご覧ください。

これらの事前定義ロールには、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 を作成する必要があります。

  1. (省略可)アクセスできない VM を停止します。
  2. アクセスできない VM のブートディスクからスナップショットを作成します。
  3. アクセスできない VM の OS に最も近い公開イメージを使用して一時 VM を作成する
  4. SSH を使用して一時 VM に接続できるかどうかを確認します。
  5. 次の手順で、一時 VM にディスクを追加します。

    1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

      [VM インスタンス] に移動

    2. 作成した一時 VM の名前をクリックします。

    3. [ 編集] をクリックします。

    4. [追加ディスク] で [新しいディスクを追加] をクリックし、次の操作を行います。

      1. ディスク名を追加する(my-recovery-disk など)
      2. [ソースの種類] で [スナップショット] を選択します。
      3. [ソース スナップショット] プルダウン メニューで、前の手順で作成したソース VM のスナップショットを選択します。
      4. [完了] をクリックします。
    5. [保存] をクリックします。

  6. SSH を使用して一時 VM に接続します。

  7. 次のコマンドを実行します。

    ls -l /dev/disk/by-id/google-*

    出力は次のようになります。

      /dev/disk/by-id/google-my-vm -> ../../sda
      /dev/disk/by-id/google-my-vm-part1 -> ../../sda1
      /dev/disk/by-id/google-my-vm-part14 -> ../../sda14
      /dev/disk/by-id/google-my-vm-part15 -> ../../sda15
      /dev/disk/by-id/google-my-recovery-disk -> ../../sdb
      /dev/disk/by-id/google-my-recovery-disk-part1 -> ../../sdb1
      /dev/disk/by-id/google-my-recovery-disk-part2 -> ../../sdb2
      /dev/disk/by-id/google-my-recovery-disk-part5 -> ../../sdb5
    

    シンボリック リンク(/dev/disk/by-id/google-my-recovery-disk-partN)を使用して、新しく追加されたディスクの基盤となるデバイスとパーティションを見つけます(例: /dev/sdb1)。

    ディスクのシンボリック リンクが Google DISK_NAME であるか、ディスクにカスタム デバイス名をした場合、Google DEVICE_NAME である。新しいディスクのシンボリック リンクが指すデバイス名をメモします。

  8. /mnt/newdisk にマウント ポイントを作成します。

    sudo mkdir /mnt/newdisk

  9. 追加のディスク パーティションをマウント ポイント /mnt/newdisk にマウントします。

     sudo mount -o discard,defaults DISK_NAME /mnt/newdisk

    DISK_NAME は、これらの手順で前にメモしたデバイス名(/dev/sdb1 など)で置き換えます。

    Filesystem has duplicate UUID XXXXXX - can't mountmount: /mnt/newdisk: wrong fs type, bad option、または bad superblock on /dev/sdb というエラーが表示された場合は、次のコマンドを使用します。

     sudo mount -o nouuid DISK_NAME /mnt/newdisk

    アクセスできない VM のファイル システムが /mnt/newdisk にマウントされました。ファイル システムの移動、構成ファイルの変更、問題の修正、データの取得などを行うことができます。

変更を元に戻し、アクセスできない VM を再び起動する

問題を解決するかデータを取得したら、実際の VM を元に戻す必要があります。元の VM を復元するには、次の操作を行います。

  1. 一時 VM の /mnt/newdisk にマウントされている追加ディスクのマウントを解除します。

     cd ~
     sudo umount /mnt/newdisk

  2. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

    1. 作成した一時 VM を選択します。

    2. [編集] をクリックします。

    3. [追加ディスク] で、前の手順で作成したディスクの をクリックし、一時 VM から追加ディスクを切断します。

    4. [保存] をクリックします。

  3. Google Cloud コンソールの [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

    1. アクセスできない VM がまだ実行されている場合は、VM を停止します。

    2. 停止した VM の名前をクリックし、[編集] をクリックします。

    3. [ブートディスク] で [ブートディスクを切断する] をクリックし、アクセス不能な VM から既存のブートディスクを解除します。

    4. 次に、 [ブートディスクを構成する] をクリックして、このページの VM をレスキューするで、以前に作成・修正したディスクをアタッチします。

      1. [ブートディスク] セクションで、[既存のディスク] タブをクリックします。
      2. プルダウン リストで、前のセクションで作成したディスク(my-recovery-disk など)を選択します。
      3. [選択]、[保存] の順にクリックします。
    5. VM を起動します

  4. SSH を使用して VM に接続できるようになっているはずです。