Сжатие папки, но не сжимать определенные типы файлов, а включать их в файл gz

Сжатие папки, но не сжимать определенные типы файлов, а включать их в файл gz

Я использую tar с pigz для сжатия папки и сохранения резервной копии. Размер этой папки ~250 ГБ или больше. В этой папке находится разнообразное содержимое, включая многочисленные текстовые и лог-файлы, ISO-файлы и zip-файлы во многих различных подпапках. Полное сжатие этой папки занимает около 1 часа (иногда больше). В данный момент я использую это в скрипте.

tar -cf - <data_folder> | pigz -1 > <output_file>.tar.$

Я хочу сократить время сжатия, исключив сжатие ISO и zip-файлов. Я хочу, чтобы они (ISO и zip-файлы) были включены в gzip-файл как таковые (несжатые).

Мой вопрос таков:Можно ли выборочно сжимать файлы по типу и при этом включать несжатые файлы в вывод gzip? Как это попробовать?

решение1

Нет, не можете. По крайней мере, напрямую.

tarне выполняет никакого сжатия. Он просто считывает часть (виртуальной) файловой системы и генерирует из нее один связный поток. Затем этот поток часто передается в инструмент/библиотеку сжатия, например gzip/libz. Часть сжатия не видит и даже не знает об отдельных файлах. Он просто сжимает поток, сгенерированный tar. Поэтому вы не можете добавить выборочное сжатие к вашему текущему подходу.

Что вы можете сделать, так это постепенно создать архив tar, сжимая каждый файл по отдельности и затем добавляя его в архив tar. Сделав это, вы можете добавить (например) образы iso без сжатия в архив. Однако обратите внимание, что сам архив tar не будет сжат. Следовательно, после его распаковки вам также придется распаковывать каждый файл по отдельности, где это уместно.

Сколько времени вы на самом деле теряете, сжимая iso и zip файлы? Учитывая tar | pigz > <file>потоковую обработку, я бы предположил, что вы не теряете так много времени. Есть блоки, которые записываются на диск, в то время как следующие блоки сжимаются, в то время как поток формируется. Это происходит параллельно.

Возможно, вы сможете оптимизировать свою стратегию:

Вы можете поместить все файлы iso и zip в специальные каталоги, а затем создать свой архив в три шага: tar&compress остальное, добавить каталог iso, добавить каталог zip. Полученный архив все еще требует длительной процедуры извлечения, распаковки внешнего архива, а затем распаковки и распаковки внутреннего архива. Тем не менее, это более осуществимо, чем распаковка каждого отдельного файла.

Или вы настраиваете команды: должен ли это быть архив tar файловой системы или вы можете использовать ddдля резервного копирования всего раздела? Резервное копирование всего раздела имеет преимущество непрерывного чтения с диска(ов), что может быть быстрее, чем работа с файловой системой. Я уверен, что вы можете настроиться pigzна работу с большими фрагментами, что должно дать вам ускорение, если у вас проблемы с файлами iso и zip. Кроме того, вы можете добавить некоторую буферизацию (например, mbuffer) перед записью результата на диск для дальнейшей оптимизации доступа к носителям.

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