GRUB の復旧への Linux 仮想マシンの起動

適用対象: ✔️ Linux VM

Note

この記事で参照されている CentOS は Linux ディストリビューションであり、EOL (End Of Life) に到達します。 適宜、使用と計画を検討してください。 詳細については、「 CentOS End Of Life ガイダンスを参照してください。

この記事では、GRUB の救助の問題を引き起こす複数の条件について説明し、トラブルシューティングのガイダンスを提供します。

ブート プロセス中に、ブート ローダーは Linux カーネルを見つけ、ブート コントロールを引き渡そうとします。 このハンドオフを実行できない場合、仮想マシン (VM) は GRUB の復旧コンソールに入ります。 GRUB の復旧コンソール プロンプトは Azure シリアル コンソール ログには表示されませんが、 Azure ブート診断のスクリーンショットに表示できます。

GRUB の救助の問題を特定する

Azure portal の VM ブート診断 ページでブート診断のスクリーンショットを表示します。 このスクリーンショットは、GRUB の復旧に関する問題を診断し、ブート エラーによって問題が発生したかどうかを判断するのに役立ちます。

次のテキストは、GRUB の救助の問題の例です。

error: file '/boot/grub2/i386-pc/normal.mod' not found.  
Entering rescue mode...  
grub rescue>

GRUB の復旧に関する問題をオフラインでトラブルシューティングする

  1. GRUB の復旧に関する問題のトラブルシューティングを行うには、復旧/修復 VM が必要です。 vm 修復コマンドを使用して影響を受ける VM の OS ディスクのコピーがアタッチされた修復 VM を作成します。 chrootを使用して、修復 VM に OS ファイル システムのコピーをマウントします。

    Note

    または、Azure portalを使用して手動で復旧 VM を作成することもできます。 詳細については、「Azure portal で OS ディスクを復旧 VM に接続して Linux VM のトラブルシューティングを行う」を参照してください。

  2. GRUB の救助の問題を特定。 次のいずれかの GRUB 復旧の問題が発生した場合は、対応するセクションに移動して解決します。

  3. GRUB の復旧に関する問題が解決されたら、次の操作を実行します。

    1. 復旧/修復 VM からファイル システムのコピーのマウントを解除します。

    2. az vm repair restore コマンドを実行して、修復された OS ディスクを VM の元の OS ディスクにスワップします。 詳細については、「 Azure 仮想マシンの修復コマンドを使用して Linux VM を修復するの手順 5 を参照してください。

    3. AZURE シリアル コンソールを確認するか、VM に接続して VM を起動できるかを確認します。

  4. /boot パーティション全体またはその他の重要な内容が見つからないので復旧できない場合は、バックアップから VM を復元することをお勧めします。 詳細については、「 Azure portal で Azure VM データを復元する方法を参照してください。

詳細なエラー、考えられる原因、および解決策については、次のセクションを参照してください。

Note

以降のセクションで説明するコマンドで、 /dev/sdX を対応するオペレーティング システム (OS) ディスク デバイスに置き換えます。

エラー: 不明なファイルシステム

次のスクリーンショットは、エラー メッセージを示しています。

grub 不明なファイル システム エラーのスクリーンショット。

このエラーは、次のいずれかの問題に関連付けられている可能性があります。

/boot ファイル システムの破損を修正する

  1. 復旧/修復 VM が作成されたかどうかを確認します。 作成されていない場合は、 GRUB の復旧に関する問題をオフラインでトラブルシューティング の手順 1 に従って VM を作成します。

  2. 対応する /boot パーティションの破損の問題を解決するには、「 Azure Linux でのファイル システムの破損エラー を解決する」を参照してください。

  3. の手順 3 に進み、GRUB の復旧に関する問題をオフラインでトラブルシューティング OS ディスクを交換します。

GRUB を再インストールし、GRUB 構成ファイルを再生成する

  1. 復旧/修復 VM が作成されたかどうかを確認します。 作成されていない場合は、 GRUB の復旧に関する問題をオフラインでトラブルシューティング の手順 1 に従って VM を作成します。 必要なすべてのファイル システム (復旧/修復 VM での /boot を含む) をマウントし、 chroot 環境に入ります。

  2. 次のいずれかのコマンドを使用して、GRUB を再インストールし、対応する GRUB 構成ファイルを再生成します。

    • UEFI を使用しない RHEL/CentOS/Oracle 7.x/8.x Linux VM (BIOS ベース - Gen1)

      grub2-install /dev/sdX
      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
    • RHEL/CentOS/Oracle 7.x/8.x Linux VM with UEFI (Gen2)

      yum reinstall grub2-efi-x64 shim-x64
      grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/efi/EFI/redhat/grub.cfg
      

      VM が CentOS を実行している場合は、redhatgrub.cfg ファイルの絶対パス /boot/efi/EFI/centos/grub.cfg 内のcentosに置き換えます。

    • SLES 12/15 Gen1 と Gen2

      grub2-install /dev/sdX
      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
    • Ubuntu 18.04/20.04

      grub-install /dev/sdX
      update-grub
      
  3. の手順 3 に進み、GRUB の復旧に関する問題をオフラインでトラブルシューティング OS ディスクを交換します。

