Universal stand-alone grub für BIOS und EFI auf USB flashkey und internen HDD und SSD
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Achtung!
Sicherheitshinweis:
Ein wie hier beschrieben verwendeter grub
ist in Bezug auf Sicherheit wie ein Fremdpaket zu betrachten, da die Patches nicht mehr automatisch einfließen. Im Internet lassen sich Hinweise auf eine Sicherheitslücke 🇩🇪 in grub
Versionen 1.98 (12/09) bis 2.02 (12/15) finden.
Für den gefahrlosen Umgang mit den Partitionierungswerkzeugen empfiehlt sich die Verwendung eines LiveSystems bei gleichzeitiger Entfernung aller Datenspeichermedien.
An verschiedenen Stellen ist die Bezeichnung für den verwendeten flashkey explizit mit sdd
angegeben. Bei Verwendung der hier genannten Befehle ist unbedingt die jeweils den eigenen Gegebenheiten entsprechende Device-Bezeichnung zu wählen.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Vorwort¶
Grub ist ein sehr vielseitiger Bootloader für PC-Betriebssystem - vornehmlich Linux -, und findet u.a. Einsatz bei Ubuntu. Dabei wird er während der Installation automatisch mit installiert und über Skripte konfiguriert.
Allerdings hat Grub durchaus weitere Fähigkeiten:
kann unabhängig vom O/S betrieben werden
kann mittels
loop
Funktion iso-Dateien direkt booten
Diese Eigenschaften kommen hier zum Einsatz.
Die Einführung von EFI und Grubs Fähigkeit, auch bei solchen Konfigurationen, welche ganz andere Voraussetzungen als bei BIOS/MBR erfordern, booten zu können, führt bei den gängigen USB-Bootstick Erstellern zur Notwendigkeit, sich entscheiden zu müssen: Entweder EFI oder BIOS.
Für das Erzeugen eines Live-USB flashkey werden (hier bei ubuntuusers.de) meistens zwei Vorgehensweisen empfohlen:
Basis O/S Windows: ▶ Rufus 🇩🇪 ( → Download ⮷)
kann fast alles, außer Persistenz (kann man aber bequem unter Linux LiveSystem einrichten). Anmerkung: Das Einrichten einer
casper-rw
Datei gem. externem Link konnte nicht erfolgreich nachvollzogen werden.
Basis O/S Linux: ▶ dd ( → Live-USB-Stick-erstellen)
gesamter verfügbarer Speicherplatz ist belegt.
Zweck¶
Im Artikel wird beschrieben, wie man einen Live-USB flashkey erstellen kann, der sowohl auf BIOS, wie auch auf EFI Sytemen lauffähig ist. Ferner kann der flashkey um Persistenz erweitert werden, ggf. vorhandener freier Speicherplatz kann nach Belieben Verwendung finden, u.a. natürlich für verschiedene iso-Dateien.
Voraussetzungen¶
laufendes Linux/Ubuntu (auch LiveSystem), ggf. mit Internetverbindung
ein für die gewünschte(n) Distribution(en) ausreichend großer flashkey
die Programme
gparted
undgdisk
sind im LiveSystem vorhandengrub-efi
bzw.grub-pc
ist je nach System (EFI - legacy) ggf. nachzuinstallieren
Vorbereitung¶
Hinweis:
Anbei eine Liste der bei der Erstellung und Erprobung dieser Seite verwendete_Hardware ⮷
Partitionieren des flashkey¶
Zum Partitionieren eignet sich sowohl das im aktuellen Ubuntu-LiveSystem vorhandene GUI-Programm gparted
wie auch das CLI-Programm gdisk
.
(Hinweis: Beide, gdisk
und gparted
funktionieren nicht zuverlässig (mit jedem Flashkey) wie hier erforderlich beim Anlegen von Partitionen. Siehe Bild einer mißglückten Partitionierung → mit_gdisk_angelegte_Partitionen.png)
Für die Einrichtung des virtuellen MBR wird gdisk
benötigt.
cruzer flashkey mit bios_grub und weiterer 4. Partition |
Auf dem Datenträger müssen Partitionen angelegt werden. Dazu ist zunächst eine Partitionstabelle notwendig, entweder MBR/MPT oder GPT (bei Wechsel des Partitionsschemas (MBR/MPT → GPT) s. Problembehebung). Je nachdem unterscheiden sich die fertigen Datenträger um genau eine unformatierte Partition von 1M Größe am Anfang.
Die Partitionen können z.B. mit gparted
angelegt werden.
# | Dateisystem | Größe | Markierung | Name | GPT | MBR/MPT |
1 | unformatiert | 1M | bios_grub | - | ||
2 | fat12/16/32 | 50M | esp | - | ||
3 | grub-lesbar | 50M | - | beliebig | ||
4 | und weitere Partition(en) z.B. für die iso-Datei, casper-rw usw. später |
→ siehe unter anderem: GRUB 2/Grundlagen (Abschnitt „MBR-mit-GUID-Partitionstabelle-GPT“)
Anmerkung: Die 50M sind in beiden Fällen etwas überdimensioniert, ~16MB sind aber erforderlich (eine fat16 Partition hat min. 16 MiB), mit Hintergrundbild entspr. mehr. In die 3. Partition werden im Falle MBR/MPT die grub-Dateien geschrieben --boot-directory=
, sie darf aber auch weitere Dateien enthalten, z.B. die iso-Dateien. Die erforderliche Größe ist dann entsprechend zu wählen. Die grub
- Dateien können aber auch auf die esp
Partition - z.B. in ein eigenes Verzeichnis - geschrieben werden. Beide jeweiligen grub-Dateien belegen je mit einer simplen grub.cfg
knapp 13 MiB.
Die jeweiligen Markierungen für die Partition 1 und 2 erreicht man nach dem Erstellen mittels und entsprechender Auswahl.
Alternative Einrichtung mit gdisk
▶ entspr._Terminalausgabe ⮷
Hybrid MBR anlegen¶
Hinweis:
Der folgende Abschnitt wird ausschließlich für einen Datenträger mit GPT gebraucht, und dann auch nur, wenn von diesem Datenträger im CSM/"legacy" Modus gebootet werden soll. Für MBR/MPT ist er obsolet.
Damit man ein Speichermedium mit GPT-Partitionierung wie ein MBR-partitioniertes Gerät verwenden kann, wird ein sogenannter virtueller MBR benötigt. Dazu wird gdisk
verwendet.
Der Programmaufruf erfolgt mit
sudo gdisk /dev/sdX # X steht für den flashkey, zu ermitteln mit parted -l
Befehl/Taste | Ausführung/Ergebnis | Übersetzung |
r | Recovery/transformation | Untermenü für Wiederherstellung bzw. Transformation |
h | hybrid mbr | erzeugen eines virtuellen MBR in einer GPT Umgebung |
1 2 3 | to be added to the hybrid MBR | GPT-Partition(n) zum hybrid MBR hinzufügen |
n | Place EFI GPT (0xEE) partition first in MBR | Partitionstyp "efi" |
Partitionen 1-3 hinzufügen, Vorgaben verwenden, bootflag: für 1 und 2: n, 3: y | ||
x | Recovery/transformation | Untermenü für Wiederherstellung bzw. Transformation |
h | hybrid mbr | erzeugen eines virtuellen MBR in einer GPT Umgebung |
w | Final checks complete. About to write GPT data. | letzte Überprüfung. GPT-Informationen werden geschrieben |
y | Do you want to proceed? | wollen Sie weitermachen |
OK; writing new GUID partition table (GPT) to /dev/sdd. | ||
Eine entsprechende Befehlsfolge kann man sich hier ▶ Terminalausgabe_virtMBR ⮷ ansehen
grub installieren¶
Die Installationsdateien für grub unter EFI und grub unter legacy werden in getrennte Partitionen geschrieben, das hat den Vorteil, die jeweiligen grub.cfg-Dateien getrennt von einander konfigurieren zu können; z.B. durch unterschiedliche Hintergrundbilder zwecks Unterscheidung schon beim Start, ob sich der PC im EFI oder im legacy Modus befindet. Statt eines Bildes kann man auch einen quasi "leeren" menuentry verwenden (s.u.).
für EFI
die esp (/dev/sdd2) Partition einhängen nach /mnt, nach Gebrauch aushängen.
im LiveSystem ist
grub-efi
nachzuinstallierengrub installieren
sudo grub-install --target=x86_64-efi --recheck --removable --efi-directory=/mnt --boot-directory=/mnt/boot
mit einem Texteditor eine Datei grub.cfg anlegen und unter /mnt/boot/grub speichern
beispielhafter Inhalt, noch ohne Starteintrag für ein Ubuntu
menuentry "efi/pc" { # dieser Eintrag dient lediglich der schnellen Erkennung, in welchem Modus auf dem Rechner gebootet wurde set-root=(hd0,gpt2) # ohne 'gültige' Zeile keine Anzeige rmmod tpm # erforderlich für das Booten mittels loopback } menuentry "stop" { halt }
der flashkey kann so schon auf einem EFI-PC getestet werden, grub erscheint mit dem o.g. Menüeintrag "efi/pc"
für legacy
die biosgrub-Dateien (/dev/sdd3) Partition einhängen nach /mnt, nach Gebrauch aushängen.
grub installieren
sudo grub-install --target=i386-pc --recheck --removable --boot-directory=/mnt/boot /dev/sdd
mit einem Texteditor eine Datei grub.cfg anlegen und unter /mnt/boot/grub speichern
beispielhafter Inhalt
menuentry "legacy/pc" { # dieser Eintrag dient lediglich der schnellen Erkennung, in welchem Modus auf dem Rechner gebootet wurde set-root=(hd0,gpt3) # ohne 'gültige' Zeile keine Anzeige } menuentry "stop" { halt } menuentry "Neustart" { reboot }
jetzt kann der flashkey auch auf einem PC mit legacy (resp. BIOS) getestet werden, grub erscheint mit dem Menüeintrag "legacy/pc"
Hinweis:
Zur Vermeidung möglicherweise eintretender Konflikte in der Verzeichnisstruktur der esp
, wenn nämlich durch eine vorherige Installation im EFI-Modus bereits Verzeichnisse vorliegen, wählt man bei den beiden o.g. Befehlen entsprechend geeignete. Im EWMS (s.Anhang) sind dafür z.B. boot-efi
und boot-bios
verwendet worden.
weitere Partition(en) für die iso-Datei und z.B. Persistenz¶
Für die iso-Datei(en) wird eine ausreichend große Partition benötigt, vorzugsweise mit ntfs Dateisystem, weil sie dann auch von einem Windows aus nutzbar ist.
Soll ein persistenter Bereich (zum Speichern von Einstellungen, Programmen, Dateien..., Größe min. 300 MiB) geschaffen werden, benötigt man auch ein Partition mit dem Label "casper-rw". Eine solche wird nach Anlegen mit gparted
mit diesem Befehl eingerichtet
sudo mkfs.ext3 -b 4096 -L casper-rw /dev/sdxy
Im menuentry wird die Zeile linux (loop)/casper/vmlinuz boot=casper... durch den Kernelparameter "persistent" erweitert.
In dem unten aufgeführten Link Persistenten_USB-Live-Stick_im_BIOS-Modus_erstellen stehen sehr nützliche Hinweise zur Verwendung der Persistenz (Stichwort: Aktualisierung)
grub.cfg vervollständigen¶
Beispielhaft hier ein Menüeintrag für die aktuelle Ubuntu LTS-Version "Bionic Beaver"
menuentry "ubuntu-18.04-desktop-amd64 live " { insmod part_gpt set root=(hd0,gpt4) loopback loop /ubuntu-18.04-desktop-amd64.iso linux (loop)/casper/vmlinuz boot=casper ramdisk_size=2097152 root=/dev/ram rw locale=de_DE bootkbd=de console-setup/layoutcode=de iso-scan/filename=/ubuntu-18.04-desktop-amd64.iso initrd (loop)/casper/initrd } # insmod part_gpt ist z.B. erforderlich, wenn der Datenträger mit einem GPT Schema versehen ist # verschiedentlich ist die Bezeichnung für `initrd` unterschiedlich (z.B. `initrd.gz`, `initrd.lz`) Mittels "Einhängen von Laufwerksabbildern" kann man das einfach nachsehen. # ramdisk_size=2097152 root=/dev/ram rw und #locale=de_DE bootkbd=de console-setup/layoutcode=de sind optional
Hinweis:
Die Anweisung set root=(hd0,gpt4)
kann unter Umständen - Wechsel der device Reihenfolge durch Einbau/Anstecken weiterer Geräte - nicht ausreichend sein. Es ist daher ratsam, eine Anweisung search --no-floppy --fs-uuid --set=root <UUID>
anzufügen
Hintergrundbild in grub¶
Wenn grub verschönert werden soll - z.B. mit einem Hintergrundbild -, sind eine Reihe Eintragungen in den jeweilige grub.cfg erforderlich. Sie werden jeweils vor die menuentry
geschrieben.
MBR/MPT
if loadfont /boot/grub/fonts/unicode.pf2 ; then set gfxmode=auto insmod gfxterm insmod vbe terminal_output gfxterm if terminal_output gfxterm; then true ; else terminal gfxterm fi fi #grub_gfxmode=1680x1050 grub_gfxpayload_linux=keep #gfxpayload=1680x1050x32,1680x1050 insmod jpeg background_image /boot/grub/sa_2.jpg set color_normal=dark-gray/black set menu_color_normal=light-gray/black set menu_color_highlight=red/black
Die Farben sollten sich geeignet von dem jeweiligen Hintergrund unterscheiden. ▶ Schriftfarben
GPT
if loadfont /boot/grub/fonts/unicode.pf2 ; then insmod gfxterm insmod efi_gop insmod efi_uga set gfxmode=auto set gfxpayload_linux=keep terminal_output gfxterm if terminal_output gfxterm; then true ; else terminal gfxterm fi fi insmod png background_image /boot/grub/pict3.png set color_normal=dark-gray/black set menu_color_normal=light-gray/black set menu_color_highlight=green/black
Man achte auf die unterschiedlichen zu ladenden Module:
⇒ MBR/MPT
insmod vbe
,insmod jpeg
⇒ GPT
insmod efi_gop
,insmod efi_uga
,insmod png
Hinweis zum Gebrauch als Installationsmedium¶
Soll ein so per loopback gestartetes LiveSystem zu Installationszwecken auf dasselbe device benutzt werden, funktioniert das nur, wenn das /isodevice ausgehängt wird, anderenfalls stürzt ubiquity
ab. Das Aushängen gelingt mittels
sudo umount -l -r -f /isodevice
Trotz ausgehängentem /isodevice ist auch so eine nachträgliche Änderung an den Partitionen nicht möglich, für die Installation in so einem Fall müssen die gewünschten/erforderlichen Partitionen bereit vorher angelegt sein.
Verwendung im PC als stand-alone grub¶
Die oben beschriebene Installation auf einem flashkey kann in gleicher Weise auch auf einer HDD/SSD zum internen Gebrauch auf einem EFI-System durchgeführt werden. Man erhält damit einen grub
, der unabhängig von den Skripten eines installierten Linux betrieben werden kann.
Vor- und Nachteile¶
Vorteile
frei gestaltbares Menü
besonders geeignet für Mehrbootsysteme
keine parallelen Bootloader bzw. umständliche "Scripterei", um in allen Systemen die kernel-updates zu erfassen
Nachteile
die entsprechenden Einstellungen sind selbst vorzunehmen
es ist etwas aufwendiger, unerwünschte Booteinträge zu vermeiden resp. wieder loszuwerden
Installation¶
Zunächst wird für ein wie oben beschrieben installierten stand-alone grub ein neuer Booteintrag im nvram angelegt
sudo efibootmgr --create --disk /dev/sdX --part Y --label "stand-alone-grub" --loader \\boot\\grub\\x86_64-efi\\grub.efi # X und Y entsprechend anpassen
efibootmgr -v
gibt Auskunft über das Ergebnis. Ggf. ist dieser Eintrag zu "aktivieren" mit
sudo efibootmgr -b <hex#> -a
Um die Benutzung des "efi" Bootmenüs zwecks Booten des gewünschten Eintrags zu vermeiden, setzt man die Reihenfolge entsprechend mit
sudo efibootmgr -o <hex#>
Hinzufügen von O/Sen
¶
Wird zu so einer Konstellation ein Windows hinzugefügt, läßt sich bezüglich Bootloader nur im Nachhinein eine entsprechende Anpassung bewerkstelligen
Windows Boot Manager inaktiv setzen
sudo efibootmgr -b <hex#> -A
Reihenfolge wieder auf den stand-alone grub einstellen
Beim Hinzufügen eines Ubuntu kann man ganz auf die Installation des zugehörigen grub
verzichten (ubiquity -b
), dann kann man allerdings lediglich mittels der SymLinks booten und hat den Nachteil, nicht auf ältere als den unmittelbar vorletzten kernel zugreifen zu können. Leider wird bei dieser Vorgehensweise - anders als in einem MBR/MPT System - dabei nämlich kein grub.cfg-file erzeugt.
Bei einer grub
-Installation in einen (partitionstechnisch freigehaltenen) "PBR" werden
unerwünschten Einträgen im nvram nicht verhindert, somit sind die dann genau wie bei Windows nachträglich zu entfernen
gibt es eine Fehlermeldung
Fehler: Enviroment-Block ist zu klein Beliebige Taste drücken, um fortzusetzen...
die allerdings bei 2MB freiem Platz vor der Partition nicht auftritt.
Benutzung des stand-alone grub und Einschränkungen¶
Je nach dem, in welchem Modus dieser flashkey oder die entsprechende Platte gestartet wird (EFI/legacy) kann man vom Menü aus unterschiedliche O/S starten
EFI-Modus
alle O/S, die im EFI-Modus installiert wurden, können mit den üblichen Verfahren von grub aus geladen werden.
O/S, welche auf einer weiteren Platte im BIOS-Modus installiert wurden
Windows O/S: nein
Linux O/S: ja (
insmod part_msdos
erforderlich)
BIOS/legacy-Modus
nur im BIOS/legacy-Modus installierte O/S können gebootet werden
Problembehebung¶
Beim Partitionieren - besonders wenn ein und derselbe flashkey wechselweise mit msdos und GPT Tabelle verwendet werden soll, ist ein vollständiges Löschen (
dd if=/dev/zero...
) opportun. Alternativ kann dazu auchgdisk
verwendet werden (sudo gdisk /dev/sdX
→x
→z
). Änderungen müssen dem kernel mitgeteilt werden;reboot
oderpartprobe /dev/sdx
.der flashkey ID-2: USB /dev/sdb model: USB_DISK size: 4.0GB konnte mit
gdisk
nicht richtig partitioniert werden, Partitionen 2 und 3 blieben unformatiert trotz entsprechender Angabe. Wurde mitgparted
nachgeholt.der flashkey ID-1: USB /dev/sda model: Cruzer size: 8.1GB bootet am Thinkpad 520 im EFI Modus, nicht aber im legacy Mode. Am TMH 4440 und auch an einem Acer Aspire 5670 bootet er im BIOS-Modus
der flashkey ID-3: USB /dev/sdc model: Slim_Line size: 61.9GB bootet überhaupt nicht am Thinkpad 520, wohl aber im BIOS Modus am TMH 4440.
bei einer Installation im EFI-Modus von Xerial Xenus auf einer leeren Platte wird nicht automatisch eine erforderliche
esp
angelegt, dieses ist entsprechend von Hand vorzubereiten.mit der neuen Version
grub 2.04
(Ubuntu Focal Fossa) ist zum Booten eines iso-files mittelsloopback
auf einem Rechner im EFI Modus eine Zeilermmod tpm
im entsprechenden menuentry zwingend erforderlich.
Anhang¶
Anbei ein minimales Image "EWMS.img" eines USB flashkey EWMS-1 ⮷ und EWMS-2 ⮷. Zu verwenden, wie in der Diskussion beschrieben. Achtung: Als Ergibnis sieht der flashkey anders aus, als im Artikel beschrieben. grub
-efi und grub
-legacy befinden sich beide in der esp
in unterschiedlichen Verzeichnissen. Die zugehörigen grub.cfg haben jeweils nur einen Eintrag auf grub.cfg in Partition 2.
Links¶
intern¶
extern¶