Seit wenigen Tagen besitze ich einen PC mit EFI-Mainboard (ASUS P8H67-M Evo). Dieser Beitrag fasst meine bisherigen Erfahrungen mit EFI zusammen. Installiert habe ich unter anderem Ubuntu 11.10, Fedora 16, Scientific Linux 6.1 sowie der Vollständigkeit halber Windows 8 Preview.
Update: Zu diesem Artikel gibt es ein Update bzw. eine Fortsetzung
UEFI-Grundlagen
Auf Apple-Rechnern hat das Extensible Firmware Interface (EFI) schon vor Jahren das traditionelle BIOS abgelöst. Auf »gewöhnlichen« PCs etabliert sich nun allmählich dessen Nachfolger Unified EFI (UEFI). Der Hauptvorteil von (U)EFI gegenüber dem BIOS besteht darin, dass es mühelos mit großen Festplatten (> 2 TByte) und mit GUID Partition Tables (GPTs) zurechtkommt. Gute Grundlageninformationen sind hier zu finden:
Auf das viel diskutierte UEFI Secure Boot-Verfahren gehe ich hier mangels Testmöglichkeiten nicht ein. Zudem beziehe ich mich hier explizit auf PCs, nicht auf Macs. Apple-Rechner verwenden zwar prinzipiell auch EFI, aber dort gelten diverse Sonderregeln. (Sie haben doch nicht erwartet, dass EFI irgendetwas vereinfachen würde, oder?)
Beachten Sie, dass aktuelle PC-Mainboards generell UEFI unterstützen, auch wenn in der Produktbezeichnung und im Handbuch zumeist einfach von EFI die Rede ist. Diese Begriffe werden vielfach synonym verwendet -- so auch im weiteren Verlauf dieses Artikels.
Wozu EFI?
Teil des EFI-Standards ist die Unterstützung von GUID Partition Tables, die wiederum zur vollständigen Nutzung von Festplatten mit mehr als 2 TByte Speicherplatz erforderlich sind. Wenn Sie mit Windows arbeiten und GPT nutzen, ist EFI zwingend erforderlich.
Für Linux gilt dies aber nicht! Selbst mit relativ alten BIOS-Mainboards ist es problemlos möglich, auf einer großen Festplatte eine GPT einzurichten und Linux zu installieren. (Wenn als Bootloader GRUB 2 zum Einsatz kommt, sollten Sie aber für die GRUB-Installation eine eigene EFI-BIOS-Partition vorsehen.)
Kurzum: Aus Linux-Sicht ist EFI momentan selten erforderlich. Die meisten EFI-Mainboards sind in der einen oder anderen Weise BIOS-kompatibel. Die Verwendung des BIOS-Modus ist mit keinen Nachteilen verbunden und erspart häufig eine Menge Installationsärger. (Die EFI-Kompatibilität vieler Linux-Distributionen lässt noch sehr zu wünschen übrig ...)
Allerdings gibt es schon jetzt vereinzelt (Notebook-)Mainboards, die ausschließlich EFI unterstützen. Auf solchen Systemen ist ein BIOS-Bootprozess nicht mehr möglich, eine EFI-Installation also zwingend. Vermutlich werden solche Systeme in Zukunft häufiger -- und spätestens dann müssen Sie eine EFI-kompatible Linux-Distribution installieren.
ASUS EFI BIOS
Die BIOS-Implementierungen aller Mainboards sind recht ähnlich zueinander. Für EFI gilt dies aber noch nicht! Über den eigentliche EFI-Standard implementieren viele Mainboard-Hersteller diverse Zusatzfunktionen, die dem Anwender das Leben erleichtern sollen. Das Ergebnis: EFI-Mainboards verhalten sich vollkommen unterschiedlich, die Konfigurationsmöglichkeiten sehen ganz anders aus, und eine einheitliche Beschreibung von UEFI-Mainboards ist schlicht unmöglich.
Deswegen weise ich darauf hin, dass sich meine praktischen EFI-Erfahrungen momentan auf ein einziges Mainboard beschränken, das ASUS P8H67-M Evo. Dessen EFI-Implementierung trägt nicht ganz zu unrecht die Bezeichnung »EFI BIOS«: Es unterstützt nämlich sowohl den traditionellen BIOS-Bootprozess als auch die neueren EFI-Verfahren.
Erstaunlicherweise gibt es keine Möglichkeit, zwischen BIOS und EFI umzuschalten. Wenn Sie beim Rechnerstart F8 drücken, erscheinen im Bootmenü alle Datenträger (Festplatten, DVDs, USB-Sticks etc. für den BIOS-Start), als auch alle auf diesen Datenträgern installierten EFI-Systeme. In den Konfigurationsdialogen des EFI BIOS können Sie einstellen, welches System standardmäßig gestartet werden soll. Anfänglich ist diese Vorgehensweise ein wenig verwirrend. Der Vorteil besteht darin, dass die parallele Installation und Verwendung von Betriebssystemen via BIOS und EFI problemlos möglich ist.
EFI-Installationen durchführen
Die Installation eines Betriebssystem startet ja immer von einer CD, DVD oder einem USB-Stick. Vorsicht ist aber bei Mainboards geboten, die sowohl den herkömmlichen BIOS-Start als auch EFI unterstützen: Im Bootmenü scheint das Installationsmedium in der Regel doppelt auf, einmal mit der gewöhnlichen Bezeichnung und einmal mit dem vorangestellten Wort EFI oder UEFI. Sie müssen das Bootmedium unbedingt in der EFI-Variante starten!
Die meisten aktuellen Linux-Distributionen sehen mittlerweile eine EFI-Installation vor. Wenn dies nicht der Fall ist, fehlt im Bootmenü Ihres EFI-Mainboards der EFI-Booteintrag. Bei solchen Distributionen ist Installation im EFI-Modus unmöglich.
Ein (Problem-)Fall für sich ist die Installation vom USB-Stick: Die meisten ISO-Images von Linux-Distributionen können mittels dd oder mit diversen Hilfsprogrammen auf einen USB-Stick übertragen werden, um eine Installation ohne DVD-Laufwerk durchzuführen. Leider funktioniert dies bei vielen Distributionen nur für den BIOS-Modus. Der Start einer EFI-Installation per USB-Stick ist mir bei meinen Tests ausschließlich mit Ubuntu 11.10 gelungen. (Bei meinem Mainboard wird der USB-Stick dann zweimal im Bootmenü angezeigt, einmal normal und einmal mit dem vorangestellten Schlüsselwort UEFI. Wiederum muss die UEFI-Variante ausgewählt werden.) Es ist zu hoffen, dass auch andere Distributionen in Zukunft Ihre ISO-Medien EFI-USB-kompatibel einrichten.
EFI-Partition
Entscheidend dafür, dass der EFI-Bootprozess funktioniert, ist eine EFI-Partition auf der Festplatte. Microsoft empfiehlt, diese Partition als erste Partition auf der Festplatte einzurichten, obwohl der EFI-Standard dies nicht verlangt. Die Partition muss nicht besonders groß zu sein, ca. 100 bis 200 MByte reichen. (Die von mir getesteten Linux-Distributionen beanspruchen für den EFI-Bootloader jeweils weniger als ein MByte. Deutlich mehr Platz beansprucht der Windows 8 Preview mit beachtlichen 30 MByte.)
Auf der EFI-Partition muss ein VFAT-Dateisystem eingerichtet werden. Außerdem muss die Partition speziell markiert sein. Wenn die Festplatte eine GPT hat, muss die Partition mit der UID C12A7328-F81F-11D2-BA4B-00A0C93EC93B gekennzeichnet werden. Am einfachsten gelingt das mit parted, indem das boot-Flag der Partition gesetzt wird. Bei der herkömmlichen MBR-Partitionierung lautet die korrekte ID 0xEF.
Wichtig: Die EFI-Partiton muss am Mount-Punkt /boot/efi in das Linux-Dateisystem eingebunden werden! Bei einer manuellen Partitionierung während einer Linux-Installation müssen Sie sich darum selbst kümmern; bei einer automatischen Partitionierung sollten Sie auf jeden Fall überprüfen, ob das Installationsprogramm schon ausreichend EFI-Intelligenz hat. Bei meiner Fedora-Installation hat sich das zweimal als Stolperstein erwiesen (siehe unten).
Ubuntu 11.10 installieren
Als erste Distribution habe ich Ubuntu 11.10 installiert. Die Festplatte (genaugenommen eine SSD) war vor Beginn der Installation unbenutzt. Als ersten Schritt habe ich im Ubuntu-Live-System dort eine GUID Partition Table eingerichtet. (Vorsicht, mit den folgenden Kommandos löschen Sie die gesamte Festplatte!)
parted /dev/sda
mklabel gpt
quit
Danach habe ich das Ubuntu-Installationsprogramm gestartet, wobei ich wie immer die manuelle Partitionierung verwendet habe. Dabei ist Partitionstyp EFI vorgesehen, so dass das Anlegen der EFI-Partition vollkommen unkompliziert ist. Auch sonst bereitet die Installation keinerlei Probleme, der erste Boot-Prozess verläuft plangemäß. Das Bootmenü meines ASUS-Mainboards sieht jetzt den Eintrag ubuntu vor.
Intern verwendet Ubuntu die EFI-Variante von GRUB 2. Die Grub-Konfigurationsdatei befindet sich wie üblich in /boot/grub/grub.cfg. Außerdem richtet das Installationsprogramm in der EFI-Partition (unter Ubuntu sichtbar als /boot/efi) das Unter-Verzeichnis EFI/ubuntu ein und kopiert dorthin die Datei grubx64.efi.
Fedora 16 installieren
Die ISO-Medien von Fedora 16 sind nicht EFI-kompatibel (siehe hier). Auch von der DVD gelingt die Installation erst im dritten Anlauf. Der Grund für das Scheitern der beiden ersten Versuche bestand darin, dass ich (wie üblich die manuelle Partitionierung verwendend) nicht daran gedacht habe, die von der Ubuntu-Installation bereits existierende EFI-Partition unter /boot/efi in den Verzeichnisbaum einzubinden. Schön wäre natürlich, wenn das Installationsprogramm auf diesen offensichtlichen Fehler hinweisen würde.
Auch Fedora 16 verwendet die EFI-Variante von GRUB 2. Im neuen Verzeichnis /boot/efi/EFI/redhat landen die Dateien device.map, grub.conf und grub.efi. Die Datei /etc/grub.conf ist ein Link auf /boot/efi/EFI/redhat/grub.conf.
Scientific Linux 6.1 installieren
Kein EFI-Glück hatte ich mit Scientific Linux. Während RHEL 6 offensichtlich eine EFI-Installation unterstützt (was ich allerdings nicht testen konnte), sind die ISO-Medien von Scientific Linux nicht EFI-tauglich (siehe auch hier im SL-Forum). Schade!
Davon abgesehen verlief die Installation auf meinem Rechner in eine GPT-Partition unproblematisch. GRUB 0.97 wird standardmäßig in den MBR der Festplatte installiert. Das ASUS-EFI-BIOS erkennt den Bootsektor dort und startet Scientific Linux im BIOS-Modus. Alternativ lässt sich Scientific Linux nach einem update-grub-Kommando unter Ubuntu auch über dessen EFI-GRUB starten.
Theoretisch sollte es möglich sein, den von Scientific Linux eingesetzten GRUB 0.97 nachträglich für EFI einzurichten. Auf entsprechende Tests habe ich aber vorerst verzichtet. (Die originale GRUB-Version 0.97 ist zwar nicht EFI-kompatibel, wohl aber die in Fedora 11 bis 15, RHEL 6, CentOS 6 und Scientific Linux 6 modifizierten Versionen von GRUB 0.97.)
Windows 8 Preview installieren
Aus purer Neugier habe ich schließlich noch die Preview-Version von Windows 8 installiert. Am DVD-Laufwerk geht wiederum kein Weg vorbei: Zwar kann die ISO-Datei problemlos auf einen USB-Stick übertragen werden, damit ist dann aber nur eine Installation im BIOS-Modus und nur auf einer MBR-partitionierten Festplatte möglich. (Und so werde ich wohl weiterhin 30, 40 DVDs pro Jahr brennen, ein oder zwei Installationen damit durchführen und die DVDs dann wegwerfen. Eine selten sinnlose Vergeudung von Ressourcen ...)
Davon abgesehen verläuft die Installation unproblematisch. Windows verwendet die bereits vorhandene EFI-Partition anstandslos und richtet außerdem zwei neue Partitionen ein. Eine davon dient als Microsoft reserved partition und ist lediglich 128 MByte groß. Mir ist nicht klar geworden, wofür die Partition dient, sie ist aber gemäß der Microsoft-Dokumentation auf GTP-Festplatten unbedingt erforderlich. Die andere Partition füllt standardmäßig die gesamte Festplatte, kann aber später im laufenden Betrieb ohne Probleme verkleinert werden.
Auch Windows 8 verwendet die EFI-Partition, um Bootdateien dort zu speichern (in den Unterverzeichnissen Boot und Microsoft) . Der Platzbedarf ist mit 30 MByte aber ungleich höher als unter Linux.
Positiv ist zu vermerken, dass sich die Parallelinstallation von Windows und Linux auf einem EFI-System mit GPT-Festplatte als vollkommen unproblematisch erwiesen hat.
efibootmgr
In Linux-Systemen, die im EFI-Modus installiert und gestartet wurden, können über das Kommando efibootmgr diverse EFI-Einstellungen verändert werden. Diese Einstellungen werden in einem nicht-flüchtigen Speicher (NVRAM) des Mainboards gespeichert. efibootmgr dient primär dazu, neue EFI-Boot-Einträge einzurichten, vorhandene Einträge zu entfernen und die Standard-Boot-Reihenfolge festzulegen. Weitere Details sowie mehrere Beispiele können Sie in der man-Seite nachlesen.
Wenn das Kommando ohne weitere Optionen mit root-Rechten ausgeführt wird, listet es die EFI-Boot-Einträge sowie einige weitere Parameter des EFI-Bootloaders auf. Auf meinem Rechner sieht das Ergebnis so aus:
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0005,0003,0001,0002
Boot0000* ubuntu
Boot0001* Hard Drive
Boot0002* CD/DVD-Laufwerk
Boot0003* Windows Boot Manager
Boot0005* Fedora
EFI-Shell
Das ASUS-BIOS-EFI bietet den merkwürdigen Menüeintrag Launch EFI Shell from filesystem device. Das macht natürlich neugierig. Erste Experimente führten nur zu einer Fehlermeldung, dass die Datei nicht gefunden wurde. Google verrät dann, dass die Shell zuerst in Form der Datei Shellx64.efi in der EFI-Partition installiert werden muss (also in /boot/efi/Shellx64.efi unter Linux). Es gibt eine kostenlose, BSD-lizenzierte EFI-Shell, die im Rahmen des Tianocore-Projekt von Intel entwickelt wurde. Sie können die Shell hier herunterladen.
Die Shell stellt diverse grundlegende Kommandos zur Verfügung. help -b liefert seitenweise die zur Auswahl stehenden Kommandos auf, help kommando beschreibt das betreffende Kommando näher. Der Nutzen der EFI-Shell hat sich mir allerdings nicht erschlossen.