raspberry.tips
raspberry.tips - Raspberry Pi Projekte und Tutorials
Eines der größten Ärgernisse war meines Erachtens immer die notwendige SD-Karte im Raspberry Pi, SD-Karten sind langsam und haben in den günstigen Varianten eine kurze Lebenszeit. Die Enwickler der Raspberry Pi Foundation haben anhand eines neuen Bootloaders eine lang ersehnte Funktion nachgerüstet, der Raspberry Pi bootet mit dem gerade im Entwicklungsstadium befindenden Bootloader nun endlich von einer Festplatte oder einem USB-Laufwerk / Stick.
Leider ist die Funktion nur für den neuesten Raspberry Pi 3 verfügbar, der Bootloader ist noch im Beta Stadium und verträgt sich leider nicht mit allen SSDs, Festplatten oder USB-Sticks, momentan werden folgende Produkte seitens Raspberry Pi Entwickler Gordon Hollingworth als Funktional genannt, im Zweifelsfall müsst ihr testen:
- Sandisk Cruzer Fit 16GB
- Sandisk Cruzer Blade 16Gb
- Samsung 32GB USB 3.0 drive
- MeCo 16GB USB 3.0
Wie funktioniert das genau?
Auf den BCM 2835, 6 und 7 Chip befindet sich ein 32kb Speicher, dieser ermöglicht das booten. Das stückchen Code sucht die Datei bootecode.bin auf der SD-Karte, wird dort nichts gefunden wird in Abhängigkeit zum GPIO Status der Pins 22-26 bzw. 39-43 versucht von einer zweiten SD-Karten, eine NAND Speicher, dem SPI und dann dem USB Port die bootcode.bin zu laden. Das ganze funktioniert auch mit einem Angeschlossenen USB HUB.
Wer sich im Detail über den Boot Prozess und und die Möglichkeiten informieren will findet im GutHub Repository die Dokumentation
Raspbian von USB Stick booten
Für die Initiale Einrichtung auch weiterhin eine SD-Karte benötigt, schreibt wie gewöhnlich das aktuellste Raspbian mit Win32DiskImager auf eure SD-Karte und bootet euren Raspbery Pi und führt die Grundeinrichtung durch. Falls noch nicht passiert aktualisiert ihr via Konsole oder SSH Sitzung erst mal euer System
sudo apt-get update & sudo apt-get -y upgrade
Da sich das Feature noch im Entwicklungsstadium befindet müssen wir die aktuelle Beta Firmware installieren
sudo BRANCH=next rpi-update sudo reboot
Danach aktivieren wir den USB Boot Mode in der config.txt unseres RasPi und rebooten einmal
echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt sudo reboot
Nun prüfen wir ob die Programmierung des Boot Mode im “One Time Programmable” Speicher des SoC geklappt hat. Hierzu lesen wir den Speicher
vcgencmd otp_dump | grep 17:
Wenn 17:1020000a ausgegeben wird hat etwas nicht geklappt, wir sollten als Ausgabe 17:3020000a erhalten. Jetzt können wir von SD Boot auf USB Boote umstellen, ich verwende einen einfachen No Name 8GB USB Stick den ich mal als Werbegeschenk erhalten habe.
Nachdem ich den Stick an den Pi angeschlossen habe prüfe ich mit folgendem Befehl die erkannten Speichermedien
sudo fdisk -l
Bei mir wurde der Stick als /dev/sda erkannt und die enthaltene FAT Partition als /dev/sda1. Insofern ihr ein frisches Raspbian habt und keine weiteren Sticks angeschlossen sind sollte auch bei euch der Stick unter /dev/sda erkannt werden.
Dann starte ich die Partitionierung für /dev/sda und lösche alle enthaltenen Daten (ggf. müsst ihr das bei euch erkannte Gerät angeben)
sudo parted /dev/sda
Innerhalb des Tools führe ich nun den folgenden Befehl aus um ein “msdos” Disk Label zu erstellen
mktable msdos
Die Rückfragen von partet beantwortet ihr mit Ignore, Yes und wieder Ignore. Dann erstellen wir innerhalb von parted eine 100 Megabyte FAT32 Partition auf unserem Stick bestätigt eine evtl. vorhandene Rückfrage mit Ignore
mkpart primary fat32 0% 100M
der zweite Partition mit ext4 Dateisystem geben wir den restlichen verbleibenden Platz
mkpart primary ext4 100M 100%
Beendet partet durch Eingabe von quit
quit
Zur Sicherheit sollten wir jetzt einen Reboot durchführe
sudo reboot
Wir haben zwei Partitionen erstellt, diese müssen wir noch mit dem passenden Dateisystem formatieren, die erste 100MB Partition formatieren wir mit FAT32 und die zweite mit EXT4 Dateisystem
sudo mkfs.vfat -n BOOT -F 32 /dev/sda1 sudo mkfs.ext4 /dev/sda2
Jetzt mounten wir die beiden Partitionen um darauf zugreifen zu können unter /mnt/usbstick (Partition 2) und /mnt/usbstick/boot (Partition 1)
sudo mkdir /mnt/usbstick sudo mount /dev/sda2 /mnt/usbstick/ sudo mkdir /mnt/usbstick/boot sudo mount /dev/sda1 /mnt/usbstick/boot/
Um den Raspberry pi von USB booten zu können braucht der Stick natürlich noch den Bootloader und das Raspbian Betriebssystem, wir kopieren uns dieses einfach von der vorhandenen SD-Karte auf den Stick
sudo rsync -ax --progress / /boot /mnt/usbstick
Das dauert je nach Stick eine ganze Weile, nachdem wir das System auf den Stick kopiert haben müssen wir natürlich der Kopie noch beibringen das sie sich nicht mehr auf der SD Karte befindet sondern auf dem USB-Stick. Hierzu tauschen wir in der Datei cmdline.txt auf unserem Stick die Info wo nach dem Root Dateisystem gesucht wird. Das ist nun anstelle /dev/mmcblk0p2 natürlich /dev/sda2.
sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/usbstick/boot/cmdline.txt
Das Selbe erledigen wir in der fstab um sicherzustellen beim Starten des Pi nicht die ext Datenpartition von der SD-Karte verwendet wird sondern vom USB-Stick
sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/usbstick/etc/fstab
Dann unmounten wir die beiden Partitionen unseres Sticks und schalten unseren Pi aus.
cd ~ sudo umount /mnt/usbstick/boot sudo umount /mnt/usbstick sudo poweroff
Jetzt könnt ihr die SD-Karte aus eurem RasPi nehmen und nach erneutem Einstecken der Stromversorgung komplett vom USB Stick booten. Ihr könnt den USB-Stick genau so wie die SD-Karte mit win32diskimager auf euren Rechner sicher, das erspart euch das erneute einrichten auf dem RasPi.
Wichtig!
Der Bootprozess sucht beim Starten des Pi erst nach einer SD-Karte und versucht dann erst dann vom USB Stick zu booten. Der Start dauert daher etwas länger als gewohnt. Um das zu vermeiden könnt ihr einfach eine leere SD-Karte in den Slot stecken.