Probleme mit Raspberry-Pi-Boot-Reihenfolge beheben

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.

Boot-Reihenfolge einstellen

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


Dieser Artikel ist ursprünglich unter https://kofler.info/tipp-probleme-mit-raspberry-pi-boot-reihenfolge-beheben/ erschienen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Wenn Sie hier einen Kommentar absenden, erklären Sie sich mit der folgenden Datenschutzerklärung einverstanden.