EFI Grub2 Multiboot HowTo

( https://thinkpad-forum.de/threads/123262-EFI-Grub2-Multiboot-HowTo )

1)Erstellen der EFI System Partition

Falls ihr Windows 7 installiert habt, dann wurde die Partition bereits erstellt und ihr könnt zu Punkt 2 gehen.


EFI benötigt zum Booten eine kleine FAT32 Partiton. Diese kann entweder mit GNU Parted/GParted oder mit Gdisk erstellt werden. Wichtig dabei ist, dass die FAT32 Partition ca. 200 MB groß ist und die Flag „boot“ besitzt.

Mit GParted:
Wählt eure Festplatte, klickt auf Neu und erstellt einen neue Partition: gparted3.jpeg
Dannach klickt auf Partition, Markierung bearbeiten und setzt den Boot-Flag: gparted1.jpeg
So sollte die Partition dann ausschauen: gparted2.jpeg

2) Installation von Grub

Installiert das Grub 2 EFI Paket für eure Distribution:
Code:
# apt-get install grub-efi-amd64

Dannach wird die erstellte EFI System Partition gemountet und ein neues Verzeichnis erstellt:

Code:
# mkdir /boot/efi

Mounten der Partition:

Code:
# mount /dev/sda1 /boot/efi

Falls ihr nicht wisst, welche Partition die EFI System Partition ist, installiert euch parted und lasst euch mit view alle Partitionen anzeigen.

Code:

   (parted) print

Model: ATA SAMSUNG HD502HJ (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End    Size    File system     Name                          Flags

 1      1049kB  106MB  105MB   fat32           EFI system partition          boot

 2      106MB   240MB  134MB                   Microsoft reserved partition  msftres

 3      240MB   121GB  120GB   ntfs            Basic data partition

 6      121GB   270GB  149GB                   Daten

 5      270GB   278GB  8000MB  linux-swap(v1)

 4      278GB   500GB  222GB   ext4

Erstellt euch, falls noch nicht vorhanden, das Verzeichnis /boot/efi/EFI

Code:

   # mkdir -p /boot/efi/EFI

Jetzt geht es an die eigentliche Installation von Grub:

Code:

   # modprobe dm-mod   
   # grub-install <DEVICE> --boot-directory=/boot/efi/EFI --bootloader-id=grub --no-floppy --recheck
(DEVICE z.B. /dev/sda1)



Als Letztes werden noch die von EFI benötigten Schriftarten kopiert und die Config erstellt:

Code:

  # cp /usr/share/grub/unicode.pf2 /boot/efi/EFI/grub
  # grub-mkconfig -o /boot/efi/EFI/grub/grub.cfg

3)Grub im EFI-Menü anzeigen lassen

Der letzte Schritt ist, dass Grub im EFI-Menü angewählt werden und gestartet werden kann. Da aber dazu das Betriebsystem (in meinem Fall Debian) bereits im EFI-Modus gestartet werden muss, muss eine EFI-Applikation erstellt werden:



Code:

   # grub-mkimage -d /usr/lib/grub/x86_64-efi -O x86_64-efi -p "" -o /boot/efi/EFI/grub/grub_custom.efi part_gpt fat iso9660 udf normal chain linux ls search search_fs_file search_fs_uuid search_label help boot configfile echo efi_gop

Nun startet in das EFI-Menü im erweiterten Modues, geht auf Beenden und wählt: EFI Shell aus Datenträger starten. Nach kurzem Laden sollte Grub 2 starten. Jetzt seit ihr im EFI-Modues in eurem Betriebsystem. Um Grub in das EFI-Menü aufzunehmen macht ihr folgendes:

Code:

# grub-probe --target=device /boot/efi/efi/grub/grub.efi

Code:

   # modprobe efivars

Falls ihr beim Laden von efivars eine Fehlermeldung bekommen habt, seit ihr nicht im EFI-Modus oder euer Kernel unterstützt efivars nicht. Euer Kernel sollte folgende Module haben:

Enable CONFIG_EFI,CONFIG_FB_EFI,CONFIG_EFI_VARS,CONFIG_EF I_PARTITION

Code:

   # efibootmgr --create --gpt --disk /dev/sda --part 1 --write-signature --label "GRUB2" --loader "\\EFI\\grub\\grub.efi"

Bei label könnt ihr den Namen wählen, den ihr im EFI-Menü angezeigt bekommen wollt.

Nun startet euer Betriebsystem neu und wählt im EFI-Menü GRUB2, falls Grub nicht starten sollte, probiert folgendes:

Code:

   cp /boot/efi/efi/grub/grub.efi /boot/efi/shellx64.efi

oder

Code:

   cp /boot/efi/efi/grub/grub.efi /boot/efi/EFI/shellx64.efi

oder

Code:

   cp /boot/efi/efi/grub/grub.efi /boot/efi/EFI/shell/shellx64.efi

4) Bugs

Wenn ihr beim Booten folgende Meldung bekommt:
error: no suitable mode found
Booting however

Kopiert

Code:

   # cp /usr/share/grub/unicode.pf2 /boot/efi/efi/grub/

und fügt

Code:

insmod efi_gop
 insmod efi_uga
 insmod font

 if loadfont ${prefix}/unicode.pf2
 then
     insmod gfxterm
     set gfxmode=auto
     set gfxpayload=keep
     terminal_output gfxterm
 fi

in /boot/efi/EFI/grub/grub.cfg hinzu.



5) Windows 7 in Grub 2 aufnehmen

Falls Windows schon installiert ist, müsst ihr nur noch die UUID in der FAT32 Partition des Windows Bootmanagers finden.

Code:

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

088f-0db9

Jetzt könnt ihr den Menüeintrag in /boot/efi/EFI/grub/grub.cfg vornehmen:

Code:

menuentry "Windows x86_64 UEFI-GPT" {
    search --fs-uuid --no-floppy --set=root 088f-0db9
    chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}

6) Quellen

https://wiki.archlinux.org/index.php/GRUB2#UEFI_systems

https://wiki.archlinux.org/index.php...ware_Interface