Apakah GRUB2 dapat berbagi partisi sistem EFI dengan Windows?

30

Saya memiliki instalasi Windows 7 GPT yang sudah ada, yang sudah memiliki partisi Sistem EFI.

Saya sekarang mencoba menginstal Linux pada harddisk terpisah, yang juga diformat GPT. Saya tidak menemukan cara kerja untuk mendapatkan boot grub tanpa partisi sistem EFI, jadi pertanyaan saya adalah:

Apakah mungkin bagi grub2 untuk menggunakan partisi Sistem EFI yang sama dengan windows? Bagaimana cara saya memberi tahu grub2 untuk menggunakannya?

Untuk memperjelas pengaturan saya:

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)

Saya ingin grub2 menggunakan /dev/sda1partisi EFI yang ada .

PS: Mainboard saya mampu EFI.

crater2150
sumber

Jawaban:

22

Setelah seharian melakukan penelitian, saya sekarang dapat menjawab pertanyaan saya sendiri: ya itu mungkin, dan Anda bahkan dapat menggunakan partisi itu sebagai / boot dan simpan kernel / initramfs / etc Anda. sana.

Persyaratan:

  • Grub> = 2.00 (1.98 dan 1.99 tidak berfungsi)
  • Grub harus diinstal dari kernel Linux, yang memiliki dukungan untuk variabel EFI ( CONFIG_EFI_VARSdikompilasi dalam atau sebagai modul efivars)
  • Untuk membuat entri boot EFI Anda perlu efibootmgr

Mendirikan:

Pertama pasang partisi EFI Anda ke / boot

mount /dev/sdX1 /boot

Jika Anda melihat entri mount, Anda akan melihat, bahwa itu hanyalah partisi FAT (32). Di bawah /bootAnda harus menemukan direktori efi.

Ketika grub akan memanggil efibootmgr, Anda harus memuat evivars, jika itu tidak dikompilasi ke dalam kernel:

modprobe efivars

Sekarang Anda dapat menginstal grub:

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

Grub menginstal file-nya seperti biasa ke /boot/grub2. Jika semuanya berfungsi dengan benar, Anda seharusnya sekarang juga memiliki folder /boot/efi/grub2atau /boot/efi/your_distros_name. Dengan --bootloader-id=isert_name_hereAnda juga dapat menentukan nama untuk folder sendiri.

Grub memanggil efibootmgrsecara otomatis dan membuat entri boot dengan nama itu di menu boot EFI (dalam kasus saya, itu berarti muncul sebagai perangkat yang dapat di-boot dalam menu EFI, tidak yakin apakah ini terjadi pada setiap papan EFI)

Pengaturan lebih lanjut tidak berbeda dari pengaturan grub2 biasa, grub2-mkconfigakan menambahkan modul yang sesuai untuk EFI ke Anda grub.cfg.

Pemuatan Rantai Windows:

Ketika saya meminta dual boot dengan Windows, saya akan menyertakan konfigurasi grub untuk chainloading:

Chainloading instalasi Windows pada EFI sedikit berbeda dari yang ada pada disk MBR. Anda tidak akan memerlukan modul ntfsatau part_mbr, sebagai gantinya fatdan part_gptdiperlukan.

Selain itu, pengaturan root tidak diperlukan, informasi ini disimpan oleh boot manager Windows sendiri. Alih-alih tentukan searchperintah. Parameter yang dibutuhkan untuk itu dapat ditentukan oleh

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

Ini akan memberi Anda parameter untuk pencarian yang menentukan lokasi partisi EFI, seharusnya terlihat seperti:

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

Alih-alih memberi tahu chainloaderjumlah sektor untuk dibaca, Anda perlu mengatur path ke Windows EFI loader di partisi EFI. Ini sama untuk semua instalasi Windows EFI. Entri yang dihasilkan akan terlihat seperti ini:

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
}

Sumber: Ini mencakup beberapa kasus lagi, jika Anda ingin boot dari EFI, layak dibaca:

crater2150
sumber
Bagi saya (Fedora24) saya meletakkan partisi windows 10 efi di mount /dev/sdXX /boot/efi, kemudian mengikuti ini dan berlari bcdedit /set {bootmgr} path \EFI\fedora\shim.efidari windows ke bootstrap EFI.
jozxyqk