エラー 15: ファイルが見つかりません

次のスクリーンショットは、エラー メッセージを示しています。

grub エラー 15 ファイルが見つからないスクリーンショット。

この問題を解決するには、次の手順に従ってください。

  1. 復旧/修復 VM が作成されたかどうかを確認します。 作成されていない場合は、 GRUB の復旧に関する問題をオフラインでトラブルシューティング の手順 1 に従って VM を作成します。 復旧/修復 VM に必要なすべてのファイル システム (/、 /boot を含む) をマウントし、 chroot 環境に入ります。

  2. /boot ファイル システムの内容を調べて、不足しているものを特定します。

  3. GRUB 構成ファイルがない場合は、GRUB インストールし、GRUB 構成ファイルを再生成します

  4. /boot ファイル システムのファイルのアクセス許可が OK であることを確認します。 同じ Linux バージョンを実行している別の VM を使用して、アクセス許可を比較できます。

  5. /boot パーティション全体またはその他の重要な内容が見つからないので復旧できない場合は、バックアップから VM を復元することをお勧めします。 詳細については、「 Azure portal で Azure VM データを復元する方法を参照してください。

  6. 問題が解決したら、「 GRUB の復旧に関する問題をオフラインでトラブルシューティングする」の手順 3 に進み OS ディスクを交換します。

エラー: ファイル '/boot/grub2/i386-pc/normal.mod' が見つかりません

次のスクリーンショットは、エラー メッセージを示しています。

grub エラー normal.mod が見つからないスクリーンショット。

  1. 復旧/修復 VM が作成されたかどうかを確認します。 作成されていない場合は、「 GRUB の復旧に関する問題をオフラインでトラブルシューティングする の手順 1 に従って作成します。 必要なすべてのファイル システム (復旧/修復 VM での /boot を含む) をマウントし、 chroot 環境に入ります。

  2. 破損エラーが原因で /boot ファイル システムをマウントできない場合は、/boot ファイル システムの破損 修正

  3. chroot 内にある場合は、 /boot/grub2/i386-pc ディレクトリ内の内容を確認します。 コンテンツが見つからない場合は、 /usr/lib/grub/i386-pc から内容をコピーします。 これを行うには、以下のコマンドを使用します。

    ls -l /boot/grub2/i386-pc
    cp -rp /usr/lib/grub/i386-pc /boot/grub2
    
  4. /boot パーティションの内容が空の場合は、次のコマンドを使用して再作成します。

    Note

    次の手順は、UEFI を使用しない RHEL/CentOS/Oracle 7.x/8.x Linux VM (BIOS ベース - Gen1) に適用されます。

    1. chroot プロセスの下で、grub を再インストールします。 それに応じて /dev/sd[X] 修復/復旧 VM に接続されている OS ディスクの対応するコピーに置き換えます。

      grub2-install /dev/sd[X]
      
    2. リポジトリの名前を解決するために、 /etc/resolv.conf に有効な DNS エントリがあることを確認します。

      cat /etc/resolv.conf
      
    3. カーネルを再インストールします。

      yum reinstall $(rpm -qa | grep -i kernel)
      
    4. grub.cfg ファイルを作成します。

      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
  5. で手順 3 に進み、GRUB の復旧に関する問題をオフラインでトラブルシューティング OS ディスクを交換します。

エラー: そのようなパーティションはありません

次のスクリーンショットは、エラー メッセージを示しています。

このようなパーティションがない grub エラーのスクリーンショット。

このエラーは、次のいずれかのシナリオで RHEL ベースの VM (Red Hat、Oracle Linux、CentOS) で発生します。

  • /boot パーティションは誤って削除されます。
  • /boot パーティションは、間違った開始セクターと終了セクターを使用して再作成されます。

解決策: /boot パーティションを再作成する

