Lösung 1:
Damals stieß ich auf ein ähnliches Problem mit eingebetteten Linux-Distributionen – entfernen Sie den ganzen Müll, bevor Sie das Image komprimieren.
00
. Warte, bis es stirbt. Löschen Sie asdf.txt.
Sie haben gerade Nullen in den gesamten freien Speicherplatz auf dem Gerät geschrieben.
Nehmen Sie nun ein Disk-Image und führen Sie es über gzip aus. Voila, spärliches Bild.
Skaliert wahrscheinlich nicht sehr gut und könnte Probleme verursachen, wenn Sie tatsächlich auf die Festplatte schreiben müssen, aber hey.
Sie könnten einen rsync-Schnappschuss der Festplatte auf ein anderes Volume machen, dieses nullen und dann dieses Festplatten-Image nehmen.
Hinweis:Könnte für SSD gefährlich sein, der Benutzer sollte diesen Vorgang vor dem Bestätigen in Betracht ziehen.
Lösung 2:
Angenommen, Sie möchten 18
speichern bis 21
und Sie sind root:
-
33
-
Verwenden Sie
40
oder nur:
50
unbenutzte Blöcke mit Null füllen; warten Sie, bis es das Dateisystem vollständig gefüllt hat, dann:
67
-
Nehmen Sie das Bild mit dd auf und verwenden Sie conv=sparse, um im laufenden Betrieb Nullen zu stanzen:
75
Wenn Sie die Komprimierung verwenden möchten, müssen Sie die Nullen nicht mit dd stanzen, da Nullblöcke stark komprimierbar sind:
dd if=/dev/sdxn | gz -c | dd of=/tgtfs/image.raw
PS:Sie sollten beachten, dass es keine gute Idee ist, dies (das Dateisystem mit Nullen zu füllen) regelmäßig auf einem Flash-Speicher-basierten Speichermedium (d. h. Ihr Quelldateisystem ist eine SSD) zu tun, da dies zu umfangreichen Schreibvorgängen führt auf Ihre SSD und verringern deren Lebensdauer. (aber es ist in Ordnung für gelegentliche Datenübertragungen)
Lösung 3:
Verwenden Sie dd mit der count-Option.
In Ihrem Fall haben Sie fdisk verwendet, also werde ich diesen Ansatz verfolgen. Ihr "sudo fdisk -l "erzeugt:
Disk /dev/sda: 64.0 GB, 64023257088 bytes
255 heads, 63 sectors/track, 7783 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000e4b5
Device Boot Start End Blocks Id System
/dev/sda1 * 1 27 209920 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 27 525 4000768 5 Extended
Partition 2 does not end on cylinder boundary.
/dev/sda5 27 353 2621440 83 Linux
/dev/sda6 353 405 416768 83 Linux
/dev/sda7 405 490 675840 83 Linux
/dev/sda8 490 525 282624 83 Linux
Die beiden Dinge, die Sie beachten sollten, sind 1) die Einheitsgröße und 2) die Spalte "Ende". In Ihrem Fall haben Sie Zylinder, die 8225280 Bytes entsprechen. In der Spalte "Ende" endet sda8 bei 525 (das sind 525[Einheiten]*16065*512 =~4,3 GB)
dd kann viele Dinge tun, z. B. nach einem Offset starten oder nach einer bestimmten Anzahl von Blöcken stoppen. Letzteres machen wir mit der count-Option in dd. Der Befehl würde wie folgt aussehen:
sudo dd if=/dev/sda of=/your_directory/image_name.iso bs=8225280 count=526
Wobei -bs die Blockgröße ist (es ist am einfachsten, die Einheit zu verwenden, die fdisk verwendet, aber jede Einheit reicht aus, solange die count-Option in diesen Einheiten deklariert ist), und count ist die Anzahl der Einheiten, die wir kopieren möchten (beachten Sie dass wir den Zähler um 1 erhöhen, um den letzten Block zu erfassen).
Lösung 4:
Während 80
den freien Festplattenplatz und verwenden Sie 94
/106
ist möglich, auf riesigen Festplatten mit leerem Speicherplatz, der in Hunderten von GB läuft, 119
ing ist schmerzhaft langsam - ganz zu schweigen davon, dass, wie in anderen Antworten angegeben, 126
ing einer SDD bis EOF.
Folgendes habe ich getan, als ich auf diese Situation gestoßen bin:
-
Auf einer Lubuntu-Live-CD wurde
139
verwendet um die Festplatte auf die kleinstmögliche Größe zu 'schrumpfen', wobei der Rest des Speicherplatzes nicht zugeordnet bleibt -
Gebraucht
146
um das schnell komprimierte Image zu erstellen (selbstverständlich möchten Sie die Komprimierung vielleicht überspringen, wenn Sie über ausreichend Speicherplatz zum Speichern von Rohdaten verfügen (oder anderweitig dazu neigen, die CPU-Belastung zu reduzieren) - Gebraucht
157
um die Daten zurück auf eine andere Festplatte zu kopieren - Verwendet
162
erneut, um die Partition zu 'erweitern'
Ich habe es nicht für mehrere Partitionen ausprobiert, aber ich glaube, dass der obige Prozess angepasst werden kann, um „Partitionen“ zu kopieren, wenn zuerst die Partitionstabelle auf der Zielfestplatte erstellt wird und nur die in der Partition enthaltenen Daten über 170 - Offsets lesen/schreiben (
189
/198
Option von 202
) entsprechend erforderlich.
Lösung 5:
Du kannst nicht. 211
ist ein Tool auf sehr niedriger Ebene und hat keine Möglichkeit, zwischen Dateien und leerem Speicherplatz zu unterscheiden.
Auf der anderen Seite wird der leere Speicherplatz sehr, sehr gut komprimiert. Wenn Sie sich also nur Sorgen um den Speicherplatz machen, nicht zum Beispiel um die Schreibzeit, dann leiten Sie ihn einfach durch gzip.