web-dev-qa-db-ja.com

GRUB2はEFIシステムパーティションをWindowsと共有できますか?

既存のWindows 7 GPTインストールがあり、既にEFIシステムパーティションがあります。

Linuxを別のハードディスクにインストールしようとしています。これもGPTフォーマットです。 EFIシステムパーティションなしでGRUBブートを取得するための有効な方法が見つからなかったので、私の質問は次のとおりです。

Grub2がWindowsと同じEFIシステムパーティションを使用することは可能ですか? grub2にそれを使用するように指示するにはどうすればよいですか?

私のセットアップを明確にするために:

gpt /dev/sda:
    1 EFI System partition created by windows (100MB)
    2 "Microsoft reserved partition" (200MB)
    3 Windows root (rest of disk)

gpt /dev/sdb:
    # After answering my own question: this partition is not needed
    1 boot partition containing grub, kernels etc.(32MB)
    2 crypto LVM partition (rest of disk)

Grub2に既存の/dev/sda1 EFIパーティションを使用させたい。

PS:私のメインボードはEFI対応です。

31
crater2150

1日の調査の後、自分の質問に答えることができます。はい、可能です。そのパーティションを/ bootとして使用し、kernels/initramfs/etcを保存することもできます。そこ。

要件:

  • Grub> = 2.00(1.98および1.99は機能しません)
  • Grubは、EFI変数をサポートするLinuxカーネルからインストールする必要があります(CONFIG_EFI_VARSはモジュールefivarsとしてコンパイルされているか、コンパイルされています)
  • EFIブートエントリを作成するには、efibootmgrが必要です

セットアップ:

最初にEFIパーティションを/ bootにマウントします

mount /dev/sdX1 /boot

マウントエントリを見ると、単にFAT(32)パーティションであることがわかります。 /bootの下にディレクトリefiがあります。

Grubはefibootmgrを呼び出すので、カーネルにコンパイルされていない場合は、evivarsをロードする必要があります。

modprobe efivars

これでgrubをインストールできます:

# Replace x86_64 with i386 for 32 bit installations
grub2-install --target=x86_64-efi

Grubは通常どおり/boot/grub2にファイルをインストールします。すべてが正常に動作した場合は、/boot/efi/grub2または/boot/efi/<name_of_your_distro>というフォルダーも作成されているはずです。 --bootloader-id=insert_name_hereでは、フォルダの名前を自分で指定することもできます。

Grubは自動的にefibootmgrを呼び出し、EFIブートメニューにその名前のブートエントリを作成します(私の場合、これはEFIメニューにブート可能なデバイスとして表示されることを意味します。 EFIボード)

以降の設定は通常のgrub2設定と変わりません。grub2-mkconfigはEFIに適切なモジュールをgrub.cfgに追加します。

ウィンドウのチェーンロード:

Windowsでのデュアルブートを要求したので、チェーンロードするためのGRUB構成を含めます:

EFIでのWindowsインストールのチェーンロードは、MBRディスクでのチェーンロードとは少し異なります。 ntfsまたはpart_mbrモジュールは必要ありませんが、代わりにfatおよびpart_gptが必要です。

また、ルートを設定する必要はありません。この情報はWindows独自のブートマネージャーによって保存されます。代わりに、searchコマンドを指定します。そのために必要なパラメータは、

grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi

これにより、EFIパーティションの場所を指定する検索用のパラメーターが提供されます。次のようになります。

--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28

読み取るセクター数をchainloaderに通知する代わりに、EFIパーティションでWindowsのEFIローダーへのパスを設定する必要があります。これは、すべてのWindows EFIインストールで同じです。結果のエントリは次のようになります。

menuentry "Microsoft Windows x86_64 UEFI-GPT" {
    insmod part_gpt
    insmod fat
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --no-floppy --set=root <insert ouput from grub-probe here>
    chainloader /efi/Microsoft/Boot/bootmgfw.efi
}

ソース:EFIから起動したい場合、これらはいくつかのケースをカバーしています、それらは読む価値があります:

24
crater2150