Raspberry Pi von USB Booten

Von Samuel 08.08.2016

Raspberry Pi von USB Booten Titelbild

Die Raspberry Pi Founddation hat (endlich) eine USB Bootlösung für den Raspberry Pi 3 herausgebracht. Mit wenigen Handgriffen lässt sich der Pi3 von einem USB Stick oder einer USB Festplatte booten. In diesem Tutorial zeige ich euch, wie man den aktuellen Beta-Bootloader installiert und ein bootbares USB Medium erstellt.

Ihr benötigt eine aktuelle raspbian oder raspbian lite Installation. Falls ihr eine neue SD Karte nutzt, installiert lieber raspbian lite, da weniger Daten zu kopieren sind. Bringt das System auf einen aktuellen Stand: sudo apt-get update && sudo apt-get dist-upgrade -y

Dann installiert ihr rpi-update und installiert den kommenden Bootmanager
sudo apt-get install rpi-update
sudo BRANCH=next rpi-update

Aktiviert USB Boot, indem ihr den Parameter program_usb_boot_mode=1 in der /boot/config.txt anfügt. echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt Startet den Pi neu sudo reboot und schaut mit vcgencmd otp_dump | grep 17: ob 17:3020000a ausgegeben wird. Dann hat alles funktioniert. Diese Installation mit aktuellem Bootmanager kopieren wir jetzt auf eine USB Festplatte.

Festplatte Einrichten

Schließt eure Festplatte oder euren USB Stick am Pi an.

ACHTUNG ALLE DATEN GEHEN VERLOREN

Erstellt zwei Partitionen mit parted:

sudo parted /dev/sda

(parted) mktable msdos
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
(parted) mkpart primary fat32 0% 300M
(parted) mkpart primary ext4 300M 100%
(parted) quit

Formatiert die erstellten Partitionen als fat32 für boot und mkfs.ext4 für die System Partition
sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
sudo mkfs.ext4 /dev/sda2

Die neuen Partitionen werden jetzt gemounted und das System der SD Karte wird kopiert:

sudo mkdir /mnt/target
sudo mount /dev/sda2 /mnt/target/
sudo mkdir /mnt/target/boot
sudo mount /dev/sda1 /mnt/target/boot/
sudo apt-get update; sudo apt-get install rsync
sudo rsync -ax --progress / /boot /mnt/target

Jetzt generieren wir noch neue Keys auf dem neuen System:

cd /mnt/target
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

Beim neuen System ändern wir in der ** cmdline.txt noch denn bootparameter von /dev/mmcblk0p2 (SD Kadte) zu /dev/sda2 (Festplatte)

sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/target/boot/cmdline.txt sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/target/etc/fstab

Mit sudo poweroff fahrt ihr das System herunter. Steckt die SD Karte aus und fahrt den Pi wieder hoch. Er sollte jetzt von der USB Festplatte booten.

Wichtig

Die Festplatte muss innerhalb von zwei Sekunden Daten liefern können, bei meinem Test mit einer WD portable funktionierte das ohne Probleme. Ihr dürft nach dem boot KEIN update mit sudo apt-get upgrade machen ! Danach funktionierte das booten nicht mehr.

Hier noch eine Code-Zusammenfassung für C/P:

Aktuellen Bootloader installieren:

sudo apt-get update; sudo apt-get install rpi-update; sudo BRANCH=next rpi-update; echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt; sudo reboot

Disk Partitionieren:

sudo parted /dev/sda

(parted) mktable msdos
(parted) mkpart primary fat32 0% 300M
(parted) mkpart primary ext4 300M 100%

Formatieren und kopieren mit abschließendem Herunterfahren des Systems:

sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
sudo mkfs.ext4 /dev/sda2
sudo mkdir /mnt/target
sudo mount /dev/sda2 /mnt/target/
sudo mkdir /mnt/target/boot
sudo mount /dev/sda1 /mnt/target/boot/
sudo apt-get update
sudo apt-get install rsync
sudo rsync -ax --progress / /boot /mnt/target
cd /mnt/target
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
sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/target/boot/cmdline.txt
sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/target/etc/fstab
cd ~
sudo umount /mnt/target/boot
sudo umount /mnt/target
sudo poweroff