Я делаю еженощную резервную копию с моего хостинга в формате .tar.gz. Данные меняются очень мало каждую ночь (<10 МБ).
Я хотел бы заархивировать эти файлы и дедуплицировать (сплошное сжатие) файлы в нескольких архивах .tar.gz, не извлекая каждый отдельный файл резервной копии.
Упрощенный пример:
2013-02-24.tar.gz
содержит a.pdf
2013-02-25.tar.gz
содержит a.pdf
иb.pdf
Я хочу сжать, заархивировать 2013-02-24.tar.gz
и 2013-02-25.tar.gz
сохранить данные a.pdf
только один раз.
Единственный способ заставить дедупликацию работать — распаковать оба .tar.gz и запаковать их снова (используя сжатие solid). Но это еще один дополнительный шаг, и он, вероятно, сотрет информацию о файловой системе из-за разных ОС. Просто tar/gz для обоих файлов .tar.gz не сработает, конечный размер этого архива будет суммой обоих исходных файлов .tar.gz.
Есть ли способ использовать дедупликацию содержимого нескольких файлов .tar.gz?
решение1
Я опоздал на вечеринку, но, судя по всему, требования сводятся к следующему:
- Дедупликация содержимого tarball-файла
- Необходимо иметь возможность восстанавливать оригинальные файлы gzip
Сначала это кажется невозможным. Дедупликация обычно зависит от возможности работать с несжатыми файлами. Но потом я понял, что если вы можете положиться на то, что gunzip/gzip создаст точно такой же файл (лучше протестировать), то вы можете использоватьzbackup, который на самом деле предназначен для дедупликации tarballs. Итак:
gunzip
тарболы, которые вы получаетеgzip
tar-архивы еще раз, чтобы убедиться, что они полностью совпадают (так и должно быть, если реализация gzip одинакова, но уровень сжатия может различаться, например, поэтому вам может потребоваться это выяснить)- Скормить тарболы
zbackup
решение2
Я не думаю, что вы сможете сделать то, что пытаетесь сделать, «легко».
Если файлы .tgz достаточно похожи, вы можете использовать xdelta и создать резервную копию первого файла полностью, а затем xdelta с различиями между первым и вторым файлами.
Альтернативным частичным решением было бы использование rzip (или lrzip ??), который предназначен для сжатия очень больших файлов. Хотя он и не идеален, он, вероятно, будет значительно меньше того, что вы используете в данный момент, за счет загрузки процессора и памяти.
решение3
Я использую squashfs для схожих целей:
mksquashfs dir1 dir2 dir3 backup_file.fs -keep-as-directory
решение4
Есть отличныйрешениекоторый делает то, что вы просите, он дедуплицирует блоки внутри нескольких файлов TAR. Это не только устраняет файлы, которые не были изменены, но и сохраняет только измененные части похожих файлов.
Однако это клиент-серверное решение, где сервер является платным предложением. Но благодаря дедупликации он очень доступен, плюс он предлагает шифрование и безопасно хранит файлы для вас.
Клиент использует обычный код tar, поэтому команда проста в использовании.