UEFI Windows / Linuxマルチブート設定用のカスタムGrubメニューを構築しようとしています。以下を含むUSBドライブでメニューを正常にテストしました。
/EFI/boot/BOOTX64.EFI
/grub/grub.cfg
/grub/x86_64-efi/*
…etc.
そのドライブから起動すると、問題なくメニューにアクセスできます。次に、グラブをPCのEFIシステムパーティションに転送しました。
/boot/grub/bootx64.efi
/boot/grub/grub.cfg
/boot/grub/x86_64-efi/*
…etc.
このパーティションにはWindows用のブートローダもあります/EFI/Microsoft/boot
。
最後に、WindowsユーティリティBOOTICE(またはシステムBIOS)を使用してそれを追加して再起動する\boot\grub\bootx64.efi
と、grubが表示されます。
...メニューを呼び出す代わりに救助メッセージを受け取ったことを除いて。私の仮定は、grub.cfgとモジュールを間違った場所に置いたことです。しかし、本当に奇妙なことは、ls
パーティションを表示しないことです(hd0) (hd1)
。私の期待は(hd0) (hd0,msdos1)
そうでしたが、グラブ構造はls
どのパーティションでもまったく機能しないようです。 ls (hd0)
どちらもls (hd1)
「不明なファイルシステム」が作成されます。
私のシステムには、パーティションを持つ1つの物理ディスクが含まれています。
1 = EFI system partition (fat32)
2 = Veracrypted partition (with Windows installation)
3 = Veracrypted partition (data)
4 = Linux swap
5 = Linux root
6 = Linux home
GrubがEFIシステムパーティションから起動できますが、そのパーティションや他のパーティションを表示できないのはなぜですか?さらに重要なのは、USBなどの内蔵ドライブからメニューをどのように取得できますか?
答え1
ls (hd0)
単一のファイルシステムでディスク全体にアクセスしようとしていることを意味します。このメッセージ(hd0): Filesystem is unknown.
は正常で、ディスクが何らかの方法で分割されている場合に予想されます。
代わりに入力してくださいls (hd0
いいえ角かっこを閉じて Tab キーを押します。 GRUBがパーティションタイプを認識している場合は、GRUBに知られているパーティションとそのファイルシステムタイプを一覧表示する必要があります。
問題は、GRUBの設定ファイルがモジュールディレクトリと同様にではないことを<partition root>/grub/grub.cfg
期待していることです。<partition root>/boot/grub/grub.cfg
GRUBbootx64.efi
ファイルには、GRUBコアイメージといくつかのオプションのGRUBモジュールが含まれています。この組み込みモジュールセットが含まれていないと、part_gpt
GRUBはGPTパーティションテーブルを認識しないため、残りのGRUBモジュールを含むファイルシステムにアクセスできなくなります。これがGRUB回復モードに入るもう一つの理由かもしれません。
答え2
bootx64.efiに含まれているモジュールに関するtelcoMの情報のおかげで解決策を見つけることができました。デフォルトでは、すべてのgrubファイルをUSBスティックにコピーするのではなく、明示的にgrub-install
内部システムパーティションに直接コピーする必要がありました。grub-install
おそらくUSBスティックでgrub-installを実行すると、MBRパーティションデバイスであり、bootx64.efiにpart_gptモジュールが組み込まれていないことがわかります。これが内部パーティションを認識しない理由です。 install 内部ディスクから直接実行すると、GPT を確認してモジュールを組み込みます。どちらの場合も、解決策はUSBスティックからgrubファイルをコピーするのではなく、grubを内部パーティションに直接インストールすることです。
答え3
msdosパーティションが原因でカーネルエラーが発生し、コンピュータがディスクを見つけることができず、grubでのみ起動できるというメッセージが表示されました。 grubでlsコマンドを実行しましたが、何も表示されませんでした。 lsにリストを表示させるために私がしたことは次のとおりです。
Go to your grub command line type:
set root=ls ; Hit enter
その後、lsコマンドを再実行すると、すべてのパーティションがリストされます。これは、msdosカーネルエラーが発生した場合に役立ち、grubが実行されるように破損したmsdosパーティションを見つけて修復することができます。