Je viens de faire une petite expérience où j'ai créé une archive tar avec des fichiers en double pour voir si elle serait compressée, à ma grande admiration, ce n'était pas le cas! Les détails suivent (résultats en retrait pour le plaisir de lire):
$ dd if=/dev/urandom bs=1M count=1 of=a
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.114354 s, 9.2 MB/s
$ cp a b
$ ln a c
$ ll
total 3072
-rw-r--r-- 2 guido guido 1048576 Sep 24 15:51 a
-rw-r--r-- 1 guido guido 1048576 Sep 24 15:51 b
-rw-r--r-- 2 guido guido 1048576 Sep 24 15:51 c
$ tar -c * -f test.tar
$ ls -l test.tar
-rw-r--r-- 1 guido guido 2109440 Sep 24 15:51 test.tar
$ gzip test.tar
$ ls -l test.tar.gz
-rw-r--r-- 1 guido guido 2097921 Sep 24 15:51 test.tar.gz
$
J'ai d'abord créé un fichier 1 Mo de données aléatoires (a). Ensuite, je l'ai copié dans un fichier b et l'ai également lié à c. Lors de la création de l'archive tar, tar était apparemment au courant du lien dur, car l'archive tar n'était que de ~ 2 Mo et non de ~ 3Mib.
Maintenant, je m'attendais à ce que gzip réduise la taille de l'archive tar à ~ 1 Mo, car a et b sont des doublons, et il devrait y avoir 1 Mo de données continues répétées à l'intérieur de l'archive, mais cela ne s'est pas produit.
Pourquoi est-ce? Et comment pourrais-je compresser efficacement l'archive tar dans ces cas?