Почему архиваторы не эффективно сжимают одинаковые файлы?

При попытке сжать большие (~2Гб) файлы. Это backup postgresql базы данных, его делаю так: pg_dump -F c -b -U postgres -f 1 MyDB), но для чистоты эксперимента я взял 2 одинаковых.
[user@comp test_compress]$ md5sum 1 2 
8b6582a7fa0250692c9c0e1747878aa1  1
8b6582a7fa0250692c9c0e1747878aa1  2

[user@comp test_compress]$ du -sh *
1,8G	1
1,8G	2

При добавление их в архив tar:
[user@comp test_compress]$ tar -cf all.tar 1 2
и последующего сжатия (пробовал gzip, xz и bzip2) размер не уменьшается (ожидал увидеть 1.8, но не как не 3.5, ведь фалы одинаковые)
[user@comp test_compress]$ du -sh all*
3,6G	all.tar
3,6G	all.tar.bz2
3,5G	all.tar.gz
3,5G	all.tar.xz

В чем причина, и как можно эффективного сжимать близкие по содержимому большие файлы?
  • Вопрос задан
  • 645 просмотров
Пригласить эксперта
Ответы на вопрос 3
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Хотите эффективно сжать бэкап - делайте не -Fc (который кое-как сжат сам по себе - поэтому и ваши архиваторы не осилили), а -Fp - и натравливайте на получившееся что-нибудь типа xz -9.
Ответ написан
@4144
Попробуйте программы для создания бэкапов. Обычно они дедуплицируют данные и сжимают их.

На пример zbackup на хвод принимает tar и сохраняет в своей директории пожатые данные.
borgbackup немного хуже сжимает, но предоставляет доступ к отдельным файлам, без распаковки всего бэкапа. Также сохраняет в своей директории.
Ответ написан
@vadimr
Как архиватор поймёт, что это одинаковые куски? Ему нужно для этого проанализировать все частичные совпадения вплоть до 1.8 гигабайт, что совершенно неэффективно. Словарь для элементов такого размера построить не представляется возможным.

Если бы вы не обладали воспоминанием, как именно вы создали этот тар, вы бы тоже ни в жизнь не заметили, что он состоит из двух одинаковых половин.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы