2091648

Uefi statt Bios: Das muss man beim Linux-Boot beachten

30.07.2015 | 12:30 Uhr |

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.

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.

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.

Ist in der Firmware der „CSM-Modus“ (oder „Legacy- Modus“) aktiviert, dann können Sie im Bootmenü des PCs wählen, in welchem Modus ein Live-System gestartet wird.
Vergrößern Ist in der Firmware der „CSM-Modus“ (oder „Legacy- Modus“) aktiviert, dann können Sie im Bootmenü des PCs wählen, in welchem Modus ein Live-System gestartet wird.

Vergleich: Anatomie des Systemstarts

Uefi bietet trotz anfänglicher Probleme auf bestimmter Hardware einige Vorteile gegenüber dem Bios : 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.

Uefi: Anders als das Bios kann Uefi kann 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“.

Ein verlässlicher Indikator, in welchem Modus ein Linux-System läuft, ist dieses Kommando. Bleibt die Ausgabe leer, dann befindet sich das System im Bios-Modus.
Vergrößern Ein verlässlicher Indikator, in welchem Modus ein Linux-System läuft, ist dieses Kommando. Bleibt die Ausgabe leer, dann befindet sich das System im Bios-Modus.

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 mal 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.

Das Kommando mkisofs aus den Schily Tools kann für ISO-Dateien zwei Bootsektoren für den Bios-Start und für Uefi erzeugen.
Vergrößern Das Kommando mkisofs aus den Schily Tools kann für ISO-Dateien zwei Bootsektoren für den Bios-Start und für Uefi erzeugen.

Optische Medien: Booten von CD und DVD

Der Start von optischen Medien erfolgt über eine andere Methode, die in der „El-Torito“-Spezifikation von 1995 festgelegt ist. Anfangs nutzte der Start von CD eine Floppy-Emulation, bei der das optische Laufwerk für das Bios wie ein Diskettenlaufwerk aussehen musste. Seit 1999 ist es aber üblich, CDs/DVDs ohne Emulation zu booten. Sowohl Bios als auch Uefi starten über die „El-Torito“-Spezifikation, erwarten jedoch unterschiedliche Bootloader. Bis vor kurzem war es ein umständliches Unterfangen, sowohl den El-Torito-Bootsektor von Isolinux als auch jenen von Grub 2 in einem einzigen Image unterzubringen.

Bequemer wird das jetzt mit den neueren Versionen der Schily Tools von Jörg Schilling, die im Quellcode unter http://sourceforge.net/projects/schilytools/ zur Verfügung stehen und manuell kompiliert werden müssen. Das Kommandozeilen-Tool mkisofs, das aus einem Verzeichnisbaum eine ISO-Datei erstellt, kann beide El-Torito-Bootsektoren in das Image schreiben. Der Parameter

-eltorito-platform "x86" -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table

nimmt dabei den Bootsektor für das Bios mit auf, hier die Datei „isolinux.bin“, während der darauf folgende Parameter

-eltorito-alt-boot -eltorito-platform "efi" -b boot/grub/efi.img -no-emul-boot

den Bootsektor „efi.img“ von Grub 2 für Uefi definiert. Dieses Beispiel orientiert sich an den Dateien, die Ubuntu nutzt. Da die Dateien und Pfade bei anderen Distributionen abweichen, bleibt das Bios-Uefi-unabhängige Booten von CD/DVD eine Bastel- und Rechercheaufgabe, die viel Detailwissen abverlangt.

0 Kommentare zu diesem Artikel
2091648