Windows 11 を grub メニューに追加するにはどうすればよいですか?

Windows 11 を grub メニューに追加するにはどうすればよいですか?

問題は、Windows 11 を追加するために Ubuntu 22.04 LTS ドライブをパーティション分割したときに発生しました (ドライブのパーティション分割には Ubuntu ブータブルを使用しました)。

Windows 11 がインストールされると、コンピューターは grub メニューを表示する代わりに Windows 11 を起動し始めました。BIOS に入り、Ubuntu を一番上に移動することでこの問題を修正しました。コンピューターは Ubuntu を起動するようになりましたが、grub メニューはまだ表示されませんでした。

この投稿を見た後、コンピュータを起動したときに Grub メニューが表示されないのはなぜですか?、GRUB メニューを再び表示できるようになりました (@Akalgnotum)。ただし、Windows 11 はメニューに含まれていませんでした。

この投稿を参考にして、GRUBはWindowsを検出しませんを実行したところ、 が sudo os-prober返されました/dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi:Windows Boot Manager:Windows:efi。次に を実行すると、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.15.0-46-generic
Found initrd image: /boot/initrd.img-5.15.0-46-generic
Found linux image: /boot/vmlinuz-5.15.0-43-generic
Found initrd image: /boot/initrd.img-5.15.0-43-generic
Memtest86+ needs a 16-bit boot, that is not available on EFI, exiting
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done

sudo update-grub私の理解では、Windowsは実行されず、os-prober によって提供される情報を使用しないため、追加されません。

これを修正する方法がわかりません。 何かご提案があれば大変助かります。 さらに情報が必要な場合は、喜んで提供させていただきます。

ありがとう!

答え1

何日もインターネットを検索した後、答えを見つけました!

すべての功績はこの投稿によるものです:https://askubuntu.com/a/977251/1191399繰り返しになりますが。

  1. sudo fdisk -l

次のような内容を含む長い戻り値が返されるはずです。

Device             Start        End   Sectors   Size Type
/dev/nvme0n1p1      2048    1050623   1048576   512M EFI System
/dev/nvme0n1p2   1050624  874729471 873678848 416.6G Linux filesystem
/dev/nvme0n1p3 874729472  874762239     32768    16M Microsoft reserved
/dev/nvme0n1p4 874762240 1000214527 125452288  59.8G Microsoft basic data
  1. UUIDを取得するEFI パーティション sudo blkid /dev/nvme0n1p1(nvme0n1p1 を適切なパーティションに置き換えてください)

戻る: dev/nvme0n1p1: UUID="3C26-6A4C" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="3b64b43f-e7eb-4ac8-a32c-9af2edf64d0d"

  1. /etc/grub.d の '40_custom' ファイルへの書き込み権限を自分に付与します。

    ターミナル (ctrl+alt+t) を開き、次のコマンドを実行します。
    cd /etc/grub.d
    sudo chmod o+w 40_custom

  2. 40_customファイルを開く
    open ./40_custom

  3. ファイルの下部に次の内容を記述し、3C26-6A4C を正しい UUID に置き換えます。

menuentry 'Windows 11' {
    search --fs-uuid --no-floppy --set=root 3C26-6A4C
    chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
  1. ファイルを保存してエディターを閉じます。

  2. ターミナルに戻り、書き込み権限を削除します。
    sudo chmod o-w 40_custom

  3. GRUBを更新するにはsudo update-grub

  4. (オプション) /boot/grub/grub.cfg にアクセスし、243-251 行目をチェックすることで、変更が成功したことを確認できます。40_custom ファイルの編集が反映されているはずです。

  5. コンピュータを再起動しますreboot

答え2

Grub 2.06 は /etc/default/grub 内の os-prober をオフにします。

https://www.phoronix.com/news/Ubuntu-22.04-マルチブート変更

他のシステムを探すためにすべてのパーティションをスキャンすると、何らかのセキュリティ上の問題が発生します。/etc/default/grub でオン/オフを切り替えることができます。

一度だけ実行し、Windows ブート スタンザを 40_custom にコピーするのが最善です。また、特にスキャンするパーティションが多数ある場合は、今後のすべての更新が高速化されます。

sudoedit /etc/default/grub

必要に応じて true/false に変更します。true が推奨されます。

GRUB_DISABLE_OS_PROBER=true

ブート スタンザを 40_custom に簡単にコピーできます。

説明を修正する 1 つの方法は、Windows エントリを 40_custom に移動し、自由に編集することです。

次のエントリをコピーします:

sudo cp -a /boot/grub/grub.cfg /boot/grub/grub.cfg.backup
sudoedit /boot/grub/grub.cfg

それらをコピーして編集し、必要なエントリのみにします。

sudoedit /etc/grub.d/40_custom

grub または grub のスクリプトに変更を加えた後は、grub メニューを更新する必要があります。

sudo update-grub

Windows 10 と Ubuntu 14.04 の Grub メニュー

os-prober によって一般化された一般的な UEFI Windows ブート スタンザ。各 ESP には固有の UUID と partUUID があります。ブート スタンザの UUID は ESP の UUID です。

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager (on /dev/nvme0n1p1)' --class windows --class os $menuentry_id_option 'osprober-efi-F8FD-D8E5' {
    insmod part_gpt
    insmod fat
    search --no-floppy --fs-uuid --set=root F8FD-D8E5
    chainloader /efi/Microsoft/Boot/bootmgfw.efi
}

上記のスタンザを使用する場合は、UUID に更新する必要があり、os-prober の使用に関するコメントは必要ありません。ESP の UUID を確認します。

lsblk -f

注: Grub は動作中の Windows のみを起動します。また、UEFI セキュア ブートはオフにする必要があります。Windows は、更新プログラムを適用すると、Windows の高速スタートアップを再びオンにすることがよくあります。そのため、UEFI ワンタイム ブート キー (通常は f12 ですが、ベンダーによって異なります) を使用して Windows を直接起動する必要があります。

答え3

1. ディスクとパーティションの一覧

lsblk

2. Windows パーティションを含むディスクを特定します。

sudo cfdisk /dev/sd<YOUR DISK LETTER (NO NUMBER)>
  • 垂直矢印キーを使用してデバイスを切り替えます。
  • EFI パーティションは、「EFI システム」としてタイプされたデバイスになります。
  • EFI デバイスの「ファイルシステム UUID」をコピーします。(XXXX-XXXX)
  • [ Quit ]キーボードの矢印キーを使用して選択します。cfdisk を終了するには Enter キーを押します。

3. 開く /etc/grub.d/40_customお気に入りのエディタ(nano、、vimcode

sudo nano /etc/grub.d/40_custom

4. コメントの下にメニューエントリを追加します。

menuentry 'Windows 11' {
    search --fs-uuid --no-floppy --set=root <YOUR "File system UUID">
    chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}

5. grub 設定を更新します。

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

終了sudo reboot

答え4

少なくとも私の場合はこれで解決しました。os-proberが無効になっていました。私はUbuntu 22.04を使用しています。

sudo nano /etc/default/grub

セットGRUB_DISABLE_OS_PROBER=false

そして実行する

sudo update-grub

関連情報