Добиться лучшего сжатия для нескольких сжатых файлов

265
nopper

У меня есть несколько каталогов, содержащих тысячи файлов gzip (в целом речь идет о файлах 1M). Некоторые из этих файлов повреждены, и большинство из них действительно маленькие (пара КБ).

Почти все они очень похожи по содержанию, поэтому сжатие всех вместе должно улучшить степень сжатия по сравнению с текущей ситуацией.

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

Какова лучшая стратегия здесь? Тар устойчив к коррупции? Я бы предпочел что-то, что может быть реализовано в виде однострочного или простого скрипта bash.

3
Примечание: tar не является компрессором. Kamil Maciorowski 6 лет назад 1
ни один файл не является "устойчивым" к повреждению. Keltari 6 лет назад 0

2 ответа на вопрос

3
davidgo

После изучения этого способа я решил бы, как распаковать все файлы, создать список всех сумм sha256 (или любой другой хэш, который вы предпочитаете), а затем сжать все файлы вместе в один архив. Я был бы склонен использовать файл tar.gz для скорости и простоты использования, но вы можете использовать zip или bzip, 7zip, xz или что-то еще, если вы хотите меньший архив. Сжатие всех файлов в один большой сэкономит довольно много места само по себе.

Когда это будет сделано, используйте «par2», чтобы создать избыточность и проверку для zip-файла, и создайте резервную копию файла вместе с файлами .par2. (Я не играл с этим много, но цель par2 состоит в том, чтобы создать архив, который создает избыточность (PARity), чтобы поддержать целостность файлов.

Я на самом деле думал более или менее то же самое. Проблема в том, что мне, вероятно, не хватает места, чтобы на самом деле распаковать все файлы на любом носителе прямо сейчас (забыл добавить, что в описании их учетной записи, я думаю, больше 1 ТБ). Можно ли указать tar распаковывать файлы на лету при создании архива? Кроме того, есть ли у вас опыт работы с форматами архивов, которые позволяют вам произвольный доступ к файлам вместо потоковой передачи? nopper 6 лет назад 0
@nopper - это файлы gzipped или tar.gz - это имеет значение davidgo 6 лет назад 0
файлы сжаты. Суффикс это .gz nopper 6 лет назад 0
2
Keltari

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

Вы говорите, что существуют тысячи файлов размером 1 МБ, что соответствует количеству гигабайт. Допустим, у вас есть 5000 файлов, то есть 5 ГБ данных. Допустим, архивирование на Ultra снижает до 2 ГБ. Если вы попробуете другую программу и алгоритм, это на 5% лучше (я думаю, это высокая оценка), это сэкономит вам только 100 ГБ. Не так много в грандиозной схеме.

Что касается устойчивости от коррупции, то такого нет. Вполне возможно, что одна программа сжатия может справиться с повреждением, таким как неудачная проверка CRC, лучше, чем другая. В лучшем случае это может означать, что только некоторые из ваших данных будут потеряны, а не все. Однако, опять же, нет никакого способа узнать. Проще говоря, нет никакой замены для резервных копий важных данных.

Я не говорил, что хочу лучшего сжатия в целом. Просто лучше, чем текущее состояние алгоритма сжатия по модулю. Поэтому я ожидаю, что применение одного и того же сжатия gzip к одному tar-файлу даст лучшую степень сжатия, чем сжатие нескольких файлов по отдельности. Вторым моментом была избыточность данных. Предложение @davidgo должно сработать (пар2). Еще одна вещь, которую я сейчас рассматриваю, - это возможность иметь произвольный доступ к формату архива, то есть возможность извлекать конкретный файл, не читая все содержимое архива. nopper 6 лет назад 0

Похожие вопросы