Shell: Mit dd Volume ohne nicht zugeordneten Platz speichern

Eine SD-Karte mit nicht zugeordnetem Speicher, die 2 GB Platz beansprucht, wird auf einem 16 GB Datenträger bei Verwendung von dd mit 16 GB gespeichert.
Das mag bei der Größe der heutigen Datenträger zu verschmerzen sein, doch was passiert, wenn dieses (eigentlich 2 GB grosse) Image auf einem 8 GB Datenträger zurückgesichert werden soll? Der Platz reicht nicht aus, die Operation kann nicht durchgeführt werden!Soll ein Image für einen Raspberry pi gespeichert werden (der beim ersten Booten das Volumen auf die Größe des Mediums ausdehnt), dann wäre eine manuelle Volumenerweiterung noch nicht einmal notwendig und eine platzsparende Speicherung erwünscht.

Wie speichert man also ein SD-Karten-Abbild ohne den nicht zugeordneten Speicher?

Es gibt eine Variante mit /dev/zero, wo der freie Datenträgerbereich mit Nullen gefüllt wird und das Image mit gzip komprimiert wird – diese Methode soll hier nicht thematisiert werden.

Zuerst wird die Größe der SD-Karte ermittelt (alle Kommandos als root):

fdsik -l

Ausgabebeispiel (Auszug) für /dev/sdd mit 2 Partitionen:

Disk /dev/sdd: 7,2 GiB, 7759462400 bytes, 15155200 sectors
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: 0xc1dc39e5

Device Boot Start End Sectors Size Id Type
/dev/sdd1 8192 96042 87851 42,9M c W95 FAT32 (LBA)
/dev/sdd2 98304 3522559 3424256 1,6G 83 Linux

Die Daten belegen keine 2 GB PLatz. Mit dd gesichert, würde aber der komplette Datenträger mit ca. 8 GB gesichert werden.

dd if=/dev/sdd of=stretch-lite-minimal.img bs=512 count=3522560

Die Blockgröße beträgt 512 Bytes (bs), die Anzahl der Sektoren (Endsektor von /dev/sdd2) beträgt 3522559. Für den count-Parameter wird diese Anzahl um einen erhöht (Blockende), was zu count=3522560 führt.

Ausgabe:

3522560+0 records in
3522560+0 records out
1803550720 bytes (1,8 GB, 1,7 GiB) copied, 132,878 s, 13,6 MB/s

Wir haben also nur 1,8 GB Platz gebraucht, dd lief damit schneller und das Image kann auch auf kleinere Volumens als dem Originaldatenträger mit 8 GB kopiert werden.