古いコンピュータからドライブを移動すると、コンピュータはGRUBプロンプトで起動します。

古いコンピュータからドライブを移動すると、コンピュータはGRUBプロンプトで起動します。

新しいシステムをインポートした後、NVMEドライブを既存のシステムから新しいシステムに移動し、両方のシステムがUEFIを使用して起動するように設定されました。 EFIの設定はシステムによって異なるため、問題が発生すると予想して準備しました。ライブUSBから起動し、インストールとルートを指定し、指示に従ってGRUBを再インストールしました(Webのどこでも利用可能で、以下の繰り返し)。再起動後にGRUBコマンドプロンプトが表示されますが、この問題を解決する方法がわかりません。何をしても、Linux UEFIブートオプション(下の表示)を選択すると、grubプロンプトが表示されます。 Windows UEFIブートオプション(デュアルブートシステム)を選択すると、正しくロードされます。

configfile (hd0,gpt6)/@/boot/grub/grub.cfgboot GRUBメニューを入力して常にGRUBプロンプトからLinuxインストールを起動できるので、問題なくすべてのエントリを起動できます(BTRFSをルートパーティションとして使用し、サブボリュームに/あります。@これはUbuntuインストールの標準です)。

現在の設定は次のとおりです。

# efibootmgr --verbose
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0001,0005,0000,0002
Boot0000* UEFI Samsung SSD 970 EVO Plus 1TB S6P7NF0T423021F 1   HD(1,GPT,37b6d616-6865-44b1-a382-9987345e2cfa,0x800,0x32000)/File(\EFI\Boot\BootX64.efi)N.....YM....R,Y.
Boot0001* Neon  HD(1,GPT,37b6d616-6865-44b1-a382-9987345e2cfa,0x800,0x32000)/File(\EFI\Neon\shimx64.efi)
Boot0002* UEFI HTTPs Boot       PciRoot(0x0)/Pci(0x1f,0x6)/MAC(000000000000,0)/IPv4(0.0.0.00.0.0.0,0,0)/Uri()N.....YM....R,Y.
Boot0005* Windows Boot Manager  HD(1,GPT,37b6d616-6865-44b1-a382-9987345e2cfa,0x800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}....................
# ll /boot/efi/EFI/
total 6
drwx------ 6 root root 1024 Jul 26 12:38 ./
drwx------ 4 root root 1024 Jan  1  1970 ../
drwx------ 2 root root 1024 Aug 28  2022 Boot/
drwx------ 5 root root 1024 Jul 26 12:38 Dell/
drwx------ 4 root root 1024 Aug 28  2022 Microsoft/
drwx------ 2 root root 1024 Jul 24 20:01 Neon/
# cat /boot/efi/EFI/Neon/grub.cfg 
search.fs_uuid 2886a665-f535-496e-a543-13c62983b0da root 
set prefix=($root)'/@/boot/grub'
configfile $prefix/grub.cfg
# ll /dev/disk/by-uuid/
total 0
drwxr-xr-x 2 root root 120 Jul 26 13:20 ./
drwxr-xr-x 9 root root 180 Jul 26 13:20 ../
lrwxrwxrwx 1 root root  15 Jul 26 13:20 2886a665-f535-496e-a543-13c62983b0da -> ../../nvme0n1p6
lrwxrwxrwx 1 root root  15 Jul 26 13:20 80D9-5688 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root  15 Jul 26 13:20 82926928-1ed1-4a76-b0e8-d62a0171c1ee -> ../../nvme0n1p5
lrwxrwxrwx 1 root root  15 Jul 26 13:20 D8D6FA10D6F9EF1E -> ../../nvme0n1p4
# lsblk -e 7 -o name,fstype,size,fsused,label,partlabel,mountpoint,uuid,partuuid
NAME        FSTYPE      SIZE FSUSED LABEL PARTLABEL                    MOUNTPOINT            UUID                                 PARTUUID
nvme0n1               931.5G                                                                                                      
├─nvme0n1p1 vfat        100M  58.8M       EFI system partition         /boot/efi             80D9-5688                            37b6d616-6865-44b1-a382-9987345e2cfa
├─nvme0n1p2              16M              Microsoft reserved partition                                                            fdc1478a-852d-4f33-8e22-24a2ea209726
├─nvme0n1p3 BitLocker  50.2G              Basic data partition                                                                    e8584ca9-db86-4bb1-abf7-424afe77bc94
├─nvme0n1p4 ntfs        517M                                                                 D8D6FA10D6F9EF1E                     5373ade9-ed41-4164-85e2-c28b7026c25f
├─nvme0n1p5 swap       30.5G                                           [SWAP]                82926928-1ed1-4a76-b0e8-d62a0171c1ee d5d866a5-97d4-49bb-a182-6eec3abcba18
└─nvme0n1p6 btrfs     850.2G 440.5G linux                              /var/lib/docker/btrfs 2886a665-f535-496e-a543-13c62983b0da cb45a183-14d3-4a95-b89f-6b5e315609cd

