web-dev-qa-db-ja.com

UEFIシステムでgrubレスキュープロンプトを介して起動する方法は?

USBから起動し、「インストールせずにUbuntuを試す」を選択し、別のUSBを挿入して、インストーラーにインストールするように指示することで、Ubuntu16.04をインストールしました。 ESPである_/dev/sdc2_にブートローダーをインストールするようにインストーラーに指示しました。そのパーティションにシムとGRUB EFIファイルが表示されているので、ブートローダーが実際にインストールされていることがわかります。

ただし、インストール後に起動しようとすると、起動メニューが表示されず、レスキュープロンプトが表示されるだけでした。

_grub rescue>
_

次に、私のESPパーティションは_hd0,gpt2_ですが、_hd1,gpt2_を期待していました(ここではgrubの命名スキームを使用)。

同様の質問を調べましたが、残念ながらBIOSシステムに関する情報しか見つかりませんでした。EFIではなく、_/_には/boot(/efi)も含まれています。 _/_の_hd0,gtp3_と他のディスクのgrubefiファイルを処理する方法を探しています。カーネルとinitrdはどちらもESPの内部にあり、問題は別の場所にあるはずです。

どうすればこれを修正できますか?

lsの出力:

_(hd0) (hd0,gpt5) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1) (hd1) (hd1,gpt8) (hd1,gpt7) (hd1,gpt6) (hd1,gpt5) (hd1,gpt4) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1)
_

ls (hd0,gpt2)/の出力:

_syslininux/ vmlinuz.efi inird.lz efi/
_

_/media/ubuntu/ba6e9aff-b9b7-4c4f-8441-98db8ec7a08a/boot/grub/grub.cfg_の内容:

_menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ba6e9aff-b9b7-4c4f-8441-98db8ec7a08a' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root='hd2,gpt3'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd2,gpt3 --hint-efi=hd2,gpt3 --hint-baremetal=ahci2,gpt3  ba6e9aff-b9b7-4c4f-8441-98db8ec7a08a
else
  search --no-floppy --fs-uuid --set=root ba6e9aff-b9b7-4c4f-8441-98db8ec7a08a
fi
linux   /boot/vmlinuz-4.4.0-28-generic.efi.signed root=UUID=ba6e9aff-b9b7-4c4f-8441-98db8ec7a08a ro  quiet splash $vt_handoff
initrd  /boot/initrd.img-4.4.0-28-generic  }  
_

更新:_grub-install /dev/sdb2_ grubを使用して/ dev/sdb2に再インストールしましたが、ほとんどのgrubfileはまだ/ dev/sdb3にあるため、ext2.modのロード方法がわからないため、grubはアクセスできません。出力の一部は_x86_64-efi_ Archを使用していました。

レスキューコンソールを少しいじってゆっくりと良くなっていきましたが、原因がわかったのかもしれません。なぜアクセスできないのか。 grubレスキューモードはi386-pcmodfileのみを受け入れますが、インストールされているすべてのmodfileはx86_64-efiのものです。

3
Kupferdrache

これはすべて、誰かがUEFI仕様を完全に実装していなかったためです。

あなたがしなければならないのは、ライブシステムを起動することと:

Sudo mount -U <UUID of your ESP> /mnt
Sudo mkdir /mnt/EFI/BOOT
Sudo cp -v /mnt/boot/<your-vendor>/grubx64.efi /mnt/EFI/BOOT/

次にシャットダウンし、稼働中のシステムを削除して再起動します。

使用されるパスの詳細については、 ここ を参照してください。

1
Kupferdrache