FreeBSD-11.0 amd64 memstick Korrektur für UEFI-Boot

STB-3

New Member
Problem(e):
=======

- USB Stick mit FreeBSD 11 bootet nicht mit UEFI,
- oder "hängt" während Bootvorgangs,
- oder Reset während des Bootvorgangs


Alle Angaben beziehen sich konkret auf das

>> FreeBSD-11.0-RELEASE-amd64-mini-memstick.img <<

wahrscheinlich sind die Probleme/Lösungen auf alle bisherigen FreeBSD-11.0-xxx Images übertragbar. Ein Test mit den aktuellenFreeBSD-11.0-STABLE-amd64 Image erbrachte identische Ergebnisse.


Die Reparatur wurde unter (Arch)Linux durchgeführt, sollte aber auch mit jeder anderen Linux Distribution funktionieren. FreeBSD wurde aufgrund der möglichen Probleme mit den FAT Dateisystem (s.u.) nicht verwendet.

Getestet wurde mit einem älteren HP 6200 (Core i3). Da es nur wenige BIOS/UEFI Hersteller gibt (d.h. bei PC´s AMI/Award/Phoenix), ist die Marke HP hier relativ unerheblich und die Ergebnisse sollten übertragbar sein.



1. Problem: Die GPT Partitionierung
=====================

Mit 11.0 wurde die GPT Partionierung bei den USB Stick Images eingeführt, also

der Datenträger enthält am Anfang
- einen Protective MBR
- den primären GPT Header
und am Ende
- den sekundären GPT Header

Genau hier liegt das Problem; da die Stickgröße den Image-Ersteller nicht bekannt sein kann, folgt der sekundäre GPT Header hier direkt nach der letzten Partition. Der "last usable sector" wird bei unseren Image mit 612991 angegeben (also nach ca. 300MB), während er z.B. bei einem 8GB Stick real bei 15661056 liegt. (Sektorgröße 512 Byte).

Erste Korrektur:

gdisk (für GPT Partion, nicht fdisk) aufrufen

gdisk /dev/sd<X> .................................. sd<X> mit den tatsächlichen device ersetzen, z.B. sdc

zur Kontrolle verify <v> ....................... Ergebnis s.o. "Identified 1 problems!"
ins "experts' menu" wechseln <x>
Reparatur mit <e> ................................ "Relocating backup data structures to the end of the disk"
Neue Partitionsdaten speichern <w> ... Die 4 Partitionen auf dem Stick werden hierbei nicht zerstört, Warnung ignorieren.



2. Problem: die EFI Partition
=================

Die erste Partition (= EFI Partition) ist zwangsweise eine FAT Partition, die den Bootloader im Verzeichnis EFI/BOOT enthält. So die UEFI Spezifikationen.

Zitat aus <wiki.freebsd.org/UEFI>
"FreeBSD's FAT32 code appears to sometimes create filesystems that the UEFI code can't properly read"

Wir sichern also die Daten aus der Partition, erstellen das FAT Dateisystem mit Linux neu und spielen den zuvor gesicherten Bootloader wieder ein. (sudo/su hier nicht mit angegegeben)

mkdir tmp
mount /dev/sd<X>1 tmp ........... sd<X>1 mit der tatsächlichen Partition ersetzen, z.B. sdc1 Linux erkennt den Partionstyp, deshalb kein -t Parameter
cd tmp
tar cvf ../EFI-backup.tar EFI/ ....... EFI-Verzeichnis mit Bootloader sichern
cd ..
umount tmp
mkfs.vfat /dev/sd<X>1 ............. EFI/FAT Dateisystem neu erstellen; nur die erste Partition, 1 nicht vergessen!
mount /dev/sd<X>1 tmp
cd tmp
tar xvf ../EFI-backup.tar ............. Bootloader inkl. Verzeichnis wieder zurücksichern
cd ..
sync
umount tmp



Somit sollte der FreeBSD-11.0 Memstick jetzt grundsätzlich bootfähig sein,

<secure boot> im UEFI Setup muss natürlich ausgeschaltet sein,
sämtliche "legacy" Booteinträge im BIOS/UEFI zum Test ausschalten
Mischbetrieb USB2/USB3 vermeiden (will sagen, der billige USB3 Stick am USB2 Port)

Auf mögliche USB Probleme beim Booten achten (evt. boot -v), Stichwort "USB Quirks" (z.B. NO_6_BYTE), aber das ist ein anderes Thema...
 
Zuletzt bearbeitet:
Wow, solch ein Beitrag als Foreneinstieg :)

Vielleicht ist das etwas für das Wiki.

Viele Grüße,
Holger
 
Zurück
Oben