Das Raspbian Image hat derzeit eine Größe nach dem entpacken des Downloads von 3,2 GB. Mir stellte sich die Frage: kann ich das was ich z.B. als Grundlage installiere für ein FHEM System, einmal tun und dann als Grundlage für weiter System aufheben? Klar werden jetzt alle sagen, ganz einfach! Aber ganz so simpel ist es nicht. Es geht damit los, dass es meines Wissen kein Tool gibt mit dem sich von einer SD Karte unter Windows ein Image der definierten Partitionen/Laufwerke machen lässt.
Also ganz praktisch: Man nimmt das USB Image Tool, schreibt das Raspbian Image (3,2GB) auf eine 16 GB SD Karte und zieht von dieser wieder ein Image. Ergebnis: Man hat ein 16 GB Image und, das USB Image Tool weigert sich diese auf ein 4 GB SD Karte zu schreiben, die ja reichen würde. Soviel zur Einleitung.
Wie kann man vorgehen?
- Raspian Image auf eine 16 GB SD Karte schreiben.
- Rein in den Raspberry und starten.
- Jetzt kann man mit Raspi-config alles tun, blos nicht: Expand Filesystem
- Jetzt können wir Updates fahren, Software installieren. Für eine FHEM Installation passt alles in das 3,2 GB Image.
Mit dem Befehl "fdisk -l" kann man sich die Partitionen anzeigen lassen. der Befehl "df" zeigt die tatsächliche Belegung der SD Card an.
Ich hatte auf dem Original Image 183648 1K-Blöcke verfügbar. Nach dem Update/Upgrade und einem apt-get clean waren es 261564. Nach der FHEM Installation waren es 218112. Also ist der belegte Platz nach Bereinigung soweit verringert, dass FHEM das nicht aufholt.
Wenn das Master-System soweit fertig ist, fahren wir es herunter (sudo halt).
Die SD Karte kommt in einen USB Reader und wir begeben uns an einen anderen Raspi oder starten den einzigen Raspi mit einem anderen Image. Als Speicher für das Image brauchen wir noch einen USB Stick.
Meistens ist es ein gute Idee, die USB Stick's schon vor dem Start anzustecken. Die alten Raspi's stürzen wegen Spannungsproblemen ab, wenn man im laufenden Betrieb USB Sticks ansteckt, die neuen können das, wenn das Netzteil in Ordnung ist.
Nun kommt etwas Arbeit auf der Kommandozeile, also Terminal (putty) zum Raspi aufbauen und anmelden.
Meist muss der USB Stick erst gemounted werden, das kann aber von System zu System unterschiedlich sein.
sudo mkdir /media/usbstick
sudo mount -t vfat -o utf8,uid=pi,gid=pi,noatime /dev/sdb1 /media/usbstick
Mit dem Befehl lsblk kann man sich alle Geräte listen lassen. In meinem Beispiel sieht das so aus:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 14,8G 0 disk
+-sda1 8:1 1 56M 0 part /media/boot
+-sda2 8:2 1 3G 0 part /media/f24a4...
sdb 8:16 1 29,4G 0 disk
+-sdb1 8:17 1 29,4G 0 part /media/TRANSCEND1
mmcblk0 179:0 0 15,1G 0 disk
+-mmcblk0p1 179:1 0 56M 0 part /boot
+-mmcblk0p2 179:2 0 15G 0 part /
Die "HDD" sda ist mein USB Reader mit SD Karte, sdb ist mein USB Stick. Das aktive System ist in mmcblk0.
Jetzt werden die ersten 3,2 GB mittels dd quasi von a nach b kopiert:
sudo dd bs=1M count=3125 if=/dev/sda of=/media/usbstick/raspbian.img
Das dauert übrigens ca 04:25 min. Der Wert war ziemlich konstant, unabhängig ob 4M oder 1M Blöcke oder ob beim kopieren unter Windows vom Stick auf auf die SD Karte an USB3 Verbindungen.
Ergebnis ist wieder ein 3,2 GB großes Image welches auf eine beliebige SD Karte geschrieben werden kann. Mit Raspi-config und Expand Filesystem kann man jederzeit die gesamte SD Karte nutzen.
Erweitern geht immer einfach und ist ein zwei Schritt Prozess durch vergrößern der Partition und erweitern des Filesystems:
fdisk
resize2fs
Eine Verkleinerung ist schwieriger, deswegen sollte man eventuell überlegen, die Erweiterung manuell zu machen und nicht die gesamte SD Karte nutzen. Die nächste SD Karte könnte nämlich ein paar Bytes kleiner sein.