¡Acabo de hacer un pequeño experimento en el que creé un archivo tar con archivos duplicados para ver si se comprimiría, para mi asombro, no fue así! Los detalles siguen (resultados sangrados por placer de lectura):
$ 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
$
Primero creé un archivo de 1MiB de datos aleatorios (a). Luego lo copié en un archivo b y también lo vinculé a c. Al crear el tarball, tar aparentemente era consciente del enlace rígido, ya que el tarball era solo ~ 2MiB y no ~ 3Mib.
Ahora esperaba que gzip redujera el tamaño del tarball a ~ 1MiB ya que a y b son duplicados, y debería haber 1MiB de datos continuos repetidos dentro del tarball, sin embargo, esto no ocurrió.
¿Por qué es esto? ¿Y cómo podría comprimir el tarball de manera eficiente en estos casos?