Bereits Kunde? Jetzt einloggen.
Lesezeit ca. 10 Min.

Multiboot für Raspbian:Schaltzentrale


Raspberry Pi Geek - epaper ⋅ Ausgabe 2/2020 vom 05.12.2019

Speziell bei verbauten RasPis erweist sich der Wechsel der SD-Karte oft als mühsam. Hier hilft Pi-Boot-Switch aus der Klemme, das remote unterschiedliche Systeme bootet. Bernhard Bablo


README

Der schnelle Austausch der Speichermedien stellt einen großen Vorteil der RasPi-Familie gegenüber herkömmlichen Rechnern dar. Anders sieht es aber aus, wenn man an die Karte gar nicht mehr herankommt. In diesem Fall hilft ein kleines Skript weiter, das das System multibootfähig macht.

Artikelbild für den Artikel "Multiboot für Raspbian:Schaltzentrale" aus der Ausgabe 2/2020 von Raspberry Pi Geek. Dieses epaper sofort kaufen oder online lesen mit der Zeitschriften-Flatrate United Kiosk NEWS.

Bildquelle: Raspberry Pi Geek, Ausgabe 2/2020

Der fest im Regal eingebaute Mini-Server, der Pi Zero im Internet-Radio und selbst der im Standardgehäuse der Raspberry Pi Foundation ...

Weiterlesen
epaper-Einzelheft 7,99€
NEWS 14 Tage gratis testen
Bereits gekauft?Anmelden & Lesen
Leseprobe: Abdruck mit freundlicher Genehmigung von Raspberry Pi Geek. Alle Rechte vorbehalten.

Mehr aus dieser Ausgabe

Titelbild der Ausgabe 2/2020 von Datensauger. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Datensauger
Titelbild der Ausgabe 2/2020 von Schutzhelm. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Schutzhelm
Titelbild der Ausgabe 2/2020 von Serielle Kommunikation über RS-485 mit dem Raspberry Pi:Von Pi zu Pi. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Serielle Kommunikation über RS-485 mit dem Raspberry Pi:Von Pi zu Pi
Titelbild der Ausgabe 2/2020 von Keep it simple. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Keep it simple
Titelbild der Ausgabe 2/2020 von Ressourcen überwachen auf dem Raspberry Pi: Optimaler Überblick. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Ressourcen überwachen auf dem Raspberry Pi: Optimaler Überblick
Titelbild der Ausgabe 2/2020 von Ubuntu Server 19.10 in 32 und 64 Bit auf dem Raspberry Pi:Drei-Wege-Kreuzung. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Ubuntu Server 19.10 in 32 und 64 Bit auf dem Raspberry Pi:Drei-Wege-Kreuzung
Vorheriger Artikel
Schutzhelm
aus dieser Ausgabe
Nächster Artikel Serielle Kommunikation über RS-485 mit dem Raspberry Pi:Von …
aus dieser Ausgabe

... steckende Pi Zero: Sie alle verbindet, dass sich die Speicherkarte nicht mehr ohne Weiteres austauschen lässt. Liegt ein Update an oder möchte man neue Funktionen hinzufügen, bleibt dann nur noch die Änderung direkt am produktiven System. Das aber widerspricht der alten IT-Weisheit „never change a running system“ – laufende Systeme fasst man aus Prinzip nicht mehr an.

Doch die Welt ist nicht statisch, Updates und neue Funktionen drängen und locken. Aus dieser Motivation heraus entstand das hier beschriebene Boot-System. Es zielt darauf ab, auf einer SD-Karte mehrere Raspbian-Systeme parallel vorzuhalten, um flexibel zwischen ihnen hin- und herzuwechseln. Vor einem Update etwa ziehen Sie so eine Kopie auf eine zweite Partition, probieren dort die Neuerungen aus und lassen dann entweder die Kopie weiterlaufen oder wechseln zurück – all das in wenigen Minuten und beliebig oft.

Booten auf dem RasPi

Der Boot-Prozess verläuft auf dem RasPi anders als auf anderen Systemen. Das liegt am speziellen Chip, der die Basis bildet: So startet beim RasPi zuerst die VideoCore genannte Grafikkomponente, bevor die eigentliche CPU übernimmt und das System hochfährt.

Dieses technische Konzept verhindert einen klassischen Boot-Manager, wie er etwa im normalen PC zum Einsatz kommt. Deswegen unterscheidet sich der hier vorgestellte Boot-Manager von seinen klassischen Vorbildern: Statt direkt nach dem Systemstart müssen Sie schon vorab das nächste zu bootende System auswählen.

Raspbian legt normalerweise zwei Partitionen an. Die erste, sehr kleine FATPartition enthält die für das Booten notwendigen Dateien wie Firmware und Kernel. Die zweite, System- oder Root- Partition genannt, enthält das eigentliche Linux-System. Während die Boot- Partition zwingend die erste sein muss, darf die Systempartition auch auf der dritten oder einer weiteren Partition liegen. Erst der Parameter root in der Datei cmdline.txt aus der Boot-Partition bestimmt die Systempartition.

Diese Konstellation machen wir uns zunutze, um im Betrieb flexibel zwischen verschiedenen Systemen zu wechseln. Allerdings belegt normalerweise die zweite Partition den gesamten restlichen Platz der SD-Karte – zumindest dann, wenn Sie bei der Ersteinrichtung, wie allgemein empfohlen, mit Raspiconfig den entsprechenden Menüpunkt ausgewählt haben.

Im ersten Schritt müssen Sie also entsprechend Platz schaffen. Dazu benötigen Sie ein weiteres Linux-System, etwa ein Raspbian mit grafischer Oberfläche. Der nächste Abschnitt geht davon aus, dass Sie die aktuelle Version betreiben. Des Weiteren benötigen Sie einen SDKartenleser, um damit das zu verkleinernde System auszulesen und zu beschreiben.

Platz schaffen

1 Gparted erlaubt es auf einfache Weise, Datenträger umzuformatieren.


Für den vorgesehenen Zweck kommt das Programm Gparted 1 zum Einsatz, dass Sie über die grafische Paketverwaltung oder per sudo apt‑get gparted über die Kommandozeile installieren. Anschließend finden Sie Gparted im Menü und starten es von dort. Achten Sie auf die Auswahl des richtigen Laufwerks in der Ausklappliste oben rechts. Sofern Sie keine zusätzliche Festplatte im System betreiben, handelt es sich dabei normalerweise um /dev/sda. Im Zweifel identifizieren Sie das Laufwerk über seine Größe oder über die Zusatzinformationen, die Sie über die MenüpunkteLaufwerk undPartition erreichen.

Wie Sie in Abbildung 1 sehen, gibt es auf der verwendete SD-Karte zwei Partitionen. Davor befindet sich ein kleiner, nicht zugeteilter Bereich von 4 MByte. Das Schlüsselsymbol zeigt an, dass beide Partitionen eingehängt sind und sich deshalb nicht bearbeiten lassen. In unserem Fall liegt das an dem in Raspbian integrierten Automounter, der angesteckte Massenspeicher automatisch unter /media/User / einhängt. Da es gilt, die große Partition /dev/ sda2 zu verkleinern, wechseln Sie ins MenüPartition und hängen dort die Partition aus. Der Schlüssel verschwindet nun. Ebenfalls über das Partitionsmenü wählen Sie jetzt den MenüpunktGröße Ändern/ Verschieben aus 2. Im Dialog wählen Sie die neue Größe für den Bereich aus, entweder über die Eingabefelder oder per Maus. Die Software merkt sich die Änderungen und wendet sie erst ganz am Ende mit der zusätzlichen Übernahmebestätigung an.

Das Verkleinern 3 der alten Systempartition schafft Platz für die neuen Partitionen. Diese legen Sie überNeu aus dem Partitionsmenü an. Unten im Bild sehen Sie die anstehenden Aktionen, oben in der Schalterleiste den grünen Haken. Ein Klick darauf führt nach einer Bestätigung alle Änderungen durch.

Da der Vorgang keine Daten verschiebt, sondern nur Verwaltungsinformationen der Partitionen ändert, geht das recht zügig vonstatten. Weitere Tipps zur Partitionierung finden Sie im Kasten Optimal partitionieren.

2 Im MenüPartition von Gparted finden Sie das Werkzeug, um die Größe einer Partition zu verändern. Dabei wendet die Software Modifikationen aber nicht direkt an.


Installation

Nach diesen Vorarbeiten nehmen Sie nun die SD-Karte aus dem Kartenleser und stecken Sie in den entsprechenden Slot des Raspberry Pi. Eine Kontrolle des Dateisystems mit df ‑h in einem Terminal sollte Ihnen jetzt die aktuelle verkleinerte Systempartitionsgröße ausgeben.

Nutzen Sie Raspbian Lite, installieren Sie zunächst Git (Listing 1, erste Zeile), mit dem Sie die Daten aus dem Pi-Boot- Switch-Projekt  klonen und installieren (ab Zeile 2). Die Kommandos installieren einige notwendige Tools und kopieren das Skript pi‑boot‑switch ins Verzeichnis /usr/local/sbin/.

Das Skript implementiert eine Reihe von Funktionen wie Kopieren (copy, ‑c) oder Wechseln (switch, ‑s). In aller Regel lassen sich mehrere Funktionen auf einmal ausführen; um die Funktionsweise zu erläutern, zeigen die nächsten Abschnitte die Kommandos aber einzeln.

Das Standardszenario

Das Standardszenario besteht im Kopieren der aktuellen Systempartition auf eine zweite Partition und anschließendem Wechsel. Zunächst einmal informieren Sie sich mit dem Info-Kommando ‑I über die vorhandenen Partitionen (Listing 2). Die rechte Spalte der Ausgabe zeigt, dass das System aktuell von der ersten Partition bootet. Die aktuelle Systempartition liegt auf der zweiten Partition (current root); auch beim nächsten Hochfahren würde diese die Systempartition bleiben (next root).

Um sich das Identifizieren der Partitionen zu erleichtern, vergeben Sie ein neues Label für die aktuelle Systempartition auf /dev/mmcblkp02 und ergänzen über die Option ‑D zusätzlich eine Beschreibung (Listing 3, erste Zeile). Der Autor verwendet als Konvention für das Label immer die Raspbian-Version (im Beispiel „Buster“ Lite vom September 2019), den Hostnamen sowie die Partitionsgröße. Die Ausgabe mit ‑I zeigt an- schließend den Labelnamen an. Danach kopieren Sie mit dem zweiten Kommando aus Listing 3 die aktuelle Systempartition eins zu eins auf die dritte Partition /dev/mmcblk0p3. Nutzen Sie die grafische Oberfläche von Raspbian, könnte Ihnen der Automounter wieder in die Quere kommen – in diesem Fall müssten Sie vorher die dritte Partition aushängen.

Dank der Option ‑F formatiert das Skript das Ziel vor dem Kopieren. Haben Sie die Partition schon beim Anlegen mit Gparted formatiert, lassen Sie diesen Schalter weg. Das Kopieren dauert je nach Partitionsgröße eine Weile; anschließend zeigt das Info-Kommando den neuen Zustand. Hier fällt auf, dass das Skript die Partition automatisch mit einem Label versieht. Sie ändern das mit dem in Listing 3 beschriebenen Label- Kommando auf Test (Kopie). Listing 4 zeigt das komplette Prozedere.

Original und Kopie

3 Mit dem WerkzeugGröße Ändern/ Verschieben aus Gparted schaffen Sie Platz für neue Partitionen. Sie geben entweder Werte ein oder verschieben Bereiche mit der Maus.


Aktuell existieren nun auf der SD-Karte also das Original und eine Kopie. Mit dem Switch-Kommando ‑s (Listing 5, erste Zeile) wechseln Sie die Systempartition. Das kommt aber erst beim nächsten Boot-Vorgang zum Tragen, den Sie mit sudo reboot einleiten. In einer grafischen Umgebung klappt das außerdem über das normale Menü. Alternativ erweitern Sie das Switch-Kommando um die Option ‑R: Dann erfolgt der Reboot nach dem Wechsel der Systempartition vollkommen automatisch.

Während sich das Kopieren der Systempartition langwierig gestaltet, geht der Wechsel zwischen den verschiedenen Partitionen flott vonstatten. So wechseln Sie bei Bedarf schnell in eine Testumgebung auf eine anderen Partition, um etwas auszuprobieren. Anschließend gelangen Sie genauso schnell wieder zurück zur Arbeitsumgebung. Bei Bedarf lässt sich eine Systempartition auch auf ein USB-Laufwerk auslagern, etwa einen schnellen Stick oder eine Festplatte. Gerade Letzteres führt im Alltag zu einer spürbaren Geschwindigkeitssteigerung, insbesondere dann, wenn der RasPi häufig Daten schreibt. Mit dem Raspberry Pi 3 führte die Foundation die Möglichkeit ein, direkt von USB zu booten und damit ganz auf die SD-Karte zu verzichten. Allerdings funktioniert das nicht mit jedem Stick; außerdem dauert der Boot-Prozess deutlich länger, da er immer zuerst eine SDKarte sucht. Aber auch der Hybridbetrieb funktioniert ohne Probleme: Die Boot-Partition bleibt auf der SD-Karte, die Systempartition kommt auf den USB-Speicher. Da auf der Boot-Partition nur die Firmware und der Kernel liegen, greift das System lediglich beim Start kurz darauf zu, ansonsten gibt es keinerlei Zugriff. Theoretisch könnte man nach dem Hochfahren und dem Aushängen der Boot-Partition sogar die SD-Karte entnehmen und den Slot als normalen Kartenleser nutzen. Eine gute Idee ist das trotzdem nicht: In diesem Fall gehen dann Kernel- und Firmware-Aktualisierungen in die Hose.

Das Boot-Switch-Skript funktioniert ohne Probleme auch mit USB-Medien. Zum Testen hängen Sie einfach einen passend partitionierten Stick an den USB-Anschluss und rufen mit dem Schalter ‑I wie oben beschrieben die verfügbaren Partitionen ab. In der Liste tauchen dann neben den /dev/mmcblk0px - Partitionen der SD-Karte auch noch die USB-Partitionen auf, üblicherweise als /dev/ sda1 und so weiter. Per Copy und Switch übertragen Sie dann die Systempartition auf das USB-Medium und wechseln für den nächsten Boot-Vorgang dorthin.

Kompletter Wechsel

4 Die Aufteilung einer SD-Karte mit einer erweiterten Partition.


Besitzen Sie einen Raspberry Pi 3 und ein vom neuen Boot-Prozess unterstütztes USB-Gerät, dann können Sie mit Pi- Boot-Switch Ihr System auch komplett umziehen. Im ersten Schritt bereiten Sie die RasPi-Hardware dafür vor. Der Kasten Booten von USB erläutert die notwendigen Schritte. Lassen Sie sich nicht davon abschrecken, dass sich dieser Schritt nicht rückgängig machen lässt: Bei eingelegter SD-Karte verhält sich der Mini- Rechner danach genauso wie zuvor. Im zweiten Schritt partitionieren Sie die USB-Festplatte beziehungsweise den Stick. Als erste Partition benötigen Sie jetzt eine kleine FAT-Partition mit einer Größe von etwa 100 MByte für die Boot- Partition. Die folgenden Partitionen müssen dann mindestens 2 GByte (für Raspbian Lite) oder 8 GByte (für Raspbian) umfassen. Bei einer Festplatte lohnt es sich, daneben eine große Partition für Daten zu reservieren. Anschließend kopieren Sie wie oben beschrieben die Systempartition auf die entsprechende USBPartition (Listing 6, erste Zeile).

Verwenden Sie mehrere USB-Platten oder Sticks am RasPi, sollten Sie die korrekte Zielpartition genau überprüfen: Andernfalls überschreibt die Prozedur die darauf enthaltenen Daten. Das Kommando verwendet sowohl die Option ‑c für das Kopieren als auch den Schalter ‑s für den Wechsel der Systempartition.

Als Letztes fehlt noch das Übertragen der Boot-Partition von der SD-Karte auf den USB-Speicher. Das erledigen Sie mit den Befehlen aus den beiden letzten Zeilen von Listing 6. Bei einem folgenden Neustart sollte der Kleinrechner dann direkt vom angeschlossenen USBGerät booten.

Pi-Boot-Switch unterstützt inzwischen auch Armbian. Das liefert seine Images allerdings etwas anders aus als Raspbian: Während Letzteres die Bootpartition getrennt von der Systempartition hält und erst beim Start nach /boot mountet, liegen bei Armbian die für den Systemstart relevanten Dateien direkt auf der Systempartition, aber ebenfalls unter /boot.

