Za prvé, s řídkými soubory se zachází transparentně, pouze pokud hledáte, nikoli pokud píšete nuly.
Aby to bylo jasnější, příklad z Wikipedie
dd if=/dev/zero of=sparse-file bs=1k count=0 seek=5120
ne napište libovolné nuly, otevře se výstupní soubor, vyhledá (přeskočí) 5 MB a poté zapíše nulu nuly (tedy vůbec nic). Tento příkaz (ne z Wikipedie)
dd if=/dev/zero of=sparse-file bs=1k count=5120
zapíše 5 MB nul a nevytvoří řídký soubor!
V důsledku toho se soubor, který již není řídký, později magicky nestane řídkým.
Za druhé, aby byl soubor se spoustou nul řídký, musíte jej cp
cp --sparse=always original sparsefile
nebo můžete také použít volbu --sparse tar nebo rsync.
Snad nejjednodušší způsob, jak rozložit soubor na místě, by bylo použít fallocate
nástroj takto:
fallocate -v --dig-holes {file_name}
fallocate(1) je poskytován balíčkem util-linux na Debianu.
Úprava mé odpovědi pro úplnost:
- Balónový prázdný prostor FS s nulami (VAROVÁNÍ:tím se změní obraz disku):
losetup --partscan --find --show disk.img
Předpokládejme, že jako disk je uveden /dev/loop1 a existuje pouze jeden oddíl, jinak to musíme zopakovat pro každý oddíl s připojitelným FS (ignorovat odkládací oddíl atd.).
mkdir -p /mnt/tmp
mount /dev/loop1p1 /mnt/tmp
dd if=/dev/zero of=/mnt/tmp/tempfile
Nechte to dopadnout do neúspěchu s ENOSPC.
/bin/rm -f /mnt/tmp/tempfile
umount /mnt/tmp
losetup -d /dev/loop1
- Zkopírujte do řídkého obrázku:
'dd' má možnost převést soubor s nulami na řídký soubor:
dd if=disk.img of=disk-sparse.img conv=sparse