2

У меня есть около 100 ТБ сжатых данных GZIP на облачных томах. По пути запуска дедупликации на уровне блоков (duperemove для btrfs) я обнаружил, что он был сжат без -n , что приводит к разнице в уровне блоков сжатого вывода для других идентичных файлов.

Помимо повторного сжатия всего этого с помощью gzip -n , есть ли другой способ получить сотни миллионов файлов gziped, чтобы "потерять" этот заголовок? и если мне уже придется заново сжимать их все, следует ли мне заняться другими оптимизациями, такими как --rsyncable чтобы максимизировать шансы дедупликации?

(Данные имеют очень высокие шансы на содержание большого количества дубликатов, мы говорим о ежедневных полных дампах больших таблиц базы данных)

2 ответа2

0

Отвечая на первую половину моего вопроса о том, как: вырезать штамп даты / имени файла gzip. нет, я еще не нашел готовый кусок кода, но я нашел время для установки vbindiff, визуального двоичного инструмента сравнения, и обнаружил, что заголовок не был сжат, и, следовательно, фактический сжатый поток идентичен gzip и gzip -n , и все, что осталось, это манипулировать несколькими байтами в самом начале сжатых файлов, чтобы получить унифицированную версию. крошечная C-программа решит мою проблему, если кто-то не знает sed для двоичных файлов :-)

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

0

Вы можете использовать zcat для извлечения файлов, а затем вычислить контрольную сумму для каждого файла:

for x in *.gz
do
    zcat $x | sha256sum > $x.sum
done

затем проверьте эти * .gz.sum файлы на наличие ошибок. Каждый раз, когда вы удаляете дубликаты с именем "thing.gz.sum ", также удаляйте соответствующие" some.gz "

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .