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)
答え1
お客様は以前の指示に従い、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
。
GRUBはまた、chainloader +1
パーティションの最初のブロックからブートブロックを読み取るように指示されます。 UEFIのデフォルトブートにはそのようなものはありません。 UEFIモードでWindowsを起動するには、set root
行がWindowsブートローダを含むEFIシステムパーティションを指す必要があり、チェーンローダ行はchainloader /EFI/Microsoft/Boot/bootmgfw.efi
。
答え2
を編集してこれを行うことができます/etc/grub.d/40_custom
。ファイルがすでにジョブ構成のエントリーである場合は、40
まだ使用していない/etc/grub.d/の別の番号に変更してください(最初にロー番号をロードする)。既存の構成ファイルを編集する場合バックアップしてください!
一度Grub-Customizer
新しいグルーブ構成を追加しました。自動生成された項目が機能しなかったため、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
}
その後実行ubdate-grub
未使用(ただし保存したい)設定項目を有効または無効にすることができchmod -x /path/to/file
ます+x
。これにより、GRUB2メニューから非表示になり、元の位置に保持されます。
私のシステムに関するいくつかの関連情報: Arch Linux(2019年3月)とWindows 10をそれぞれ別々のドライブで実行します。それぞれにGPTがあります。明らかに、GRUB2はUEFI(またはBIOSモードで起動した場合はUEFIディスク)で実行している場合はBIOSパーティションをロードしません。
答え3
一度インストールos-prober
して実行する必要があります
sudo apt-get install os-prober
sudo os-prober
grub 構成ファイルの生成
sudo grub-mkconfig -o /boot/grub/grub.cfg
ファイルを手動で編集しないでください