Contents

GRUB が Windows を検出しない: 修正方法

<本文>/images/the-grub2-boot-loader-on-a-laptop-screen-with-ubuntu-as-an-option.jpg

最近 Windows と Linux でデュアル ブート構成をセットアップした場合は、私と同じ問題、つまり GRUB メニューに Windows がオプションとして表示されないという問題に遭遇したことがあるかもしれません。私がそれをどのように解決したか(そしてその背後にある技術的な理由)を説明します。

具体的には、CachyOS を Windows 11 ドライブとは別のドライブにインストールしました。これまでにこのドライブにさまざまな Linux ディストリビューションを何度かインストールしましたが、ブート メニューは通常は正常に機能します。 Windows 11 のブート オプションは何もしなくても表示されます。ただし、この例では、それを機能させるためにいくつかの追加の手順が必要でした。

PC を起動したときにブート メニューがまったく表示されない場合は、まず GRUB メニューを表示する方法を学ぶ必要があります。

Windows が GRUB に表示されない理由

結局のところ、最近の GRUB インストールでは os-prober が無効になっていることが多く、それが Windows が表示されない理由でした。よく知らない方のために説明すると、os-prober は、GRUB が PC にインストールされている他のオペレーティング システムを自動的に識別できるようにするパッケージです。無効にすると、GRUB は手動介入なしに Windows を識別できなくなります。

その理由は、os-prober パッケージに対する不信感です。 GRUB をパッケージ化するディストリビューション開発者は、Canonical 開発者の Julian Andres Klode 氏が Ubuntu で os-prober を無効にする理由を説明した 2021 年に遡り、セキュリティ予防策として os-prober を無効にすることを選択してきました。彼らは、「os-prober は、他の OS かどうかをチェックするために grub-mount を使用してディスク上のすべてのパーティションをマウントするため、本質的に安全ではありません。」 それ以来パッチが作成されているにもかかわらず、多くの人が単純にそれを信頼していません。

必要に応じて、os-prober を再度簡単に有効にすることができます。ただし、そうすべきかすべきでないかは、状況によって異なります。少なくとも、私はあなたの脅威モデルを知らずにサイバーセキュリティに関するアドバイスをするつもりはありません。

私自身としては、調査の結果、懸念事項のほとんどはセキュア ブートの回避策にあることがわかっており、PC でセキュア ブートをすでに無効にしているため、os-prober を再度有効にすることに抵抗はありませんでした。繰り返しになりますが、最も安全なルートを決定するのはあなた次第です。そのために、2 つの異なるオプションを示します。そのうちの 1 つは、os-prober を完全に回避します。

/images/the-grub2-boot-loader-on-a-laptop-screen-with-ubuntu-as-an-option.jpg

関連

GRUB2 ブート ローダーの設定を構成する方法

デフォルトの OS を選択し、背景画像も表示します。

簡単なオプション: os-prober を有効にする

セキュリティへの影響を考慮して、os-prober を有効にすることに自信がある場合は、デフォルトの GRUB 設定を編集して有効にすることができます。通常、設定ファイルは /etc/default/grub にあるため、編集するには、管理者アクセス権を備えた任意のテキスト エディターでファイルを開く必要があります。 nano で編集するには、次のコマンドを使用しました。


sudo nano /etc/default/grub

「 #GRUB_DISABLE_OS_PROBER=false 」という行が見つかるまでファイルをスクロールします。 # 記号を削除してコメントを解除します。

ファイルを保存すること以外に、os-prober を有効にするために必要な作業はこれだけです。 nano では、Ctrl+o を押してから Enter を押してファイル名を確認し、Ctrl+x を押して nano を終了します。後で説明しますが、GRUB の更新を忘れないでください。

より安全なオプション: Windows をメニュー エントリとして手動で追加します

より安全ではありますが、もう少し複雑なもう 1 つのオプションは、os-prober の有効化をスキップし、代わりに Windows を GRUB のブート メニューに自分で追加することです。

これを行うには、まず、Linux システムが Windows インストールの EFI パーティションをどこに配置しているかを知る必要があります。これを確認するには、次のコマンドを実行すると、すべてのディスクとその目的がリストされます。


sudo dfisk -l

/images/windows-partitions-listed-in-a-linux-terminal-using-the-lsblk-command.png

Windows ドライブの /dev/nvme0n1p1 に「EFI System」というラベルの付いたデバイスがあることがわかります。そのアドレスをコピーし、次の blkid コマンドを実行できるように準備します。これにより、カスタム ブート エントリに必要なデバイスの UUID が表示されます。


sudo blkid /dev/nvme0n1p1

/images/the-uuid-of-a-windows-efi-partition-as-revealed-by-the-blkid-command.png

引用符で囲まれた UUID 値を探して書き留めます。次に、GRUB の 40\_custom ファイルを編集して、カスタム ブート エントリを GRUB に追加します。私はこれを行うために nano を使用していますが、好みのテキスト エディタを使用することもできます。


sudo nano /etc/grub.d/40_custom

次のコード ブロックを貼り付け、「 your-Windows-EFI-partition-UUID 」を見つけた UUID に置き換えます。


menuentry "Windows" --class windows --class os {

 insmod ntfs

 search --no-floppy --set=root --fs-uuid your-Windows-EFI-partition-UUID

 ntldr /bootmgr}

また、「menuentry」に続く引用符内のテキストを、Windows ブート エントリの表示方法に合わせて変更できることにも注意してください。

GRUB のデフォルト構成ファイルを変更するか、カスタム ブート エントリを追加した後は、忘れずに GRUB 構成を再生成してください。このプロセスにより、実際に変更が有効になります。正直に言うと、私自身、os-prober を無効にしたときにそのことを忘れていて、再起動後に Windows が表示されず混乱していました。

作業を簡単にするために、一部のディストリビューションには、「 update-grub 」など、GRUB を更新するためのエイリアスが事前設定されています。最初に (sudo として) 実行してみることもできますが、うまくいかない場合は、次のコマンドでいつでも手動で更新できます。


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

再生成が完了するまで待ってから、再起動してみてください。 GRUB ブート メニューに Windows と、インストールしたその他のオペレーティング システムが表示されるはずです。

問題を避けるために GRUB を置き換えることを検討してください

os-prober の脆弱性が心配で、GRUB メニューの手動編集に対処したくない場合は、代替ブート マネージャーを検討することをお勧めします。

たとえば、GRUB を systemd-boot に置き換えることもできますが、レガシー BIOS (UEFI とは対照的に) のサポートが不足しています。もともと Hackintosh 用に設計され、UEFI と BIOS の両方をサポートする Clover Bootloader を検討することもできます。 macOS のブート マネージャーと同様のエクスペリエンスを提供するもう 1 つのオプションは、rEFInd です。

*️⃣ 出典リンク:

GRUB メニューを表示する方法、 Canonical 開発者 Julian Andres Klode が os-prober を無効にする理由を説明しました、セキュア ブートを無効にする、GRUB2 ブート ローダーの設定を構成する方法、すべてのディスクとその目的をリストします。エイリアス、 systemd-bootClover BootloaderrEFInd