Raspberry Pi vom USB Stick booten
Den Raspberry Pi vom USB Stick booten war ein viel gewünschtes Feature der Community und wurde inoffiziell beim Raspberry Pi 3 Release auch angekündigt. Nun gibt es die erste Betaversion davon. Damit ist es möglich das Linux Image rein vom USB Stick oder einer USB Festplatte zu booten, man benötigt keine SD Karte mehr.
Raspberry Pi vom USB Stick booten
Eine SD Karte ist praktisch. Sie ist klein und auf sie passen große Datenmengen. Zudem ist sie günstig, weshalb sie in mobilen Geräten als Speichererweiterung eingesetzt wird. Bei der Konstruktion des ersten Raspberry Pi hat man vermutlich deshalb dieses Speichermedium als primären Speicher ausgewählt. Leider ist die SD Karte aber für manche Anwendungsgebiete keine gute Idee. Viele Benutzer beklagen, dass diese fast immer der Grund für den Ausfall eines Raspberry Pis ist. Sie ist quasi das schwache Glied in der Kette.
Warum ist das so? SD Karten haben nur begrenzt oft beschrieben werden. Irgendwann sind ihre Speicherzellen einfach kaputt durch Materialermüdung. Wie bei SSDs verhindert man ein vorzeitiges Ableben indem man Dateien die oft geschrieben werden (zum Beispiel Log Dateien unter var/log) auf eine Festplatte auslagert. Zusätzliche gibt es bei den SD Karten große Qualitätsunterschiede. Es gibt viele unterschiedliche Hersteller und die Karten unterscheiden sich von der Spezifikation nur gering voneinander, haben aber oft enorme Unterschiede bei Performance und maximaler Schreibanzahl.
Wie wird über USB gebootet?
Der Raspberry Pi verfügt über ein Boot ROM, ein kleines Programm, dass die ersten Teile des Bootprogramms (die Datei bootcode.bin) des Betriebssystems von der SD Karte ließt und diesen in den RAM schreibt. Danach wird das Booten mit diesem Code fortgesetzt. Es wurden diesem Boot ROM nun neue Boot Modes wie das Booten über USB hinzugefügt.
USB Boot am Raspberry Pi 3 aktivieren
Um den Raspberry Pi vom USB Stick booten zu können benötigen wir zuerst einen Raspberry Pi 3 und das aktuellste Image. Dort findet man die überarbeiteten Dateien start.elf und bootcode.bin. USB Boot wird bei dem aktuellen Image folgendermaßen aktiviert (ist standardmäßig deaktiviert weil immer noch Beta):
echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
Mit dem Kommando wird program_usb_boot_mode=1 am Ende der Datei boot/config.txt hinzugefügt. Nun muss man den Pi neu starten! Danach sollte das Kommando
vcgencmd otp_dump | grep 17: 17:3020000a
die Ausgabe 3020000a zeigen. Damit ist der USB Boot aktiviert! Nun benötigen wir noch einen bootfähigen USB Stick. Wir haben dafür zwei Möglichkeiten:
- Raspbian Image neu herunterladen und auf den USB Stick kopieren
der einfachste Weg ist das Image neu herunterzuladen. - den bootfähigen Stick direkt am Raspberry Pi erzeugen
Bootfähigen Raspbian USB Stick erzeugen
Wir starten den Raspberry Pi ganz normal mit eingelegter SD Karte. Zusätzlich stecken wir einen leeren USB Stick in einen der USB Steckplätze. Wir haben nun folgende Situation:
- /dev/mmcblk0
das ist die SD Karte - /dev/sda
das ist der USB Stick
Wir erstellen nun auf dem USB Stick eine 100 MB große FAT32 boot Partition, den Rest des Speichers legen wir als ext4 Linux Partition an:
sudo parted /dev/sda (parted) mktable msdos
Mit Yes antworten.
(parted) mkpart primary fat32 0% 100M (parted) mkpart primary ext4 100M 100% (parted) print
Es folgt eine Ausgabe der Partitionen am USB Stick.
Wir erstellen die Dateisysteme wie folgt:
sudo mkfs.vfat -n BOOT -F 32 /dev/sda1 sudo mkfs.ext4 /dev/sda2
Im nächsten Schritt mounten wir die neu erstellte Partition und kopieren das laufende System auf den USB Stick:
sudo mkdir /mnt/usbstick sudo mount /dev/sda2 /mnt/usbstick/ sudo mkdir /mnt/usbstick/boot sudo mount /dev/sda1 /mnt/usbstick/boot/ sudo apt-get update; sudo apt-get install rsync sudo rsync -ax --progress / /boot /mnt/usbstick
Im nächsten Schritt müssen wir die SSH host keys regenerieren, sonst würde das System nicht starten:
cd /mnt/usbstick sudo mount --bind /dev dev sudo mount --bind /sys sys sudo mount --bind /proc proc sudo chroot /mnt/target rm /etc/ssh/ssh_host* dpkg-reconfigure openssh-server exit sudo umount dev sudo umount sys sudo umount proc
Boot Parameter einstellen
Der letzte Schritt ist nun noch, dass wir dem System mitteilen was gestartet werden soll. Wir beginnen damit, dass wir den USB Stick als primäre Boot Partition definieren. Das wird in der /boot/cmdline.txt Datei gemacht:
sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/usbstick/boot/cmdline.txt
In der fstab Datei müssen wir diese Information auch noch einmal hinterlegen:
sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/usbstick/etc/fstab
Jetzt noch den USB Stick umounten und den Pi neu starten…
cd ~ sudo umount /mnt/usbstick/boot sudo umount /mnt/usbstick sudo reboot
Nun startet der Pi das erste Mal vom USB Stick!
Probleme
Da es sich um eine Beta Version handelt gibt es aktuell noch zahlreiche Probleme. Größtes Problem ist bislang, dass nicht alle USB Sticks unterstützt werden. Aufgrund der großen Zahl an Herstellern und Modellen wurde bisher nur wenig getestet. Man weiß von einigen Modellen, dass sie funktionieren beziehungsweise nicht funktionieren. Die Entwickler versprechen in den nächsten Versionen Verbesserungen.
USB Boot für Raspberry Pi 1, 2 und Pi Zero
Die älteren Modelle und der Zero werden derzeit nicht unterstützt, da bei ihnen der Bootloader noch im BCM2837 Baustein eingebaut ist. Es gibt aber trotzdem eine Möglichkeit Raspbian vom USB Stick zu laden. Mann benötigt lediglich eine spezielle bootcode.bin Datei auf der SD Karte, diese Datei wird beim booten geladen. Alle weiteren Dateien können direkt im Bootvorgang vom USB Datenträger kommen. Die SD Karte fungiert quasi als Boot Disk, wie man es früher mit 3,5 Zoll Disketten kannte.
Fazit
Ich habe euch gezeigt wie man den Raspberry Pi vom USB Stick booten kann. Diese Funktion war schon sehr lange und oft gewünscht und wurde nun endlich ermöglicht. Damit ist der Raspberry Pi noch dynamischer und man kann endlich durch den Einsatz einer Festplatte einen viel reibungsloseren Betrieb garantieren.
Im nächsten Artikel geht es um den Boot Modus Network Boot, damit kann man den Pi über ein Netzwerk Image booten, damit kann man mehrere Pis über eine zentrale Software laufen lassen, ideal für jedes Rechenzentrum.
Danke für den Beitrag. Da das X400 mit dem Pi3 leider nicht funktionierte (da liefert das X400 wohl doch nicht genug Power), habe ich den wieder verkauft. Wie sieht es mit Dem Pi2 und B+ aus – da wäre eine Anleitung auch sehr hilfreich. Muss dazu nur die bootcode.bin geändert werden und was genau?
lg
Genau die Frage habe ich mir auch gestellt, wie geht das mit dem pi zero?
In Zeile 5 im Schritt mit den SSH Keys steht „sudo chroot /mnt/target“. hier müsste aber statt „target“ „usbstick“ verwendert werden!