Einleitung.
Industrial Raspberry Pi mit Raspberry Pi Compute Module (im Folgenden CM genannt) kann von einem SSD-Laufwerk oder einer microSD-Karte booten, wie wir bisher berichtet haben. Die Grundidee ist das Booten von eMMC.
Im Gegensatz zum Raspberry Pi 4 („Pi 4“) und 5 kann der CM4 den Bootloader auch nicht auf die eMMC schreiben, wie er ist. Wir haben bereits berichtet, dass der PL-R4 ersetzt werden kann, indem Sie die DIP-Schalter auf „write-enabled“ stellen und ihn dann von einem anderen Gerät über USB übertragen.
Das Betriebssystem (Systembereich) auf der eMMC funktioniert auf die gleiche Weise. Die Image-Datei wird über das USB-Kabel geschrieben. Das mag etwas umständlich erscheinen, aber es ist ein System, das nicht einfach ersetzt werden kann.
Für industrielle Raspi ist das Verfahren etwas komplizierter, aber es ist praktisch, mit dem Befehl dd zu sichern und mit PiShrink zu komprimieren, um die Schreibzeit zu verkürzen.
Für Pi 4 und Pi 5 verwenden Sie den Befehl dd auf die gleiche Weise wie diesmal, wenn Sie das gesamte System als Image-Datei sichern. Bitte beachten Sie das Folgende.
Die Umwelt dieser Zeit
Da das Ziel für die Übertragung der Bilddateien CM4 ist, haben wir den Pi 4 als Arbeitsgerät verwendet. Das Arbeitsgerät kann auch ein Windows-Rechner sein.
- Arbeitsgerät: Raspberry Pi 4 (Bücherwurm) 64bit (Pi 4)
- Das zu sichernde Gerät ist PL-R4 (CM4)
- Verwenden Sie RPI BOOT (rpiboot_setup.exe für Windows-Rechner)
- Verwenden Sie ein USB-A zu C Kabel
- dd-Befehl (oder bmap-Methode mit wic-Erweiterung wird ebenfalls unterstützt)
- Komprimierung mit Pi Shrink
Das Betriebssystem des Raspberry Pi wurde aktualisiert und aufgerüstet. (Stand zum Zeitpunkt der Erstellung dieses Artikels)
Es ist üblich, den Win32 Disk Manager für Windows oder den Befehl dd für Linux-Umgebungen zu verwenden, um Image-Dateien zu sichern.
- Win32 Disk Manager (Windows)
- dd-Befehl (Linux)
Da es sich um ein Backup von CM4 handelt, muss außerdem RPI BOOT ausgeführt werden, bevor Sie den Befehl dd ausführen.
Installieren von RPI BOOT
Installieren Sie RPI BOOT auf einem funktionierenden Pi4. Erstellt im Home-Verzeichnis.
(Wenn Sie mit einem Windows-Rechner arbeiten, installieren Sie mit rpiboot_setup.exe: https://github.com/raspberrypi/usbboot/tree/master/win32 )
sudo apt install git libusb-1.0-0-dev pkg-config build-essential
git clone --recurse-submodules --shallow-submodules --depth=1
https://github.com/raspberrypi/usbboot
cd usbboot
make
cd recovary
Nachdem Sie RPI BOOT auf dem Pi 4 (oder Windows-Rechner) ausgeführt haben, verbinden Sie das Arbeitsgerät und den PL-R4 (CM4) mit einem USB-Kabel und verwenden den Befehl dd, um ein Backup zu erstellen.
Ausführung von RPI BOOT
Schalten Sie nach dem Ausführen von RPI BOOT den DIP-Schalter des PL-R4 auf die schreibgeschützte Seite und verbinden Sie ihn über ein USB-Kabel mit dem funktionierenden Pi4.
Das gleiche Verfahren wird für RPI BOOT für Windows verwendet.

RPI BOOT wird wie folgt ausgeführt
cd ~/usbboot/recovary
sudo ../rpiboot -d .
In diesem Fall werden die Bilddateien im Verzeichnis recovary gesichert.
Wenn nach dem Anschließen des USB-Kabels keine Fehler auftreten, erscheint auf dem Desktop des Pi 4, der zum Arbeitsgerät gemacht wurde, ein Dialogfeld, das ihn als Speicherplatz erkennt.
Der Befehl dd kann nun ausgeführt werden.
Der PL-R4 und das Arbeitsgerät, das Sie sichern möchten, sollten über ein USB-Kabel verbunden sein, nachdem Sie RPI BOOT ausgeführt haben. eine Anmerkung:
Das RPI BOOT von CM4 funktioniert mit USB 2.0.
Schließen Sie ihn daher an den USB 2.0-Anschluss auf der Pi 4-Seite des Arbeitsgeräts an.
Nur CM4 wurde angeschlossen, und die USB 3.0-Anschlüsse blieben mit I/O-Fehlern hängen.
In der offiziellen Dokumentation heißt es außerdem.
- The CM5 EEPROM supports MMC, USB-MSD, USB 2.0 (CM4 only), Network and NVMe boot by default. Try booting to Linux from an alternate boot mode (e.g. network) to verify the
nRPIBOOTGPIO can be pulled low and that the USB 2.0 interface is working.
https://github.com/raspberrypi/usbboot?tab =readme-ov-file#troubleshooting
Ausführen des Befehls dd
Um den Befehl dd auszuführen, müssen Sie den Bereich angeben, der als Backup-Quelle dient.
Der Befehl fdisk kann zur Überprüfung verwendet werden.sudo fdisk -l
Diesmal können Sie sehen, dass der über ein USB-Kabel angeschlossene CM4 /dev/sdb ist.
sudo fdisk -l /dev/sdb
Disk /dev/sdb: 29.12 GiB, 31268536320 bytes, 61071360 sectors
Disk model: 0001
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4ef66861
Device Boot Start End Sectors Size Id Type
/dev/sdb1 8192 1056767 1048576 512M c W95 FAT32 (LBA)
/dev/sdb2 1056768 61071359 60014592 28.6G 83 Linux
Da Sie nun wissen, dass es sich um /dev/sdb handelt, können Sie es mit dem Befehl dd sichern.
Angabe der Blockgröße
Der Befehl dd gibt die Datei und die Blockgröße (bs) an.
Es gibt viele Optionen. Sie können count weglassen, wenn Sie zumindest bs und conv=sync angeben.
Die in bs angegebene Anzahl von Bytes ist die Blockgröße pro Lese-/Schreibvorgang. 512 Bytes ist der Standardwert.
Er sollte ein Vielfaches der physischen Blockgröße des verwendeten Mediums sein. (512 ist 1024 (1M)…4096 (4M), usw.)
Obwohl eine größere Blockgröße einfach schneller ist, ist es sicherer, einen kleineren Wert zu verwenden, da im Falle eines Fehlers die gesamte Größe zerstört wird. Selbst wenn die Blockgröße erhöht wird, kann die Fertigstellung dadurch langsamer sein.
Fügen Sie status=progressals Option hinzu, um den Fortschritt zu verfolgen. Ohne diese Option ist es unmöglich zu wissen, wann der Vorgang abgeschlossen sein wird.
Beispiel für das Format des Befehls dd (Dateiname des Abbilds)
sudo dd if=/dev/sdb of=backup-bookworm-4m.img bs=4M status=progress
Das if steht für InFile und das of steht für OutFile. Also if = Leseziel, of ist das Schreibziel.
In der offiziellen Raspberry Pi-Dokumentation steht bs=4M beim Schreiben, also habe ich die Sicherung ebenfalls auf 4M gesetzt.
Offizielle Dokumentation: https://www.raspberrypi.com/documentation/computers/compute-module.html#flash-the-emmc
Das Ergebnis waren 31 GB mit einer Übertragungsrate von 9,9 MB/s, was etwa 52 Minuten in Anspruch nahm.
31268536320 bytes (31 GB, 29 GiB) copied, 3159.45 s, 9.9 MB/s
Ich denke, bs=4M ist dieses Mal in Ordnung, da es sich um USB 2.0 handelt.
Ich persönlich habe auf meinem Raspberry Pi in der Vergangenheit häufig bs=1M verwendet, da es sich um einen USB 2.0 mit 16 GB Kapazität handelte.
Die Wiederherstellung einer gesicherten Image-Datei wird immer noch mit dem Befehl dd geschrieben.
Da die Dateigröße ohnehin schon groß ist und die Wiederherstellung Zeit in Anspruch nimmt, wird die resultierende .img-Datei komprimiert.
Komprimierung mit PiShrink
Die Prozedur zum Schreiben der resultierenden Imagedatei dauert ebenfalls fast eine Stunde für eine 29 GB große Datei.
Tatsächlich ist der tatsächliche Speicherplatz, der von jeder Partition (bootfs, rootfs) verwendet wird, nicht so groß.
In diesem Beispiel beträgt die tatsächliche Nutzung von sdb1 und sdb2 75MB/512MB und 4,7GB/29G.
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 510M 75M 436M 15% /media/raspida/bootfs
/dev/sdb2 29G 4.7G 23G 18% /media/raspida/rootfs
Bei der Wiederherstellung aus einem Backup sollte die resultierende Image-Datei vor dem Schreiben komprimiert werden, um sie so schnell wie möglich zu schreiben.
Wenn Sie nur den Bereich komprimieren, den Sie verwenden, wird die Dateigröße kleiner, und Sie werden nicht mit dem Speicherplatz für die Bilddatei überfordert sein. Auch die Gesamtzeit für den Schreibvorgang wird reduziert, so dass Sie zwei Fliegen mit einer Klappe schlagen.
Die Anwendung zur Komprimierung von Bilddateien ist PiShrink.
PiShrink: https://github.com/Drewsif/PiShrink
Nach dem Schreiben mit einer komprimierten Image-Datei zeigen die Partitionsinformationen mehr freien Speicherplatz an.

Im vorherigen Raspberry Pi OS wurde dieser freie Speicherplatz manuell über raspi-config erweitert.
In der aktuellen Version wird der Speicherplatz jedoch beim Booten automatisch erweitert (Expanded).
PiShrink verkleinert die Partition aus der gesicherten Image-Datei auf die verwendete Größe. Das bedeutet, dass die Dateigröße kleiner ist, da sie keinen freien Speicherplatz enthält.
Installieren und Ausführen von PiShrink
Installieren Sie zunächst die erforderlichen Pakete.
Zum Zeitpunkt der Erstellung dieses Artikels war nur pigz nicht in der neuesten Version von bookworm installiert.
sudo apt update && sudo apt install -y wget parted gzip pigz xz-utils udev e2fsprogs
Laden Sie die Skriptdatei mit wget herunter und kopieren Sie sie mit Ausführungsrechten nach /usr/local/bin.
wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh
chmod +x pishrink.sh
sudo mv pishrink.sh /usr/local/bin
Jetzt können Sie loslegen.
PiShrink wird in folgendem Format verwendet.
Diesmal wurde die gesicherte Image-Datei unter ~/usbboot/recovary erstellt. Verschieben Sie sie also und verwenden Sie den folgenden Befehl.
cd ~/usbboot/recovary
sudo pishrink.sh backup-image-name.img
Die ursprüngliche .img-Datei wird durch die komprimierte Größe ersetzt.
Dadurch wurde die Dateigröße von 30 GB auf 7,1 GB reduziert.
pishrink.sh: Gathering data
Creating new /etc/rc.local
pishrink.sh: Checking filesystem
rootfs: 144755/1846656 files (0.1% non-contiguous), 1345322/7501824 blocks
resize2fs 1.47.0 (5-Feb-2023)
pishrink.sh: Shrinking filesystem
resize2fs 1.47.0 (5-Feb-2023)
Resizing the filesystem on /dev/loop0 to 1720340 (4k) blocks.
Begin pass 3 (max = 229)
Scanning inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/loop0 is now 1720340 (4k) blocks long.
pishrink.sh: Zeroing any free space left
pishrink.sh: Zeroed 1.8G
pishrink.sh: Shrinking partition
pishrink.sh: Truncating image
pishrink.sh: Shrunk backup-image-name.img from 30G to 7.1G
Die Größe wird ohne Optionen ausreichend angepasst.
Schreiben Sie die gesicherte Image-Datei
Als Test habe ich als Wiederherstellungsziel ein USB-Flash-Laufwerk angegeben und darauf geschrieben.
Da es vom selben Pi4 stammt, könnte auch Raspberry Pi Imager verwendet werden, aber da ich mir die Mühe gemacht habe, habe ich versucht, mit dem Befehl dd darauf zu schreiben.
Den Speicherort des USB-Speichers finden Sie, indem Sie auf die gleiche Weise unter sudo fdisk -lnachsehen. In diesem Fall war es /dev/sdc.
Die Blockgröße (bs) beträgt 4M, und das Format ist die Umkehrung der if= und of= Pfade aus dem Backup.
sudo dd bs=4M if=backup-image-name.img of=/dev/sdc conv=fsync status=progress
Dies ist eine Image-Datei, die von PiShrink auf 7,1 GB verkleinert wurde.
Obwohl es vom verwendeten Bereich abhängt, betrug die Schreibzeit dieses Mal nur etwa 10 Minuten.
Der verwendete USB-Stick hat eine Kapazität von 64 GB.

Schreiben per Bmap-Methode wird ebenfalls unterstützt
In einigen Bilddateien sehen Sie die Erweiterung .wic anstelle der früheren Erweiterung .img. Dies ist die bmap-Methode.
bmap-Image-Dateien unterstützen auch das Schreiben auf CM4 mit diesem RPI BOOT.
Die bmap-Methode soll schneller sein als der Befehl dd.
Der Grund dafür ist, dass diese Methode für die Blockzuordnung optimiert ist und schneller ist als das Kopieren des gesamten Bildes, da weniger Daten kopiert werden.
Darüber hinaus kann wic die Bilddatei auch in einer wks-Datei erzeugen, nachdem das Bild generiert wurde (Bitbake).
Dies wird am häufigsten verwendet, um Ihre eigenen Images in einer Yocto-Meta-Raspberrypi-Umgebung zu erstellen.
Es kann auch mit dem Befehl bmaptool create aus einer vorhandenen Bilddatei erzeugt werden.
In diesem Fall gibt es keinen großen Vorteil bei der Schreibgeschwindigkeit. Sie ist allerdings ein wenig schneller.
Die bmap-Methode ist ein effizienter Weg, um auf eine Weise zu schreiben, die denjenigen vertraut ist, die mit Embedded Linux arbeiten.
Um es auszuprobieren, habe ich bmap-tools installiert und eine bmap-Datei aus einer gesicherten Image-Datei erstellt.
sudo apt install bmap-tools
Ausgabe im Bmap-Format aus einer Bilddatei (RAW-Disk-Image) vor der Komprimierung durch PiShrink oder andere Mittel.
bmaptool create -o bmap-file-image.bmap backup-image-name.img
Sie können die hier erzeugte .bmap-Datei angeben und sie auch mit dem Befehl bamptool schreiben.
Weitere Informationen über bmap finden Sie unter Yocto Project und bmap-tools.
- https://ja.wikipedia.org/wiki/Yocto_Project
- https://github.com/intel/bmap-tools
- https://manpages.ubuntu.com/manpages/focal/man1/bmaptool.1.html
Sicherung von Bilddateien
Bei Pi 4 und Pi 5 läuft der dd-Befehl ohne jede Aktion durch.
Bei CM4 einschließlich PL-R4 können Sie dd-Befehle auf die gleiche Weise handhaben, indem Sie die Einstellungen vorab in einen schreibfähigen Zustand versetzen und RPI BOOT ausführen.
Bilddateien können mit PiShrink komprimiert werden, um die Schreibzeit zu verkürzen.
Die kleinere Dateigröße würde es bequemer machen, Bilddateien als Backups zu speichern.
Es war eine Möglichkeit, mit dem dd-Befehl auch auf einem industriellen Raspi zu sichern und wiederherzustellen.
Artikel beigetragen von Raspida
Raspberry Pi-Informationsseite, die auch von Nicht-Ingenieuren genutzt werden kann raspida.com eine Raspberry Pi-Informationsseite, die auch für Nicht-Ingenieure interessant ist und mit der sie umgehen können. Er schreibt auch technische Blogartikel auf der PiLink-Website über den Raspberry Pi für den industriellen Einsatz.

