質問:
起動すると、grubはプロンプト(grub>
代わりにgrub rescue>
)を入力します。次の項目を入力する必要があります。
set prefix=(hd0,gpt8)/boot/grub
insmod normal
normal
一般的なグラップメニューを取得します。
これまでのところ、私が見つけたすべての記事はシステムブートを実行し、grub-install
/またはブートするとupdate-grub
この問題を解決します。
試してみましたが、問題は続きます。
詳細:
私はWindows 10とpop-os(Ubuntuベース)で二重起動しています。ブートモードがセーフブートUEFI
に設定されているAcerノートブックがありますenabled
。
私のパーティションは次のとおりです。
$ lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,UUID,LABEL,PARTUUID,PARTTYPE
NAME SIZE FSTYPE MOUNTPOINT UUID LABEL PARTUUID PARTTYPE
sda 238.5G
├─sda1 529M ntfs 6272EE1672EDEF2B Recovery b593e2b8-992e-4d79-9074-d990ba21d10c de94bba4-06d1-4d40-a16a-bfd50179d6ac
├─sda2 100M vfat 64EE-A907 6ef6e12c-3858-4a83-a1dd-8297719bd477 c12a7328-f81f-11d2-ba4b-00a0c93ec93b
├─sda3 16M 1b6ba39a-e528-4cf9-b158-cd1a9312afc2 e3c9e316-0b5c-4db8-817d-f92df00215ae
├─sda4 117.2G ntfs 8E6008B56008A655 c2f2d5bf-16a3-4e99-a6db-2385b36f3f46 ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
├─sda5 58.6G ntfs F6D0CCD7D0CC9EED Storage c10e8d39-26c3-4d3b-8548-0aa97816ba0b ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
├─sda6 477M swap 74da5edc-3b6c-4644-a151-6b93562c8fa4 408e91bd-c7e7-4ab8-a2ac-bb2bb7fde375 0657fd6d-a4ab-43c4-84e5-0933c84b4f4f
│ └─cryptswap 476.5M swap [SWAP] 2d2336c7-64c1-4d53-8e99-f66f9b93bef5
├─sda7 600M vfat /boot/efi 7565-8082 a8c1ff00-3790-4ca0-a360-642e6f1859f0 c12a7328-f81f-11d2-ba4b-00a0c93ec93b
└─sda8 61G ext4 / d40fe3bd-0749-4c29-9e9b-97a064a659dd 8a3b8567-c511-48cd-a3fa-776b556d17da 0fc63daf-8483-4772-8e79-3d69d8477de4
- パーティション1-4はWindowsで作成され、ブートローダは
sda2
。 - パーティション5は、Windows / Linux間のファイル共有を容易にするために私が作成しました。
- 残りのパーティションは pop-os によって作成され(Windows のインストールが完了した後)、pop-os ブートローダは
sda7
。
私は次のようにgrubをインストールしました。
$ sudo apt install grub-efi
$ sudo grub-install --bootloader-id=grub
Installing for x86_64-efi platform.
Installation finished. No error reported.
$ sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.0-7642-generic
Found initrd image: /boot/initrd.img-5.4.0-7642-generic
Found linux image: /boot/vmlinuz-5.4.0-7634-generic
Found initrd image: /boot/initrd.img-5.4.0-7634-generic
Found linux image: /boot/vmlinuz-5.4.0-7629-generic
Found initrd image: /boot/initrd.img-5.4.0-7629-generic
Found linux image: /boot/vmlinuz-5.4.0-7626-generic
Found initrd image: /boot/initrd.img-5.4.0-7626-generic
Found Windows Boot Manager on /dev/sda2@/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for UEFI Firmware Settings
done
その後、私の/boot
ディレクトリは次のようになります。
$ sudo tree -a /boot
/boot
├── config-5.4.0-7626-generic
├── config-5.4.0-7629-generic
├── config-5.4.0-7634-generic
├── config-5.4.0-7642-generic
├── efi
│ ├── c0cc91f7cdfcb9a597d9db525eb08842
│ ├── EFI
│ │ ├── BOOT
│ │ │ └── BOOTX64.EFI
│ │ ├── Linux
│ │ ├── grub
│ │ │ ├── grub.cfg
│ │ │ └── grubx64.efi
│ │ ├── Pop_OS-d40fe3bd-0749-4c29-9e9b-97a064a659dd
│ │ │ ├── cmdline
│ │ │ ├── initrd.img
│ │ │ ├── initrd.img-previous
│ │ │ ├── vmlinuz.efi
│ │ │ └── vmlinuz-previous.efi
│ │ └── systemd
│ │ └── systemd-bootx64.efi
│ ├── loader
│ │ ├── entries
│ │ │ ├── Pop_OS-current.conf
│ │ │ └── Pop_OS-oldkern.conf
│ │ ├── loader.conf
│ │ └── random-seed
│ └── System Volume Information
│ ├── AadRecoveryPasswordDelete
│ └── ClientRecoveryPasswordRotation
├── grub
│ ├── fonts
│ │ └── unicode.pf2
│ ├── grub.cfg
│ ├── grubenv
│ └── x86_64-efi
│ ├── acpi.mod
| < files omitted ... >
│ └── zstd.mod
├── initrd.img -> initrd.img-5.4.0-7642-generic
├── initrd.img-5.3.0-7642-generic
< files omitted ... >
├── initrd.img.old -> initrd.img-5.4.0-7634-generic
├── System.map-5.4.0-7626-generic
< files omitted ... >
├── vmlinuz -> vmlinuz-5.4.0-7642-generic
├── vmlinuz-5.4.0-7626-generic
< files omitted ... >
└── vmlinuz.old -> vmlinuz-5.4.0-7634-generic
16 directories, 314 files
/boot/efi/EFI/grub
、および/boot/efi/EFI/BOOT
以下のファイルが/boot/grub
新しく追加されますgrub-install
。
また、これは私にとって良いようです:
$ cat /boot/efi/EFI/grub/grub.cfg
search.fs_uuid d40fe3bd-0749-4c29-9e9b-97a064a659dd root hd0,gpt8
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
EFI/grub/grubx64
再起動後、F2を押して起動順序の先頭に追加しました。
保存して終了すると、grubプロンプトが表示されます。
その後、set
コマンドを使用すると、次の出力が表示されます(一部の項目は省略されます)。
grub> set
cmdpath=(hd0,gpt7)/EFI/grub
grub_cpu=x86_64
grub_platform=efi
prefix=(hd0,gpt7)/EFI/ubuntu
root=(hd0,gpt7)
今迷子になりました。正しいブートローダ(cmdpath=(hd0,gpt7)/EFI/pop
)がロードされているようですがEFI/grub/grub.cfg
。これらの誤った設定はどこで発生しますか?
prefix
上記のように修正した後、1. pop-os、2. pop-osフォールバックイメージ、3. windows、および4.起動設定に関する項目を含むすべての機能を備えたグラブメニューが得られました。すべてのオプションを試しましたが、すべて機能しました。
だから私はpopOsで起動することに成功しました。efibootmgr -v
これは私に次のように伝えます:
$ efibootmgr -v
BootCurrent: 0003
Timeout: 0 seconds
BootOrder: 0003,0001,0002,0000,2001,2002,2003
Boot0000* Windows Boot Manager HD(2,GPT,6ef6e12c-3858-4a83-a1dd-8297719bd477,0x109000,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)RC
Boot0001* systemd PciRoot(0x0)/Pci(0x17,0x0)/Sata(2,0,0)/HD(7,GPT,a8c1ff00-3790-4ca0-a360-642e6f1859f0,0x160d3000,0x12c000)/File(\EFI\systemd\systemd-bootx64.efi)A01 ..
Boot0002* HDD0: HFS256G39TND-N210A PciRoot(0x0)/Pci(0x17,0x0)/Sata(2,0,0)/HD(7,GPT,a8c1ff00-3790-4ca0-a360-642e6f1859f0,0x160d3000,0x12c000)RC
Boot0003* grub PciRoot(0x0)/Pci(0x17,0x0)/Sata(2,0,0)/HD(7,GPT,a8c1ff00-3790-4ca0-a360-642e6f1859f0,0x160d3000,0x12c000)/File(\EFI\grub\grubx64.efi)A01 ..
Boot0004* EFI USB Device RC
Boot0005* EFI DVD/CDROM RC
Boot0006* EFI Network RC
Boot2001* EFI USB Device RC
Boot2002* EFI DVD/CDROM RC
Boot2003* EFI Network RC
私が何が起こると予想したのか
(hd0,gpt7)/EFI/grub/grub.efi
UEFI ファームウェアから grub を起動します。- grubが読み取る設定ファイルです
(hd0,gpt7)/EFI/grub/grub.cfg
。これはroot
に設定され、に設定さ(hd0,gpt8)
れます。prefix
(hd0,gpt8)/boot/grub
- grubはから設定をロードします
(hd0,gpt8)/boot/grub/grub.cfg
。 - grubが私にメニューを提示したら、ロードするオペレーティングシステムを選択して一日を続けます。
実際に何が起こったのか
(hd0,gpt7)/EFI/grub/grub.efi
UEFI ファームウェアから grub を起動します。- 幼虫確かにの設定ファイルを読んでください
(hd0,gpt7)/EFI/grub/grub.cfg
。root
代わりに(hd0,gpt7)
とprefix
に設定されます(hd0,gpt7)/boot/ubuntu
。
上記のようにエラーを手動で修正しましたprefix
。 - grubはから設定をロードします
(hd0,gpt8)/boot/grub/grub.cfg
。 - grubが私にメニューを提示したら、ロードするオペレーティングシステムを選択して一日を続けます。
私が試したこと:
- セキュアブートを無効にする(違いなし)
- 再実行
grub-install
とupgrade-grub
(違いなし) sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck --debug /dev/sda &> grub.log
(違いなし、ここで出力)
ベストアンサー1
作成すると、デフォルト値をgrubx64.efi
含めることができます。grub-mkimage
prefix
Debian では に/EFI/debian
設定されておりgrub-mkimage
、grub-install
Ubuntu では接頭辞が/EFI/ubuntu
あります。これにより、GRUBは最初にあるミニ構成ファイルを読み込みます。このファイルには通常、GRUBをディレクトリ/ファイルシステムのある場所/EFI/(debian|ubuntu)/grub.cfg
にリダイレクトする数行しか含まれていません。そこから実際の設定ファイルを読み込みます。/boot
<any configuration lines required to cover complications like software RAID, disk encryption or LVM>
search.fs_uuid <UUID of the filesystem that contains /boot>
set prefix=($root)'/boot/grub' # or just ($root)/grub if /boot is a separate filesystem
configfile $prefix/grub.cfg
Pop!OS の GRUB パッケージを使用している場合、Pop のパッケージャが十分な注意を払わない場合は、対応する/デフォルトgrub-install
に類似した従来の「Ubuntu 注意」がある可能性があります。grub-mkimage
そして、PopのデフォルトのUEFIブートローダはGRUBではなくGutmibootとして現れるので、これらのバグは目立たないかもしれません。
grub-efi-amd64-signed
Secure Boot互換パッケージをインストールした場合、元のパッケージはSecure Boot署名プロセスを経て、通常はすべてのGRUBモジュールが組み込まれているため、/boot/efi/EFI/pop/grubx64.efi
実際には異なる場合があります。/boot/grub/x86_64-efi/grub.efi
おそらく、Pop!OS開発者は、grub-efi-amd64-signed
SecureBootではなく署名されたバージョンに変更を適用せずにUbuntuのパッケージをそのまま使用したのでしょうか。
背景:
grub-install
このオプションと一緒に使用するか、--uefi-secure-boot
Secure Bootが検出された場合は、インストールするシステムgrub-mkimage
構築に最適化されたGRUBを使用せずに、事前にコンパイルされたgrubx64.efi
Secure Boot署名付きGRUBを使用します/usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
。
少なくともDebianでは再現可能なビルド技術を使用してビルドされているので、そのバージョンのソースコードパッケージとは別のセキュアブート署名ファイルを使用すると、誰でも直接コンパイルし、結果が事前にビルドされたものとまったく同じであることを確認できます。 1つのバージョン。得るそれ部分的にうまく機能するのは、Debianがセキュアブートサポートを受けるのに時間がかかる主な理由のようです。