web-dev-qa-db-ja.com

ブートがgrubシェルに到達できない場合のGrub2のデバッグ

Uefi grub2の起動に問題があります。つまり、システムはLinuxはもちろん、grubコンソールにさえ到達できないということです。

代わりに、ブートプロセスを循環します。

同様のOSからuefiパーティションをコピーしてgrub.cfgを変更することで問題を「修正」することができましたが、この種の問題をデバッグする方法を知りたくありません。

コンソールに到達できない場合でも、grubのデバッグに関する情報を見たことがありません。また、grub.cfgファイル以外のファイルに何が入っているかについての情報も見つかりません。

どのファイルが存在するかを説明する多くの情報を見てきましたが、ファイルの内容がgrubのインストール間で異なるかどうかについては何もありません。

これを重大なデバッグ問題と見なす必要がありますか?それはuefiデバッグの問題ですか?

明確にするために、この質問は、一連の候補ソリューションを試行するのではなく、問題を分析するための診断方法論についてです。このサイトには豊富な情報があります。

3
rob

この質問は、それを修正するためにシステムを起動できない問題全体について尋ねます。コンソールに到達しないシステムをどのように修正するかという問題は常に同じです別のシステムを使用

これは、ハードディスクを別のマシンに接続することを意味する場合がありますが、お勧めしません。 1つ目は、ドライバーで保証を無効にすることですが、2つ目は機能しない場合があります。それは問題の根本的な原因を隠すかもしれません。

次に、同じハードウェアで別のOSを起動します。これは、Live CDまたはLive USBで実行できます。


どのディストリビューションを使用するかは重要ではありませんが、実際のOS(カーネル)とアーキテクチャーは少なくとも同じファミリーのものでなければなりません。例:LinuxシステムでBSDシステムを修正したり、x86システムでx86_64システムを修正したりしないでください。

ただし、通常どのディストリビューションを使用するかは問題ではありません。たとえば、Centosボックスを修正しようとしていて、Ubuntu USBがあれば問題ありません。

Linuxの場合、Ubuntuはインストールディスクを使用して[Ubuntuを試す]オプションを選択するだけなので、実際には適切な候補です。ほとんどのマシンには十分なドライバーが付属しています。ただし、他のオプションを使用できます。


Linuxから回復コンソールを取得する手順:

  1. ライブディスクを起動します
  2. まだ行っていない場合はrootに切り替えます(Sudo -i、またはsu -
  3. ルート/パーティションパーティションを見つけて/mntにマウントします。 blkidコマンドは、何をマウントするかを理解するのに役立ちます。例えば:

    blkid
    /dev/sda7: LABEL="Ubuntu_Boot" UUID="737d31ca-d399-4baa-a9e4-ec907b95f5ca" TYPE="ext4" PARTUUID="c3af19e0-e7d2-4867-b750-2b723208c535"
    /dev/sda2: UUID="F6C4-4D7F" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="8663827c-80b4-4653-9df8-7ff56eebe6e2"
    /dev/sda6: LABEL="Ubuntu_Boot" UUID="3f91876b-7b58-428d-9249-756a62f8f839" TYPE="ext4" PARTLABEL="Ubuntu_Boot" PARTUUID="2ae7eab6-e068-4bc8-a4a3-fbd386fc8099"
    
    mount /dev/sda7 /mnt
    
  4. システムの他のパーティションをマウントします。 /mnt/etc/fstabを読んで、これらの内容を思い出してください。また、UEFIを使用している場合は、EFIパーティションをマウントする必要があります。例えば:

    mount /dev/sda6 /mnt/boot
    mount /dev/sda2 /mnt/boot/efi
    
  5. カーネルが提供する共有でシステムをマウントしたパッチ:

    mount --bind /proc /mnt/proc
    mount --bind /sys /mnt/sys
    mount --bind /dev /mnt/dev
    mount --bind /tmp /mnt/tmp
    
  6. chrootを新しい環境に:

    chroot /mnt /bin/bash
    

このプロセスにより、インストールされているシステムに完全に基づいて動作するコンソールが表示されます。したがって、update-grubgrub-installなどのコマンドは通常どおり機能するはずです。もちろん、/etc/grub.dも編集できます。

1
Philip Couling

Linuxディストリビューションによって、GRUB2とUEFIの使用方法が異なります。Debian/ Ubuntuは、GRUB2をgrub.cfgの実際の構成ファイルにポイントするだけのEFIシステムパーティション(略してESP)内にミニ/bootを設定しているようですつまり、別のファイルシステム上にあります。 RedHatは実際のGRUB構成をESPに入れているようです。

実際のgrubx64.efiファイルはgrub-mkimageを使用して作成されるため、ディストリビューション間でも内容が異なる場合があります。以下が含まれます:

  • GRUBコアイメージ
  • 多数のGRUBモジュール:少なくとも、他のGRUBモジュールが格納されているファイルシステムにアクセスするために必要なモジュール(通常、Debianでは/boot/grub/x86_64-efi)) 、ただしUEFIシステムでは、すべてのモジュールをgrubx64.efiファイルに含めることができます。
  • 最初のGRUBルートファイルシステムとprefixに関する情報(つまり、GRUBはGRUBモジュールを探しますディレクトリおよび構成ファイル)。UEFIGRUBでは、これは通常/EFI/<name of distribution>であり、ESP GRUBがインストールされているディレクトリ)を参照します。
  • オプションで、埋め込まれたGRUB構成ファイル
  • オプションで、memdiskイメージファイル
  • オプションで、GRUBモジュールおよびその他のファイルの署名をチェックするための公開鍵/証明書ファイル(セキュアブート機能が利用できないシステムでセキュアブートのようなチェックを実装するため)