次の方法で再インストールできます。

  1. 問題のあるEFIブートエントリを削除します。efibootmgr -b 1 -B
  2. ディスクとEFIにブートローダを再インストールします。grub-install /dev/nvme0n1 --target x86_64-efi --efi-directory /boot/efi/ --bootloader-id Neon
  3. GRUB設定を更新します(必要かどうかはわかりませんが、ドキュメントに記載されています)。update-grub2

それ以降の設定は上記のようになり、GRUBは再起動時にメニューを自動的に起動しません。 EFI NVRAMダンプのUUIDはよくわかりませんが、見つかる場所に値が設定されておらず、エントリを削除して再生成すると再表示されます。

私が何を見逃しているのか知っていますか?

答え1

簡単に言うと:

Ubuntuの組み込みGRUBブートローダを使用している場合は、UEFIブートエントリ〜しなければならない名前をubuntu指定する必要があります(または少なくともGRUB EFI設定ファイルがありますEFI/ubuntu/grub.cfg

詳細:

問題は、UEFIのGRUB設定、セキュアブート(私の意見では)、およびUbuntuがそれらをすべて設定する方法にあります。既存のBIOS起動では、BIOSはすぐに他のものを起動する小さな(512バイトだと思います)実行可能ファイルを実行します。以前)または残りのブートローダがあるディスクでハードコードされたセクション(「2段階ブートローダ」)を見つけます。この設定には多くの問題があります。その中で最も重要なのは、ファイルの移動、ファイル圧縮などの高度なファイルシステムでは機能しないことです。高度なファイルシステムを/boot使用するには、GRUBステップ2のext2パーティションに別々のファイルシステムが必要です。

UEFIには、オペレーティングシステムが大規模ブートローダを展開できる(比較的)大きなFAT32パーティション(ESP)があり、UEFIファームウェアはブートローダ全体を一度にロードします。 Ubuntuがこの機能を使用する方法は、フルGRUBブートローダをgrubx64.efi。このGRUBインストールでは、構成ファイル全体を見つけることができる場所に関する指示を含むshimx64.efi小さな構成ファイルをEFIパーティションからロードする方法がわかります。grub.cfgフルGRUBブートローダをデフォルトで使用できるため、高度なファイルシステムを読み取ることができ、別のブートパーティションを必要としないBTRFSまたはZFSドライバがある可能性があります。

問題は、これらのファイルパス(grub.cfgファイルがロードされた後まで)がGRUB EFI実行可能ファイルにコンパイルされ、構成できないことです。これらの操作はすべて署名が必要なため、インストール中にこの構成を更新することはできません(設定を望まない限り)。コンピュータTPMの秘密鍵をコピーし、ブートローダの再コンパイルを開始します。したがって、Ubuntu GRUBのインストール(Ubuntu LTSベースのKDE Neonで使用されている)には、EFIブートローダディレクトリ(からロードされているgrub.cfg)が必要です。そのパスはファイルEFI/ubuntu/grub.cfgにコンパイルされ、設定ファイルがそうでない場合は他に何もできません。grubx64.efi存在 - 私のようにGRUBプロンプトが表示されます。

setGRUBプロンプトを実行すると、これを確認できます。出力は次のとおりです。

prefix=(hd0,gpt1)/EFI/ubuntu

これは、プレフィックス(GRUBがロードされたと思われる場所と他のすべてのファイルを見ることが期待される場所)がUbuntuが使用するようにハードコードされていることを意味します。

KDE Neon(私が使用している)をインストールすると、NeonインストーラはブートローダEFI/ubuntuインストールを作成します。フォルダが使用されていないEFI/neonので(おそらくブートローダを期待するので)、なぜ試しているのかわかりません。EFI/neonプログラム項目名が「neon」で、何らかの理由でフォルダを「neon」と呼ぶ必要があるという意味ですか? UEFI仕様ではこれを要求しないので大丈夫です。

私が間違っているのは、EFI/ubuntuフォルダがある種のレガシーフォルダ(以前のUbuntuインストールの上にNeonがインストールされていた)であると仮定して削除したことです(また、起動したかったのでEFI/NeonNeonブートローダを再インストールしました。アイテムが表示されます)OK) GRUB実行可能ファイルは(UEFIファームウェアによって)新しいフォルダからロードされますが、ロード後に残りの設定を見つけようとしますが、EFI/ubuntu存在しません。したがって、プロンプトに従ってのみこの問題を解決できます。

関連情報