Aus SatriaWiki
Wechseln zu: Navigation, Suche

GRUB2 unter Windows installieren

Möchte man andere Betriebssysteme neben Windows installieren, bietet sich GRUB2 an, das mit UEFI kompatibel ist. Es gibt also einen GRUB2-Installer, der im UEFI einen weiteren Starteintrag erstellt, mit dem direkt der EFI GRUB2-Loader gestartet wird.

  1. Hier gibt es GRUB2 for Windows. In beliebiges Verzeichnis entpacken.
  2. Zunächst muss die EFI-Systempartition verfügbar gemacht werden (s. EFI Partition verfügbar machen). Angenommen, sie ist als Laufwerk A: gemounted.
  3. Aus einer Administrator-DOS-Box im GRUB2-Verzeichnis führt man nun aus:
    grub2-install --target=x86_64-efi --efi-directory=A: --boot-directory=A:\EFI\BOOT --bootloader-id=NAME
    wobei --boot-directory und --bootloader-id frei gewählt werden können und angenommen wird, es handelt sich um ein x86 64bit System.
  4. Wenn alles fehlerfrei gelaufen ist, gibt es jetzt im UEFI einen weiteren Starteintrag für den GRUB2 EFI-Loader, und der Windows-Starteintrag wurde davon nicht berührt.
  5. Im Verzeichnis A:\EFI\BOOT\grub muss jetzt eine grub.cfg erzeugt und mit Inhalt gefüllt werden, damit GRUB2 beim Booten auch ein Menü anzeigen kann. --> https://www.gnu.org/software/grub/manual/grub/grub.html
  6. Das gleiche wird für die Installation auf einem Wechselmedium (USB-Stick) ausgeführt, allerdings mit dem zusätzlichen Parameter --removable

GRUB2 Config

USB-Stick suchen

Außerhalb der menuentry Blöcke, steht das hier:

insmod search_fs_uuid
search --no-floppy --set=usb --fs-uuid 0123-9876

0123-9876 ist die Datenträger-Seriennummer, die per chkdsk herausgefunden werden kann.

In den menuentry Blöcken ist ($usb) dann verwendbar und stellt den USB-Stick dar.

Win10 PE ISO image booten

Man benötigt wimboot

Der menuentry Block soll ungefähr so aussehen:

menuentry 'Windows 10 PE ISO' {
  insmod part_gpt
  insmod fat
  set isofile="Win10PE.iso"
  search --set=usb --file $isofile
  loopback loop ($usb)$isofile
  linux16 /EFI/BOOT/grub/wimboot rawbcd
  initrd16 \
    newc:bootmgr:(loop)/BOOTMGR \
    newc:bootmgr.exe:(loop)/bootmgr.exe \
    newc:bcd:(loop)/Boot/bcd \
    newc:segmono_boot.ttf:(loop)/Boot/fonts/segmono_boot.ttf \
    newc:segoe_slboot.ttf:(loop)/Boot/fonts/segoe_slboot.ttf \
    newc:segoen_slboot.ttf:(loop)/Boot/fonts/segoen_slboot.ttf \
    newc:wgl4_boot.ttf:(loop)/Boot/fonts/wgl4_boot.ttf \
    newc:boot.sdi:(loop)/Boot/boot.sdi \
    newc:boot.wim:(loop)/sources/boot.wim
}

GRUB environment variables

Einige Dinge, wie z.B. timeout und default Startblock können außerhalb der grub.cfg gepflegt werden. In der grub.cfg sollte nur am Anfang stehen:

 load_env

Diese Variablen werden in einem Blockfile neben der grub.cfg gespeichert, welches so erzeugt wird:

 grub-editenv A:\EFI\BOOT\grub\grubenv create

vorausgesetzt, A:\EFI\BOOT\grub\ ist das korrekte Verzeichnis der grub.cfg.

Werte setzen geht so:

 grub-editenv A:\EFI\BOOT\grub\grubenv set timeout=5
 grub-editenv A:\EFI\BOOT\grub\grubenv set saved_entry=0

saved_entry definiert hierbei persistent den Standardeintrag, der nach Ablauf des Countdowns automatisch geladen wird.

Quellen

https://www.gnu.org/software/grub/manual/grub/grub.html

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