Saya baru saja melakukan percobaan kecil di mana saya membuat arsip tar dengan file duplikat untuk melihat apakah itu akan dikompresi, saya kagum, ternyata tidak! Detail mengikuti (hasil indentasi untuk kesenangan membaca):
$ 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
$
Pertama saya membuat file data acak 1MiB (a). Kemudian saya menyalinnya ke file b dan juga menghubungkannya dengan c. Saat membuat tarball, tar tampaknya menyadari hardlink, karena tarball hanya ~ 2MiB dan bukan ~ 3Mib.
Sekarang saya berharap gzip mengurangi ukuran tarball menjadi ~ 1MiB karena a dan b adalah duplikat, dan harus ada 1MiB data kontinu diulang di dalam tarball, namun ini tidak terjadi.
Kenapa ini? Dan bagaimana saya bisa mengompres tarball secara efisien dalam kasus ini?