Das Image ist zügig runtergeladen und das 'Setup' ist schnell durchgeführt und man stellt dann nach dem Einrichten fest, das das eingerichtete Image auf eine 16Gb-Karte resized wurde obwohl eine 2Gb auch gereicht hätte.
raspi-config bietet nur das Erweitern des rootfs an und ist für das Verkleinern nutzlos. Dieses Tutorial habe ich in Anlehnung dieses Threads geschrieben: Von 8GB image auf 2GB - Image verkleinern
Wir brauche dazu einen Linuxrechner auf dem Gparted installiert ist.(GParted gibt es auch als Live-Version)
Die SD-Karte in den Linuxrechner stecken und mit GParted die zweite Partition verkleinern, 'n kleines bischen Luft lassen, so das alles noch locker auf eine 2Gb-Karte passt.
Soll ohne Veränderung am System fortgefahren werden, mounten wir die Rootpartition
und füllen den Freien Bereich mit Nullen
Falls sfill nicht vorhanden ist, das Paket secure-delete nachinstallieren. Wer das nicht möchte, bedient sich Georgs Methode mit dem zero.file
Anschließend die Partition unmounten.
Dann mit
ein neues Image erstellen und mit
auf die neue kleinere Karte schreiben.
Will/muß man am Dateisystem Änderungen vornehmen weil man das Image z.B. weitergeben will oder für 'Fremde' ein angepasstes anfertigen will müssen wir ein kleinen Umweg gehen.
Dann muß das oben erstellte Image als Loop-Device nach /mnt gemountet werden. (Ist /mnt eine Partition, dann eine Verzeichnis als Mountpoint benutzen, sonst kann es passieren, das das Journaling eine wegkriegt.)
Ein Loop-Device ist ein virtuelles Laufwerk, das wie alle anderen Laufwerke unter Linux verwendet werden kann.
Linux kann zwar aus einer Imagedatei ein Blockgerät machen, das man dann mounten kann, aber die Loop-Devices kennen in dem Sinne keine Partitionen. Sie verwenden Einzelimages. Somit kann man über das Offset geziehlt Bereiche auswählen, die dann gemountet werden können. Soll hier ganz kurz dazu reichen. Werft mal die Suchmaschine eures geringsten Mistrauens an und sucht nach Loop Devices, ihr werdet sehen da schreiben Leute ganze Bücher drüber... .
Da wir das rootfs verändern wollen, müssen wir das Offset ermitteln mit sfdisk.
und bekommen folgende Ausgabe: (kann variieren)
Disk neu.img: 235 cylinders, 255 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
neu.img1 8192 122879 114688 c W95 FAT32 (LBA)
neu.img2 122880 3842047 3719168 83 Linux
neu.img3 0 - 0 0 Empty
neu.img4 0 - 0 0 Empty
Dabei ist neu.img2 das rootfs unseres Images und da interessiert uns nur der Startsektor, den wir mit 512 multiplizieren. Somit haben wir das Offset errechnet. Oder wir lassen uns das beim mounten ausrechnen.
Jetzt können Änderunge wie z.B. Netzwerkeinstellungen (IP-Adressen, WPA-Schlüssel, SSID etc.) vorgenommen werden
... und jetzt den freien Platz mit Nullen füllen:
Anschließend das Loop-Device unmounten.
Jetzt das Image auf die 'kleinere' SD-Karte schreiben.
Mit der neuen Karte den Pi booten und mit raspi-config das rootfs resizen.