En primer lugar, los archivos dispersos solo se manejan de forma transparente si busca, no si escribe ceros.
Para que quede más claro, el ejemplo de Wikipedia
dd if=/dev/zero of=sparse-file bs=1k count=0 seek=5120
no escriba ceros, abrirá el archivo de salida, buscará (saltará) 5 MB y luego escribirá cero ceros (es decir, nada en absoluto). Este comando (no de Wikipedia)
dd if=/dev/zero of=sparse-file bs=1k count=5120
¡escribirá 5 MB de ceros y no creará un archivo disperso!
Como consecuencia, un archivo que ya no es disperso no se volverá disperso mágicamente más adelante.
En segundo lugar, para crear un archivo con muchos ceros dispersos, debe copiarlo
cp --sparse=always original sparsefile
o también puede usar la opción --sparse de tar o rsync.
Quizás la forma más fácil de dispersar un archivo en su lugar sería usar fallocate
utilidad de la siguiente manera:
fallocate -v --dig-holes {file_name}
fallocate(1) es proporcionado por el paquete util-linux en Debian.
Editando mi respuesta para completarla:
- Globo de espacio FS vacío con ceros (ADVERTENCIA:esto cambia la imagen de su disco):
losetup --partscan --find --show disk.img
Suponga que proporciona /dev/loop1 como disco y solo hay una partición; de lo contrario, debemos repetir esto para cada partición con FS montable (ignore la partición de intercambio, etc.).
mkdir -p /mnt/tmp
mount /dev/loop1p1 /mnt/tmp
dd if=/dev/zero of=/mnt/tmp/tempfile
Deja que termine hasta fallar con ENOSPC.
/bin/rm -f /mnt/tmp/tempfile
umount /mnt/tmp
losetup -d /dev/loop1
- Copiar en una imagen dispersa:
'dd' tiene una opción para convertir un archivo con ceros en un archivo disperso:
dd if=disk.img of=disk-sparse.img conv=sparse