/boot パーティションが見つからない場合は、次の手順に従って再作成します。

  1. 復旧/修復 VM が作成されたかどうかを確認します。 作成されていない場合は、 GRUB の復旧に関する問題をオフラインでトラブルシューティング の手順 1 に従って VM を作成します。

  2. 次のコマンドを使用して、パーティション テーブルが dos または GPT 型として作成されているかどうかを確認します。

    sudo fdisk -l /dev/sdX
    
    • Dos パーティション テーブル

      dos 型のパーティション テーブルを使用したブートを示すスクリーンショット。

    • GPT パーティション テーブル

      GPT 型パーティション テーブルでのブートを示すスクリーンショット。

  3. パーティション テーブルにパーティション テーブルの種類としてdosがある場合は、dos システムで /boot パーティションを作成。 パーティション テーブルの種類としてパーティション テーブルに GPT がある場合は、GPT システムで /boot パーティションを作成

  4. 適切なディスクを使用して GRUB ブート ローダーがインストールされていることを確認します。 「 GRUB のインストールと GRUB 構成ファイルの再生成 の手順に従って、GRUB をインストールおよび構成できます。

  5. で手順 3 に進み、GRUB の復旧に関する問題をオフラインでトラブルシューティング OS ディスクを交換します。

dos システムで /boot パーティションを再作成する

  1. 次のコマンドを使用して、/boot パーティションを再作成します。

    sudo fdisk /dev/sdX
    

    First および Last セクター、およびパーティションの種類 (83) の既定値を使用します。 次の出力に示すように、fdisk ツールの a オプションを使用して、/boot パーティション テーブルが起動可能としてマークされていることを確認します。

    sudo fdisk /dev/sdc
    
    The device presents a logical sector size that is smaller than
    the physical sector size. Aligning to a physical sector (or optimal
    I/O) size boundary is recommended, or performance may be impacted.
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): p
    Partition number (1,3,4, default 1): 1
    First sector (2048-134217727, default 2048):
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-2099199, default 2099199):
    Using default value 2099199
    Partition 1 of type Linux and of size 1 GiB is set
    
    Command (m for help): t
    Partition number (1,2, default 2): 1
    Hex code (type L to list all codes): 83
    Changed type of partition 'Linux' to 'Linux'
    
    Command (m for help): a
    Partition number (1,2, default 2): 1
    
    Command (m for help): p
    
    Disk /dev/sdc: 68.7 GB, 68719476736 bytes, 134217728 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disk label type: dos
    Disk identifier: 0x000b7179
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1   *        2048     2099199     1048576   83  Linux
    /dev/sdc2         2099200   134217727    66059264   8e  Linux LVM
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
  2. 不足している /boot パーティションを再作成した後、/boot ファイル システムが検出されたかどうかを確認します。 /dev/sdX1 (不足している /boot パーティション) のエントリが表示されるはずです。

    sudo blkid /dev/sdX1
    
    sudo blkid /dev/sdc1
    /dev/sdc1: UUID="<UUID>" TYPE="ext4"
    
  3. パーティションを再作成した後、/boot ファイル システムが blkid に表示されない場合は、/boot データが存在しなくなったことを意味します。 /boot ファイル システムを再作成し ( /etc/fstab /boot エントリにあるのと同じ UUID 形式とファイル システム形式を使用して)、その内容をバックアップから 再保存する必要があります

GPT システムで /boot パーティションを再作成する

  1. 次のコマンドを使用して、/boot パーティションを再作成します。

    sudo gdisk /dev/sdX
    

    次の出力に示すように、 First および Last セクター、および パーティションの種類 (8300) の既定値を使用します。

    sudo gdisk /dev/sdc
    GPT fdisk (gdisk) version 1.0.3
    
    Partition table scan:
      MBR: protective
      BSD: not present
      APM: not present
      GPT: present
    
    Found valid GPT with protective MBR; using GPT.
    
    Command (? for help): n
    Partition number (1-128, default 1): 1
    First sector (34-134217694, default = 1026048) or {+-}size{KMGTP}:
    Last sector (1026048-2050047, default = 2050047) or {+-}size{KMGTP}:
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300):
    Changed type of partition to 'Linux filesystem'
    
    Command (? for help): p
    Disk /dev/sdc: 134217728 sectors, 64.0 GiB
    Model: Virtual Disk
    Sector size (logical/physical): 512/4096 bytes
    Disk identifier (GUID): 6D915856-445A-4513-97E4-C55F2E1AD6C0
    Partition table holds up to 128 entries
    Main partition table begins at sector 2 and ends at sector 33
    First usable sector is 34, last usable sector is 134217694
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 6076 sectors (3.0 MiB)
    
    Number  Start (sector)    End (sector)  Size       Code  Name
       1         1026048         2050047   500.0 MiB   8300  Linux filesystem
       2         2050048       134215679   63.0 GiB    8E00
      14            2048           10239   4.0 MiB     EF02
      15           10240         1024000   495.0 MiB   EF00  EFI System Partition
    
    Command (? for help): w
    
    Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
    PARTITIONS!!
    
    Do you want to proceed? (Y/N): Y
    OK; writing new GUID partition table (GPT) to /dev/sdc.
    Warning: The kernel is still using the old partition table.
    The new table will be used at the next reboot or after you
    run partprobe(8) or kpartx(8)
    The operation has completed successfully.
    
  2. 次のコマンドを使用して、/boot ファイル システムがシステムによって検出されているかどうかを確認します。

    sudo blkid /dev/sdX1
    

    /dev/sdX1 (不足している /boot パーティション) のエントリが表示されるはずです。

    sudo blkid /dev/sdc1
    /dev/sdc1: UUID="<UUID>" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="<PARTUUID>"
    
  3. パーティションを再作成した後に /boot ファイル システムが表示されない場合は、/boot データが存在しなくなったことを意味します。 /boot ファイル システムを再作成し ( /etc/fstab と同じ UUID を使用して /boot エントリを使用して)、その内容をバックアップから 再ストアする必要があります

