Tout d'abord, les fichiers fragmentés ne sont traités de manière transparente que si vous recherchez, pas si vous écrivez des zéros.
Pour que ce soit plus clair, l'exemple de Wikipedia
dd if=/dev/zero of=sparse-file bs=1k count=0 seek=5120
n'est pas écrivez des zéros, il ouvrira le fichier de sortie, cherchera (sautera) 5 Mo puis écrira zéro des zéros (c'est-à-dire rien du tout). Cette commande (pas de Wikipédia)
dd if=/dev/zero of=sparse-file bs=1k count=5120
écrira 5 Mo de zéros et ne créera pas de fichier fragmenté !
Par conséquent, un fichier qui n'est déjà pas clairsemé ne le deviendra pas par magie plus tard.
Deuxièmement, pour créer un fichier avec beaucoup de zéros clairsemés, vous devez le cp
cp --sparse=always original sparsefile
ou vous pouvez également utiliser l'option --sparse de tar ou rsync.
Peut-être que le moyen le plus simple de sparsifier un fichier en place serait d'utiliser fallocate
utilitaire comme suit :
fallocate -v --dig-holes {file_name}
fallocate(1) est fourni par le paquet util-linux sur Debian.
Modification de ma réponse pour être complet :
- Ballon d'espace FS vide avec des zéros (ATTENTION :cela modifie votre image disque) :
losetup --partscan --find --show disk.img
Supposons qu'il donne /dev/loop1 comme disque et qu'il n'y a qu'une seule partition, sinon nous devons répéter cela pour chaque partition contenant FS montable (ignorez la partition d'échange, etc.).
mkdir -p /mnt/tmp
mount /dev/loop1p1 /mnt/tmp
dd if=/dev/zero of=/mnt/tmp/tempfile
Laissez-le finir par échouer avec ENOSPC.
/bin/rm -f /mnt/tmp/tempfile
umount /mnt/tmp
losetup -d /dev/loop1
- Copier dans une image clairsemée :
'dd' a une option pour convertir un fichier avec des zéros en un fichier fragmenté :
dd if=disk.img of=disk-sparse.img conv=sparse