Mein Raspberry Pi 5 ist mit einem SSD-Hat ausgestattet (Pimoroni, siehe Blog). Auf der SSD ist Raspberry Pi OS Bookworm installiert. Jetzt möchte ich aber Raspberry Pi OS Trixie ausprobieren. Das System habe ich mit dem Raspberry Pi Imager auf eine SD-Card geschrieben. Sowohl SSD als auch SD-Karte sind angeschlossen, die Boot-Reihenfolge ist auf SD-Card first eingestellt.

raspi-config
verändert die Variable BOOT_ORDER
, die im EEPROM gespeichert wird. Die Variable kann mit `rpi-eeprom-config´ gelesen werden:
rpi-eeprom-config
[all]
BOOT_UART=0
WAKE_ON_GPIO=0
POWER_OFF_ON_HALT=1
BOOT_ORDER=0xf461
0xf461
bedeutet (die Auswertung erfolgt mit den niedrigsten Bits zuerst, also von rechts nach links):
1 - Try SD card
6 - Try NVMe
4 - Try USB mass storage
f - RESTART (loop back to the beginning)
Die Einstellung ist also korrekt, trotzdem bootet der Pi hartnäckig von der SSD und ignoriert die SD-Card. Warum?
Analyse
Schuld sind die Partition-UUIDs! Die SSD habe ich vor eineinhalb Jahren mit dem SD Card Copier geklont. Die Option New Partition UUIDs habe ich nicht verwendet, ich sah keinen Grund dazu. Jetzt liegt folgendes Problem vor: Die SSD und die vom Rasbperry Pi Imager erzeugte SD-Card haben die gleichen Partition-UUIDs!
lsblk -o NAME,PARTUUID,UUID,MOUNTPOINT
NAME PARTUUID UUID MOUNTPOINT
mmcblk0
├─mmcblk0p1 8a676486-01 1E1E-DAB6 /boot/firmware
└─mmcblk0p2 8a676486-02 b8316dab-786b-45e8-815c-3d4bbf198d98
nvme0n1
├─nvme0n1p1 8a676486-01 1E1E-DAB6
├─nvme0n1p2 8a676486-02 b8316dab-786b-45e8-815c-3d4bbf198d98 /
└─nvme0n1p3 8a676486-03 293896b6-33ee-43de-87d4-56944456cec6
Deswegen sind die UUIDs in /etc/fstab
und in /boot/firmware/cmdline.txt
nicht eindeutig:
cat /etc/fstab
proc /proc proc defaults 0 0
PARTUUID=8a676486-01 /boot/firmware vfat defaults 0 2
PARTUUID=8a676486-02 / ext4 defaults,noatime 0 1
cat /boot/firmware/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=8a676486-02 rootfstype=ext4 \
fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=AT
Solange beide Datenträger verbunden sind, ist nicht vorhersehbar, welche Partitionen tatsächlich genutzt werden. Am einfachsten wäre es natürlich, das Kabel zur SSD vorübergehend zu trennen; das ist aber nicht empfehlenswert, weil es hierfür keinen richtigen Stecker gibt, sondern nur eine sehr filigrane Kabelpressverbindungen, die möglichst nicht anrührt werden sollte.
Lösung
Ich habe den Pi ohne SD-Karte neu gebootet und dann
- die Filesystem-UUIDs geändert,
- /etc/fstab angepasst und
- /boot/firmware/cmdline.txt ebenfalls angepasst.
Im Detail: Da die ursprüngliche Partitionierung der SSD von der SD-Karte übernommen wurde, liegt eine MBR-Partitionstabelle vor. In diesem Fall ergeben sich die Partition-UUIDs aus der Disk-ID plus Partitionsnummer. Die Disk-ID (Hex-Code mit 8 Stellen) kann mit fdisk
geändert werden:
fdisk /dev/nvme0n1
Welcome to fdisk (util-linux 2.38.1).
Command (m for help): x. <-- aktiviert den Expertenmodus
Expert command (m for help): i <-- ID ändern
Enter the new disk identifier: 0x1234fedc. <-- neue ID als Hex-Code
Disk identifier changed from 0x8a676486 to 0x1234fedc.
Expert command (m for help): r <-- zurück ins Hauptmenü (return)
Command (m for help): w <-- Änderungen speichern (write)
The partition table has been altered.
Syncing disks.
Mit fdisk -l
vergewissern Sie sich, dass die Änderung wirklich funktioniert hat:
fdisk -l /dev/nvme0n1
...
Disk identifier: 0x1234fedc
Weil der Datenträger in Verwendung ist, zeigt fdisk -l /dev/nvme0n1
weiter die alte UUID an. Sie müssen glauben, dass es funktioniert hat :-(
Bevor Sie einen Reboot machen, müssen Sie nun mit einem Editor auch /etc/fstab
und /boot/firmware/cmdline.txt
anpassen. In meinem Fall sehen die Dateien jetzt so aus:
cat /etc/fstab
proc /proc proc defaults 0 0
PARTUUID=1234fedc-01 /boot/firmware vfat defaults 0 2
PARTUUID=1234fedc-02 / ext4 defaults,noatime 0 1
cat /boot/firmware/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=1234fedc-02 rootfstype=ext4 \
fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=AT
Jetzt ist ein Reboot fällig, um zu testen, ob alles funktioniert. (Bei mir hat es im ersten Versuch NICHT funktioniert, weil ich bei fdisk
das write-Kommando vergessen habe. Dann muss die SSD ausgebaut, ein USB-Gehäuse mit einem Computer verbunden und der Vorgang wiederholt werden.)
Ab jetzt sind die Partitions-UUIDs von SD-Karte und SSD voneinander unterscheidbar. Die Umschaltung des Boot-Systems mit raspi-config
funktioniert, wie sie soll.
Quellen/Links
- https://kofler.info/raspberry-pi-5-mit-pcie-ssd/
- https://forums.raspberrypi.com/viewtopic.php?t=364985
- https://forums.raspberrypi.com/viewtopic.php?p=2189368#p2189368
- https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#BOOT_ORDER
- https://askubuntu.com/questions/1250224/how-to-change-partuuid