GRUB=のモジュール性は、MBRスタイルのブートを備えたPC上のOriginの結果であり、MBRとMBRの間の未使用スペースに収まるようにGRUBを必要としました最初のパーティションの始まり。パーティショニングによっては、そのスペースはかなり小さい場合があります。UEFIでは、サイズ制限はそれほど厳しくありませんが、必要に応じてモジュールメカニズムを引き続き使用できます。

セキュアブートは、GRUBが適切に署名されておらず、Windows PE32バイナリ形式を使用しているファイルから実行可能コードをロードすることを防ぎます。GRUBモジュールはUnixスタイルELFバイナリを使用します代わりにフォーマットします。したがって、セキュアブートを使用している場合は、必要なすべてのモジュールをメインのgrubx64.efiファイルにパックする必要があります。これにより、個別の実行可能モジュールをロードする必要がなくなります。Linuxカーネルには組み込みの効果的にPE32バイナリファイルにするEFIスタブ。適切に署名されていれば、この問題は発生しません。

セキュアブートシムブートローダーshimx64.efiはMicrosoftによって署名されているため、基本的にすべてのセキュアブート実装でデフォルトで受け入れられ、ロード時に、セキュアブート許可リストに1つまたは2つの公開鍵が追加されます。配布のキー、およびオプションでシステム所有者用に生成されたMOKキー。これにより、システムベンダーがセキュアディストリビューションの実装にLinuxディストリビューションの公開キーを含めず、ファームウェアにより、ユーザーがファームウェアベースの許可されたセキュアブートキーのリストを編集できない場合でも、Linuxおよびカスタマイズされたカーネルを使用できます。 。

(シムは完全に署名されていないバイナリの実行を受け入れてはなりません。その場合、シムは「セキュアブートの迂回装置」となり、Microsoftおよびその他のセキュアブート署名者は署名を拒否する必要があります。)

一部のセキュアブートシステムは、有効なセキュアブートシグネチャを持たないブートローダーを使用しようとすると、ブートプロセスを停止して警告メッセージを表示します。他のユーザーは無効なブートローダーを無視して次のブートオプションに進みます。システムでセキュアブートが有効になっていて、他に有効なブートソースがない場合、これが表示されている循環の原因である可能性があります。GRUBのバージョンをロードしようとしている可能性がありますセキュアブートが無効になっているUEFIの場合。

使用しているLinuxディストリビューションの名前とバージョン、およびシステムまたはマザーボードのメーカーとモデルがわからなければ、これ以上詳細な答えを出すのは困難です。

0
telcoM