Login
Newsletter
Werbung

Di, 18. August 2015, 14:00

Mit UEFI statt BIOS booten

Aktuelle Linux-Distributionen können in ihrer 64-Bit-Variante sowohl unter dem neuen UEFI als auch mit herkömmlichen BIOS starten. Der Beitrag zeigt praktisch und theoretisch, wie dies im Detail funktioniert.

Version 2.6.25 des Linux-Kernels erhielt im Jahr 2008 die nötigen Fähigkeiten, mit UEFI-Systemen umzugehen. Die Aufnahme konnte so früh erfolgen, da Intels Referenz-Version von UEFI mit dem Namen »Tianocore« als Open-Source-Projekt unter der BSD-Lizenz veröffentlicht und der Quelltext unter http://tianocore.sourceforge.net einsehbar ist.

Legacy-Modus der Firmware

David Wolski

Legacy-Modus der Firmware

Bis alle Tools zur Einrichtung eines UEFI-Bootloaders fertig waren und Linux-Distributionen ihre Installationsprogramme erweitert hatten, dauerte es noch eine Weile, bei Ubuntu beispielsweise bis 2011 (Version 11.04). Heute aber können alle populären Distributionen mit UEFI umgehen, viele auch mit dessen Erweiterung UEFI Secure Boot.

Vergleich: Anatomie des Systemstarts

Der PC bootet schneller, und es ist einfacher, Systeme parallel zu installieren. Aus Gründen der Abwärtskompatibilität und jenen Anwendern zuliebe, für die UEFI nur unnötigen Aufwand bedeutet, können Linux-Distributionen ihre Live-Systeme sowohl über BIOS als auch über UEFI booten und liefern dafür zwei Bootmechanismen auf einem Datenträger mit.

BIOS: Nach der Hardware-Initialisierung und einem internen Selbsttest überprüft das BIOS anhand der eingestellten Bootreihenfolge die vorhandenen Datenträger auf einen Bootsektor. Das BIOS kann Geräte und Gerätetypen unterscheiden, jedoch nicht auf Partitionen und Dateisysteme zugreifen. Von Festplatten lädt es einfach die ersten 512 Bytes des Master Boot Record (MBR). Diese Methode hat sich seit dem IBM-PC von 1983 nicht wesentlich geändert. Der Bootsektor enthält ein winziges Programm, das die aktive Partition ermittelt und von dort den Volume Boot Record (VBR) startet. Dieser wiederum lädt den Bootloader, der den Betriebssystemstart übernimmt. Aus historischen Gründen nutzen Linux-Distributionen für den BIOS-Boot den Bootloader Isolinux/Syslinux.

Ermitteln des Firmware-Modus

David Wolski

Ermitteln des Firmware-Modus

UEFI: Anders als das BIOS kann UEFI mit MBR-Partitionen und dem FAT-Dateisystem umgehen. Es liefert seinen eigenen Bootmanager mit, der die festen Datenträger nach einer EFI-System-Partition absucht, die mit FAT32 formatiert ist. Auf dieser Partition sind die EFI-Bootloader der Betriebssysteme hinterlegt. Für Grub 2, der üblicherweise den Boot im UEFI-Modus übernimmt, ist dies die Datei grubx64.efi.

Boot von USB-Datenträgern

Ein Systemstart von USB-Medien unterscheidet sich über ein BIOS nicht wesentlich vom Booten von Festplatte, allerdings sind bei diesen Medien die ersten 512 Bytes nicht in einem MBR untergebracht, sondern im Volume Boot Record (VBR). Zudem muss das Dateisystem in der Partitionstabelle ein Ein-Byte-Boot-Flag haben, um vom Bios als bootfähig erkannt zu werden. Bei der Erstellung eines bootfähigen USB-Sticks anhand der ISO-Datei einer Distribution wie Ubuntu muss man sich darum nicht kümmern, weil die ISO-Datei den VBR als auch das Boot-Flag mitbringt.

Für den UEFI-Boot von USB ist noch weniger nötig: Ist der Datenträger mit FAT32 formatiert, dann erkennt die Firmware das Dateisystem und sucht selbständig nach einem Bootloader. Dazu muss der USB-Datenträger noch nicht einmal das spezielle Boot-Flag haben. Nur die Bootloader bootx64.efi und grubx64.efi müssen im Verzeichnis /efi/boot/ liegen, damit UEFI sie findet.

Startfähige USB-Sticks oder Speicherkarten für den UEFI-Boot sind deshalb auch ohne spezielle Werkzeuge schnell erstellt: Es genügt im einfachsten Fall, den gesamten Inhalt der ISO-Datei auf den Datenträger zu kopieren. Das funktioniert etwa mit dem Dateimanager Midnight Commander, der ISO-Dateien wie ein Verzeichnis öffnen kann. Sie können eine ISO-Datei aber auch manuell in ein zuvor erstelltes Verzeichnis einhängen und dann im Terminal auf den USB-Stick kopieren:

sudo mount -o loop /home/user/image.iso /mnt/iso
sudo cp -rf /mnt/iso /media/usb-stick

Damit auch ein BIOS von diesem Datenträger booten kann, müssen Sie das Boot-Flag anhand des Gerätenamens mit dem Tool Parted setzen:

sudo parted /dev/sd[X] set 1 boot on

Für den Platzhalter [X] setzen Sie die tatsächliche Gerätekennung ein, die Sie mit dem Kommando lsblk herausfinden. Nun braucht der USB-Stick noch einen Bootsektor im VBR, den Sie mit dem Werkzeug Syslinux schreiben. In Ubuntu ist Syslinux vorinstalliert, in allen anderen Distributionen aber in jedem Fall über die Paketquellen verfügbar. Der Befehl lautet:

sudo dd conv=notrunc bs=440 count=1 if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sd[X]

Den Bootsektor mbr.bin liefert Syslinux selbst mit.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung