Je sais que la copie ou le transfert de ce qui était à l'origine un fichier clairsemé sans utiliser un utilitaire qui comprend les fichiers clairsemés entraînera le remplissage des «trous». Existe-t-il une méthode ou un utilitaire pour transformer ce qui était autrefois un fichier clairsemé en clairsemé?
Par exemple:
créez un fichier clairsemé:
% dd if=/dev/zero of=TEST bs=1 count=0 seek=1G
# do some op that pads out the holes
% scp TEST localhost:~/TEST2
% ls -lhs TEST*
0 -rw-rw-r--. 1 tony tony 1.0G Oct 16 13:35 TEST
1.1G -rw-rw-r--. 1 tony tony 1.0G Oct 16 13:37 TEST2
Existe-t-il un moyen de:
% resparse TEST2
to get:
0 -rw-rw-r--. 1 tony tony 1.0G Oct 16 13:35 TEST
0G -rw-rw-r--. 1 tony tony 1.0G Oct 16 13:37 TEST2
files
utilities
sparse-files
user25849
la source
la source
rsync -aS
.Réponses:
Edit 2015
depuis util-linux 2.25, l'
fallocate
utilitaire sous Linux a une option-d
/--dig-hole
pour cela.Creuserait un trou pour chaque bloc plein de zéros dans le fichier
Sur les anciens systèmes, vous pouvez le faire à la main:
Linux a une
FALLOC_FL_PUNCH_HOLE
option pourfallocate
cela. J'ai trouvé un script sur github avec un exemple:Utilisation de FALLOC_FL_PUNCH_HOLE depuis Python
Je l'ai un peu modifié pour faire ce que vous avez demandé - percer des trous dans des régions de fichiers remplis de zéros. C'est ici:
Utilisation de FALLOC_FL_PUNCH_HOLE à partir de Python pour percer des trous dans les fichiers
Exemple:
Notez que
punch.py
ne trouve que des blocs de 4096 octets à perforer, donc il se peut que le fichier ne soit pas aussi clairsemé qu'au début. Cela pourrait être rendu plus intelligent, bien sûr. De plus, il n'est que légèrement testé , alors faites attention et faites des sauvegardes avant de lui faire confiance!la source
Si vous voulez rendre un fichier clairsemé, vous pouvez le faire directement avec
dd
.Du
dd(1)
manuel:Donc, notez qu'il ne cherchera à l'avance que si le bloc entier est vide. Pour un maximum d'économie
bs=1
.la source
bs=512
n'a pas vraiment de sens, car les disques sont des périphériques de bloc. (bs=4096
dans les disques plus récents)cp --sparse=always zeropadded.iso isnowsparse.iso
À moins de
tar
le mettre en place avec un-S
drapeau (en supposant GNU tar), et de ré-exécuter lescp
... non. Aucun utilitaire que je connais n'aurait un moyen de savoir où étaient les "trous".la source
J'ai eu de la chance avec ça:
Les
-I
forces rsync de mettre à jour tous les fichiers, peu importe si elle pense qu'ils ont changé ou non; le-S
provoque la raréfaction des nouveaux fichiers.-a
rend cela récursif afin que vous puissiez réduire les arborescences de répertoires entiers en une seule commande.Ce n'est pas aussi bon qu'un outil sur mesure qui chasse les trous et les détruit
FALLOC_FL_PUNCH_HOLE
, mais c'est mieux que d'avoir à dupliquer des arborescences de répertoires entières.la source