web-dev-qa-db-ja.com

Windows 10をGrub2ブートローダーに追加する

40_customを変更して以下を追加することにより、ブートローダーオプションにWindowsを追加するための通常の手順を実行しました。

menuentry "Windows 10" {
     insmod part_gpt
     insmod chain
     set root='(hd0,msdos2)'
     chainloader +1
     }

しかし、ブートローダーでWindowsを選択すると、「エラー:無効な署名です。続行するには任意のキーを押してください」と表示されます。なぜこのエラーが発生するのかわかりません。どうすれば修正できますか?編集:それはここに構文エラーがあると言いますが、私は何も見ることができません。 if [ "${grub_platform}" == "pc" ]; then menuentry "Microsoft Windows Vista/7/8/8.1/10 BIOS/MBR" { insmod part_msdos insmod ntfs insmod search_fs_uuid insmod ntldr
search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 XXXXXXXXXXXXXXXX ntldr /bootmgr } fi

EDIT2:Sudo fdisk -lの出力

~$ Sudo fdisk -l
Disk /dev/sda: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x71b1e4fb

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1              63     80324     80262  39.2M de Dell Utility
/dev/sda2  *    223580160 286285823  62705664  29.9G 83 Linux
/dev/sda3        30801920 223580159 192778240  91.9G  7 HPFS/NTFS/exFAT
/dev/sda4       286287870 625141759 338853890 161.6G  5 Extended
/dev/sda5       571742208 573741055   1998848   976M 82 Linux swap / Solaris
/dev/sda6       573743104 625141759  51398656  24.5G 83 Linux
/dev/sda7       286287872 345180159  58892288  28.1G 83 Linux

Partition table entries are not in disk order.


Disk /dev/sdb: 7.5 GiB, 8004829184 bytes, 15634432 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x037cbc77

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdb1  *     2048 15634431 15632384  7.5G  c W95 FAT32 (LBA)
2

WindowsがMBRパーティショニングを使用することを期待している古いガイドに従っているようです。

「無効な署名」エラーは、セキュアブートが有効になっていることを示しています。セキュアブートが有効になっている場合、すべてのブートローダーは秘密鍵で署名されている必要があり、一致する公開鍵はファームウェアNVRAMのセキュアブート変数に含まれている必要があります。 GRUBは、指定したパーティションの最初のセクターを忠実に読み取っていますが、適切なセキュアブート署名が含まれていないため、ファームウェアはその実行を拒否します。

セキュアブートには、前提条件としてネイティブUEFIスタイルのブートが必要です。システムでセキュアブートを無効にできる場合がありますが、GRUBがすでに起動しているため、おそらくその必要はありません。

_insmod part_gpt_は、ディスクが通常はUEFIブートスタイルと連動するGPTスタイルのパーティションを持つことを期待していることを示唆していますが、一方でset root=(hd0,msdos2)はMBRパーティションを期待しています。

GPTパーティショニングを使用する私のDebianシステムでは、_set root_行は_set root='hd0,gpt1'_を読み取ります。システムでGPTパーティショニングを使用している場合は、gptNではなくmsdosNパーティション識別子を使用します。

また、_chainloader +1_は、パーティションの最初のブロックからブートブロックを読み取るようにGRUBに指示します。UEFIネイティブブートには、そのようなものはありません。WindowsをUEFIモードでブートするには、_set root_行はWindowsブートローダーを含むEFIシステムパーティションを指し、チェーンローダー行は_chainloader /EFI/Microsoft/Boot/bootmgfw.efi_である必要があります。

4
telcoM

/etc/grub.d/40_customを編集して、GRUB2にカスタムエントリを追加できます。そのファイルがすでに動作している構成のエントリである場合は、40を、/ etc/grub.d /でまだ使用されていない別の番号に変更します[小さい番号が最初にロードされます]。既存の設定ファイルを編集している場合、バックアップを作成!

Grub-Customizerを使用して、新しいGRUB設定を追加しました。自動的に生成されたエントリは機能しなかったため、telcoMの提案に従ってカスタムスクリプトとして編集しました。

これが40_customファイルです。

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "Windows 10 (loader)"{
    insmod part_gpt
    search --no-floppy --set=root --fs-uuid 109C-D028
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

次に、grub-updateを実行します

chmod -x /path/to/fileまたは+xを使用して、使用していない(ただし保存したい)構成エントリを無効にできます。これにより、GRUB2メニューから非表示になりながら、本来あるべき場所に残ります。


私のシステムに関するいくつかの関連情報:Arch Linux(2019年3月)とWindows 10をそれぞれ別のドライブで実行します。それぞれGPTを使用します。どうやら、UEFIで実行している場合、GRUB2はBIOSパーティションをロードしません(BIOSモードで開始した場合はUEFIディスク)。

3
Starbuck

os-proberをインストールして1回実行する必要があります

Sudo apt-get install os-prober
Sudo os-prober

GRUB設定ファイルを生成する

Sudo grub-mkconfig -o /boot/grub/grub.cfg

ファイルを手動で編集しないでください

0
Arpit Agarwal