Zunächst einmal werden Sparse-Dateien nur dann transparent behandelt, wenn Sie suchen, nicht wenn Sie Nullen schreiben.
Zur Verdeutlichung das Beispiel aus Wikipedia
dd if=/dev/zero of=sparse-file bs=1k count=0 seek=5120
tut nicht Schreiben Sie beliebige Nullen, es öffnet die Ausgabedatei, sucht (überspringt) 5 MB und schreibt dann Null Nullen (also gar nichts). Dieser Befehl (nicht aus Wikipedia)
dd if=/dev/zero of=sparse-file bs=1k count=5120
schreibt 5 MB Nullen und erstellt keine Sparse-Datei!
Folglich wird eine Datei, die bereits nicht spärlich ist, später nicht auf magische Weise spärlich.
Zweitens, um eine Datei mit vielen Nullen spärlich zu machen, müssen Sie sie cp machen
cp --sparse=always original sparsefile
oder Sie können auch die Option --sparse von tar oder rsync verwenden.
Der vielleicht einfachste Weg, eine Datei an Ort und Stelle zu sparen, wäre die Verwendung von fallocate
Dienstprogramm wie folgt:
fallocate -v --dig-holes {file_name}
fallocate(1) wird vom util-linux-Paket auf Debian bereitgestellt.
Bearbeiten meiner Antwort der Vollständigkeit halber:
- Ballonieren Sie leeren FS-Speicherplatz mit Nullen (ACHTUNG:Dies ändert Ihr Disk-Image):
losetup --partscan --find --show disk.img
Angenommen, es gibt /dev/loop1 als Festplatte an und es gibt nur eine Partition, andernfalls müssen wir dies für jede Partition mit einhängbaren FS darin wiederholen (Swap-Partition ignorieren usw.).
mkdir -p /mnt/tmp
mount /dev/loop1p1 /mnt/tmp
dd if=/dev/zero of=/mnt/tmp/tempfile
Lassen Sie es mit ENOSPC bis zum Scheitern beenden.
/bin/rm -f /mnt/tmp/tempfile
umount /mnt/tmp
losetup -d /dev/loop1
- In ein Sparse-Image kopieren:
'dd' hat eine Option, um eine Datei mit Nullen in eine Sparse-Datei umzuwandeln:
dd if=disk.img of=disk-sparse.img conv=sparse