Von 8GB image auf 2GB - Image verkleinern

  • Hallo Forum,


    da ich vor habe ein paar Images vorzukonfigurieren und diese zum Download anzubieten, wüsste ich gerne, wie man von einem 8GB Image zu einem 2GB Image kommt.
    Bis jetzt installiere ich das Standard raspbian und erweitere zunächst die Root Partition, damit genug Platz für doie Pakete vorhanden sind. Wenn ich dann alles fertig habe, mache ich ein Image der SD-Karte. Leider ist dann ja noch freier Speicherplatz auf dem Image, welches die Größe des Images unnötig in die Höhe schießen lässt.


    Kennt jemand eine Methode, wie man das Image wieder "schlank" bekommt?


    Gruß,
    ps915

    Well in my humble opinion, of course without offending anyone who thinks differently from my point of view, but also by looking into this matter in a different way and without fighting and by trying to make it clear and by considering each and every one's opinion, I honestly believe that I completely forgot what I was going to say.

  • Hallo ps915,


    das Image der SD-Karte musst du auf einem zweiten Rechner erstellen. Dort kannst du die knapp 8GB große Partition zum Beispiel mit GParted wieder verkleinern damit das ganze System wieder auf eine 2GB SD-Karte passt. Damit das Image nicht zu groß wird, mountest du als nächstes die Datenpartition.


    Code
    sudo mount /dev/mmcblk0p2 /mnt


    Jetzt erstellst du eine neue Datei, welche mit Nullen gefüllt wird und den gesamten noch verfügbaren Speicherplatz belegt.


    Code
    sudo dd if=/dev/zero of=/mnt/zero.file


    Wenn der Vorgang abgebrochen wurde weil der Datenträger voll ist, löschst du die Datei wieder und hängst die SD-Karte aus.


    Code
    sudo rm -f /mnt/zero.file
    sudo umount /mnt/


    Somit hast du den freien Speicherplatz auf der SD-Karte mit Nullen beschrieben. Dadurch wird beim Erstellen und Komprimieren des Images einiges an Speicherplatz gespart. Bevor du das Image erstellst brauchst du noch das genaue Ende der zweiten Partition.


    Code
    sudo fdisk -l /dev/mmcblk0


    Der Befehl liefert zum Beispiel folgende Ausgabe.



    Das Ende der zweiten Partition liegt in diesem Fall bei 3788799. Daraus folgt der folgende Befehl zum Erstellen des komprimierten Images. Bei count musst du die Anzahl der zu kopierenden Blöcke angeben. Diese berechnet sich aus "Ende der zweiten Partition + 1 = 3788800". Die Blocksize (bs) findest du ebenfalls in der Ausgabe von fdisk (hier 512 Bytes).


    Code
    sudo dd if=/dev/mmcblk0 bs=512 count=3788800 | gzip > raspberry.dump.gz


    Wiederherstellen kannst du das Image mit folgendem Befehl.


    Code
    gzip -dc raspberry.dump.gz | sudo dd of=/dev/mmcblk0


    Gruß Georg

  • Wenn in der Partition nur der Anfang belegt ist, sollte es eigendlich funktionieren, daß Du die zweite Partition mit fdisk löscht und kleiner wieder anlegst. Fdisk ändert nur die Partitionstabelle und löscht keine Daten. Danach ein Neustart und ein
    'sudo resize2fs /dev/mmcblk0p2'
    Kann ich aber grad nicht testen.

  • Hallo orb,


    die von dir beschriebene Vorgehensweise funktioniert wie du schon sagt nur solange keine Dateien in dem Bereich abegelgt wurden, welcher freigemacht werden soll. Wie ps915 beschrieben hat, wurde die Systempartition vergrößert damit die neu installierten Pakete Platz haben. Es ist also sehr wahrscheinlich, dass die Daten über die 2GB Grenze hinausgehen. Vermutlich kann der tatsächlich genutzer Speicherplatz durch löschen des Paket-Caches und eventuell durch entfernen unnötiger Pakete wieder auf unter 2GB reduziert werden. Aber es bleibt das Risiko, dass Daten jenseits der 2GB Marke gespeichert wurden. Daher würde ich zu GParted raten um die Partition zu verkleinern.


    Gruß Georg

  • Vielen Dank! Werde ich sofort ausprobieren, wenn ich Ubuntu auf dem Laptop habe!

    Well in my humble opinion, of course without offending anyone who thinks differently from my point of view, but also by looking into this matter in a different way and without fighting and by trying to make it clear and by considering each and every one's opinion, I honestly believe that I completely forgot what I was going to say.