Właśnie wykonałem mały eksperyment, w którym utworzyłem archiwum tar ze zduplikowanymi plikami, aby sprawdzić, czy będzie ono skompresowane, ku mojemu podziwowi, nie było! Szczegóły poniżej (wyniki wcięte dla przyjemności czytania):
$ 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
$
Najpierw stworzyłem plik 1 MB losowych danych (a). Następnie skopiowałem go do pliku b, a także połączyłem go do c. Podczas tworzenia tarballa, tar najwyraźniej był świadomy twardego linku, ponieważ tarball miał tylko ~ 2MiB, a nie ~ 3Mib.
Teraz spodziewałem się, że gzip zmniejszy rozmiar tarballa do ~ 1MiB, ponieważ aib są duplikatami, a wewnątrz tarballa powinien być powtarzany 1MiB ciągłych danych, ale tak się nie stało.
Dlaczego to? I w jaki sposób mogę skutecznie skompresować archiwum w tych przypadkach?