アクセスできない 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 を作成する。信頼できるイメージ ポリシーによって、公開イメージからブートディスクを作成できない場合があります。その場合は、レスキュー VM を作成する前に、この制限を一時的に解除するよう管理者に依頼する必要があります。詳細については、イメージ アクセスの制限を設定するをご覧ください。
  4. 以前に作成したアクセスできない VM のブートディスクのスナップショットごとに、スナップショットから新しいディスクを作成し、次の手順でレスキュー VM にアタッチします。

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

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

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

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

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

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

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

  6. 次のコマンドを実行して、以前に VM にアタッチした各ディスクの名前を特定します。

    lsblk -d -o NAME,SERIAL

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

     NAME SERIAL
     sda  rescue-vm
     sdb  my-recovery-disk
     

    この例では、rescue-vm はレスキュー VM のブートディスクであり、my-recovery-disk はアクセスできない VM のスナップショットのブートディスクです。アクセスできない VM の NAME をメモして、次のステップで使用します。

  7. 以前に VM にアタッチしたディスクごとに、次の操作を行います。

    1. 次のコマンドを実行して、各パーティションのファイル システムを特定します。

      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 ファイル システムのパーティション名をメモします。

    2. /rescue にマウント ポイントを作成します。

      sudo mkdir /rescue
    3. Linux ファイル システム パーティションを /rescue にマウントします。

      sudo mount PARTITION_NAME /rescue
      

      PARTITION_NAME は、前にメモした Linux ファイル システムの名前に置き換えます。

    4. 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 を復元するには、次の操作を行います。

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

     cd ~
     sudo umount /rescue

  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 に接続できるようになっているはずです。