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

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

すでにEFIシステムパーティションを持つWindows 7 GPTをインストールしました。

GPT形式の別のハードドライブにLinuxをインストールしようとしています。 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は既存のEFIパーティションを使用したいと思います/dev/sda1

PS:私のマザーボードはEFIをサポートしています。

答え1

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

必要:

  • Grub >= 2.00 (1.98 および 1.99 は動作しません)
  • CONFIG_EFI_VARSGrubは、EFI変数(モジュールとしてコンパイルまたはモジュールとしてコンパイルefivars)をサポートするLinuxカーネルにインストールする必要があります。
  • 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-mkconfigEFIに適したモジュールをgrub.cfg

チェーンローディングウィンドウ:

Windowsでデュアルブートを要求するときにチェーンをロードするためのgrub構成が含まれています。

EFIへのWindowsインストールのチェーンのロードは、MBRディスクにWindowsをインストールするのとは若干異なります。ntfsまたはモジュールは必要ありませpart_mbrfatpart_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から起動したい場合は読む価値があります。

関連情報