Дедупликация файлов внутри нескольких архивов .tar.gz

Дедупликация файлов внутри нескольких архивов .tar.gz

Я делаю еженощную резервную копию с моего хостинга в формате .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

Я опоздал на вечеринку, но, судя по всему, требования сводятся к следующему:

  1. Дедупликация содержимого tarball-файла
  2. Необходимо иметь возможность восстанавливать оригинальные файлы gzip

Сначала это кажется невозможным. Дедупликация обычно зависит от возможности работать с несжатыми файлами. Но потом я понял, что если вы можете положиться на то, что gunzip/gzip создаст точно такой же файл (лучше протестировать), то вы можете использоватьzbackup, который на самом деле предназначен для дедупликации tarballs. Итак:

  1. gunzipтарболы, которые вы получаете
  2. gziptar-архивы еще раз, чтобы убедиться, что они полностью совпадают (так и должно быть, если реализация gzip одинакова, но уровень сжатия может различаться, например, поэтому вам может потребоваться это выяснить)
  3. Скормить тарболыzbackup

решение2

Я не думаю, что вы сможете сделать то, что пытаетесь сделать, «легко».

Если файлы .tgz достаточно похожи, вы можете использовать xdelta и создать резервную копию первого файла полностью, а затем xdelta с различиями между первым и вторым файлами.

Альтернативным частичным решением было бы использование rzip (или lrzip ??), который предназначен для сжатия очень больших файлов. Хотя он и не идеален, он, вероятно, будет значительно меньше того, что вы используете в данный момент, за счет загрузки процессора и памяти.

решение3

Я использую squashfs для схожих целей:

mksquashfs dir1 dir2 dir3 backup_file.fs -keep-as-directory

решение4

Есть отличныйрешениекоторый делает то, что вы просите, он дедуплицирует блоки внутри нескольких файлов TAR. Это не только устраняет файлы, которые не были изменены, но и сохраняет только измененные части похожих файлов.

Однако это клиент-серверное решение, где сервер является платным предложением. Но благодаря дедупликации он очень доступен, плюс он предлагает шифрование и безопасно хранит файлы для вас.

Клиент использует обычный код tar, поэтому команда проста в использовании.

Связанный контент