Приёмы работы с многотомными tar-архивами, нарезанными split

Сегодня пришлось поработать с почтовыми бэкапами, которые у меня запакованы в tar-том с gzip сжатием и для удобства хранения нарезаны на кусочки по 2ГБ. В ходе работы написал для себя небольшую шпаргалку. Итак, что используется:

tar -- классический архиватор без сжатия. Получает на вход каталог, на выход отдаёт файл. Самостоятельно сжимать не умеет. Понимает, что такое жёсткие ссылки и умеет корректно их обрабатывать. В последствии я узнал, что tar умеет самостоятельно делать многотомные архивы, но мои бэкапы уже были нарезаны split'ом и теперь с ними приходится как-то работать. :)

gzip -- утилита сжатия. На вход получает файл, на выход отдаёт сжатый файл. Работает в один поток, что на многоядерных/многопроцессорных машинах не есть good. Отсюда, кстати, становится очевиден UNIX-way -- если необходимо сжать папку, надо использовать пару tar+gzip. Здесь отмечу, что gzip является утилитой сжатия в архиваторе tar по-умолчанию (опция -z)

pigz -- многопоточный gzip. Умеет задействовать несколько потоков, чем сокращает время запаковки архивов в 6 раз. Архив разжимается через многопоточный unpigz или однопоточный gunzip. Можно использовать для сжатия tar (опция --use-compress-program)

split -- утилита нарезки файла/потока на файлы одного размера с уникальными именами.

Вот в принципе и всё, что будем использовать.

Создаём многотомный tar-архив, используя для сжатия архиватор pigz, и режем на куски по 2ГБ:

tar --use-compress-program "pigz" -c /some/dir/2/archive | split -d -b 2000m - backupname.tar.gz.

В результате выполнения получим несколько (в зависимости от исходного каталога) файлов с именами backupname.tar.gz.00, backupname.tar.gz.01 и т.д.

Получаем список файлов, сохраняем в файл list_of_files.txt:

cat /path/to/archives/backupname.tar.gz.* | tar -zt > list_of_files.txt

Распаковываем несколько файлов:

cat /path/to/archives/backupname.tar.gz.* | tar -zxv path/to/file1 path/to/file2 path/to/file3

Тут отмечу, что пути файлов path/to/file1 можно брать из полученного ранее листинга list_of_files.txt.

Распаковываем всё в каталог /target/dir, используя многопоточный архиватор unpigz:

cat /path/to/archives/backupname.tar.gz.* | tar --use-compress-program "unpigz" -x -C /target/dir

 

Добавлено: 2014-10-14


Поделиться:

Оставить комментарий

Комментарий появится после одобрения.

Поля со значком * обязательны для заполнения.