エラー: シンボル 'grub_efi_get_secure_boot' が見つかりません

次のスクリーンショットは、エラー メッセージを示しています。

grub エラー 'grub_efi_get_secure_boot' が見つからないスクリーンショット。

Linux カーネル バージョン 4.12.14 (SLES 12 SP5 で使用) では、 セキュア ブート オプションはサポートされていません。 そのため、VM のデプロイ中にセキュア ブートが有効になっている場合 (つまり、 Security type フィールドが Trusted launch virtual machines に設定されている場合、Gen2 VM イメージでこの SUSE カーネル バージョンを使用して起動しようとすると、仮想マシンはコンソールからセキュア ブート エラーを生成します。

解決策

ブート エラーを解決するには、次の手順に従います。

  1. 復旧/修復 VM が作成されたかどうかを確認します。 作成されていない場合は、 GRUB の復旧に関する問題をオフラインでトラブルシューティング の手順 1 に従って VM を作成します。 必要なすべてのファイル システム (/、/boot など) をマウントし、 chroot 環境に入ります。

  2. chroot 環境で次の YaST コマンドを実行します。

    yast2 bootloader
    
  3. Enable Secure Boot Support オプションから "x" をクリアし、F10 を選択して変更を保存します。

    SUSE コンソールの YaST2 ブート ローダー設定のスクリーンショット。

  4. GRUB の復旧に関する問題をオフラインでトラブルシューティングの手順 3 に従って、OS ディスクを交換します。

その他の GRUB の復旧エラー

次のスクリーンショットは、エラー メッセージを示しています。

別の grub の救助に関する問題のスクリーンショット。

この種のエラーは、次のいずれかのシナリオでトリガーされます。

  • GRUB 構成ファイルがありません。
  • 間違った GRUB 構成が使用されています。
  • /boot パーティションまたはその内容がありません。

このエラーを解決するには、次の手順に従います。

  1. 復旧/修復 VM が作成されたかどうかを確認します。 作成されていない場合は、 GRUB の復旧に関する問題をオフラインでトラブルシューティング の手順 1 に従って VM を作成します。 必要なすべてのファイル システム (/、/boot など) をマウントし、 chroot 環境に入ります。

  2. /etc/default/grub 構成ファイルが構成されていることを確認します。 保証された Azure Linux イメージには、必要な構成が既に用意されています。 詳細については、次の記事をご覧ください。

  3. GRUB を再インストールし、GRUB 構成ファイルを再生成します

    Note

    不足しているファイルが /boot/grub/menu.lst の場合、このエラーは古い OS バージョン (RHEL 6.x、Centos 6.x、Ubuntu 14.04) に対して発生します。 代わりに GRUB バージョン 1 がこれらのシステムで使用されるため、コマンドは異なります。 GRUB バージョン 1 については、この記事では説明しません。

  4. /boot パーティション全体が見つからない場合は、「 Error: そのようなパーティションがない」の手順に従います。

  5. 問題が解決したら、「 GRUB の復旧に関する問題をオフラインでトラブルシューティングする」の手順 3 に進み OS ディスクを交換します。

次のステップ

特定のブート エラーが GRUB の復旧の問題でない場合は、 Azure Linux 仮想マシンのブート エラーをトラブルシューティングする方法 を参照してください。

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。

サード パーティの連絡先に関する免責事項

Microsoft では、このトピックに関する追加情報を検索するのに役立つサード パーティの連絡先情報を提供しています。 この連絡先情報は、予告なしに変更される可能性があります。 Microsoft では、サード パーティの連絡先情報が正確であることを保証していません。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。