Diese Dateisystemstruktur verhindert den direkten Einsatz von Pi-Boot-Switch, denn das Skript tauscht nur die Dateien auf der Boot-Partition aus. Abhilfe schafft in diesem Fall ein ein weiteres Skript namens armbian‑convert.sh : Es erzeugt aus einem als Eingabe übergebenen 7z-Archiv von Armbian ein Image mit zwei Partitionen, analog zu Raspbian. In diesem Zusammenhang ist unter anderem die Option ‑U von Pi-Boot- Switch interessant, da sie die für Armbian typischen UUIDs beibehält. Weitere Details dazu finden Sie in der Dokumentation des Skripts.

Fazit

Der Wechsel der SD-Karte nur für einen Test erübrigt sich mit Pi-Boot-Switch.

Das spart im Zweifelsfall die ein oder andere Karte, zumindest aber die Mühe des Ein- und Ausbauens des Mediums. Wie bei allen Manipulationen an Festplatten und Partitionen sollten Sie die Prozedur zuerst auf einem reinen Testsystem durchspielen und anschließend auch auf einem Produktivsystem nicht ohne Datensicherung anwenden.

Neben den hier vorgestellten Funktionen bietet Pi-Boot-Switch noch weitere Möglichkeiten, zum Beispiel die direkte Installation eines Raspbian-Images auf eine beliebige Zielpartition. Falls Sie solche erweiterten Funktionen interessieren, sehen Sie sich am besten die Projektdokumentation auf der Github-Seite näher an. (tle)

Der Autor

Bernhard Bablok (mail@bablokb. de) arbeitet bei der Allianz Technology SE als SAP-HR-Entwickler. Wenn er nicht Musik hört oder mit dem Fahrrad respektive zu Fuß unterwegs ist, beschäftigt er sich mit Themen rund um Linux, Programmierung und Mini-PCs.

Booten von USB

Der Raspberry Pi 3 erlaubt das direkte Booten von einem USB-Massenspeicher . Dieser MSD-Boot genannte Modus funktioniert jedoch nur, wenn Sie ein Bit im internen Speicher des Prozessors setzen – ein einmaliger, unumkehrbarer Vorgang. Dazu sollten Sie ein einigermaßen aktuelles Raspbian mindestens der Version vom 10.04.2017 verwenden. Im Zweifelsfall aktualisieren Sie vorher Kernel und Firmware. In der Datei config.txt auf der ersten Partition fügen Sie am Ende folgende Zeile ein: program_usb_boot_mode=1 Dann booten Sie das System neu. Die erfolgreiche Umsetzung des fraglichen Bits prüfen Sie mit folgendem Befehl: $ vcgencmd otp_dump | grep 17:

Die Ausgabe muss 17:3020000a lauten. Sobald das der Fall ist, löschen Sie die eingefügte Zeile wieder aus der Datei config.txt

Optimal partitionieren

Die klassische MBR-Partitionstabelle (Master Boot Record) verwaltet aus historischen Gründen nur maximal vier Partitionen. Die erste belegt beim RasPi die Boot-Partition mit mindestens 50, besser 100 MByte. Danach lassen sich noch drei weitere Partitionen anlegen. Was man damit macht, hängt vom Anwendungsfall ab.

Denkbar wären mehrere Systempartitionen, eine getrennte Home-Partition für Benutzerdaten oder eine Datenpartition, etwa für Medien. Damit werden die verfügbaren Partitionen schon knapp. Zwei Systempartitionen wären wünschenswert, um neben einem Produktivsystem auch ein Testsystem bereitzustellen. Damit bleibt nur eine Partition für Daten oder das Home übrig. Eine spätere Erweiterung des MBR-Formats umgeht das Limit von vier Partitionen. Die letzte der normalen Partitionen (auch primäre Partitionen genannt) machen wir zu einer erweiterten Partition, die als Container für beliebig viele zusätzliche Partitionen dient. Damit lässt sich eine Aufteilung wie in Abbildung 4 realisieren: Neben der Boot-Partition /dev/sda1 und zwei primären Systempartitionen /dev/sda2 und /dev/sda3 gibt es dort noch weitere Systempartitionen (die Nummern 5, 7 und 8) sowie eine Datenpartition /dev/sda6.

Die Partition Nummer 4 dient als Container-Partition, was Gparted mit einer hellblauen Umrandung auch grafisch hervorhebt.

Auf eine 32 GByte große SD-Karte passen dadurch 16 Raspbian-Lite-Systeme oder 4 Raspbian- Desktop-Systeme – das sollte für jede Art von Experiment genügen.