Auf Schleifenbildern
Vergessen Sie zunächst offset=
, verwenden Sie losetup --partscan
die Partition und laden Sie sie einfach über ein /dev/loop0p1
.
# losetup --partscan /dev/loop0 myimage.img # lsblk # mount /dev/loop0p1 /mnt
Um den leeren Speicherplatz in einer Partition effizient zu löschen, führen fstrim
Sie das in einer Schleife eingebundene Dateisystem wie auf einer SSD aus. (Dadurch wird die Bilddatei tatsächlich spärlich.)
# fstrim -v /mnt
Beim Ändern der Größe von Partitionen
Für den Moment müssen Sie jedoch keinen leeren Raum leeren oder so etwas tun. Es ist völlig unerheblich, ob der etwa beschnittene Bereich mit Nullen oder mit alten Datenblöcken gefüllt wird.
Stattdessen müssen Sie genau dasselbe tun, wie Sie es mit ext4 auf einer echten Festplatte tun würden - Sie müssen jede Ebene von innen nach außen verkleinern. Sie können Schritte nicht überspringen, nur weil es sich um ein Bild handelt.
Um eine Partition zu verkleinern, die ein Dateisystem enthält, müssen Sie das Dateisystem zunächst anweisen, sich selbst zu verkleinern. Bei ext2 / 3/4 erfolgt dies mit resize2fs
. Dadurch werden Daten aus dem Bereich verschoben, in dem Sie sich gerade befinden, und die neuen Grenzen werden als Teil der Metadaten des Dateisystems gespeichert. (Ich vermute, das meinte man mit "Defragmentieren".)
Erst wenn das Dateisystem verkleinert wurde, können Sie auch die Partition verkleinern, die es enthält. Dies kann über parted oder fdisk erfolgen, indem Sie einfach die Endadresse der Partition ändern.
Randbemerkung: Sie sollten in der Lage sein, GParted zu verwenden, um die Größe des Dateisystems und der Partition in einem Schritt zu ändern - sofern dies das Arbeiten mit Schleifengeräten unterstützt. Dies kann von der Version von GParted abhängen. (Das CLI parted kann Dateisysteme jedoch nicht verkleinern, die Partition wird nur abgeschnitten.)
Sobald das Dateisystem und die Partition geändert wurden, können Sie das gesamte Image, das sie enthält, abschneiden. Trennen Sie dazu zuerst das Loop-Gerät und verwenden Sie es truncate --size=...
in Ihrer Image-Datei.
(Um sicher zu gehen, ohne sorgfältige Berechnungen durchführen zu müssen, würde ich das Dateisystem etwas mehr verkleinern, als für die Erstellung eines "Pufferbereichs" erforderlich ist). Wenn ich beispielsweise ein 4-GB-Image wollte, würde ich das Dateisystem auf 3 GB, die Partition, verkleinern auf 3,5 GB, und kürzen Sie dann das Image auf 4 GB. Wachsen Sie dann alles in umgekehrter Reihenfolge auf, um den 'Puffer'-Speicherplatz zu füllen.)