新しいシステムをインポートした後、NVMEドライブを既存のシステムから新しいシステムに移動し、両方のシステムがUEFIを使用して起動するように設定されました。 EFIの設定はシステムによって異なるため、問題が発生すると予想して準備しました。ライブUSBから起動し、インストールとルートを指定し、指示に従ってGRUBを再インストールしました(Webのどこでも利用可能で、以下の繰り返し)。再起動後にGRUBコマンドプロンプトが表示されますが、この問題を解決する方法がわかりません。何をしても、Linux UEFIブートオプション(下の表示)を選択すると、grubプロンプトが表示されます。 Windows UEFIブートオプション(デュアルブートシステム)を選択すると、正しくロードされます。
configfile (hd0,gpt6)/@/boot/grub/grub.cfg
boot 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
次の方法で再インストールできます。
- 問題のあるEFIブートエントリを削除します。
efibootmgr -b 1 -B
- ディスクとEFIにブートローダを再インストールします。
grub-install /dev/nvme0n1 --target x86_64-efi --efi-directory /boot/efi/ --bootloader-id Neon
- 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プロンプトが表示されます。
set
GRUBプロンプトを実行すると、これを確認できます。出力は次のとおりです。
prefix=(hd0,gpt1)/EFI/ubuntu
これは、プレフィックス(GRUBがロードされたと思われる場所と他のすべてのファイルを見ることが期待される場所)がUbuntuが使用するようにハードコードされていることを意味します。
KDE Neon(私が使用している)をインストールすると、NeonインストーラはブートローダEFI/ubuntu
インストールを作成します。フォルダが使用されていないEFI/neon
ので(おそらくブートローダを期待するので)、なぜ試しているのかわかりません。EFI/neon
プログラム項目名が「neon」で、何らかの理由でフォルダを「neon」と呼ぶ必要があるという意味ですか? UEFI仕様ではこれを要求しないので大丈夫です。
私が間違っているのは、EFI/ubuntu
フォルダがある種のレガシーフォルダ(以前のUbuntuインストールの上にNeonがインストールされていた)であると仮定して削除したことです(また、起動したかったのでEFI/Neon
Neonブートローダを再インストールしました。アイテムが表示されます)OK) GRUB実行可能ファイルは(UEFIファームウェアによって)新しいフォルダからロードされますが、ロード後に残りの設定を見つけようとしますが、EFI/ubuntu
存在しません。したがって、プロンプトに従ってのみこの問題を解決できます。