Может ли сжатие gzip привести к повреждению данных?

Я пытаюсь найти решение для сжатия нескольких петабайт данных, которые у меня есть, которые будут храниться в AWS S3. Я думал об использовании сжатия gzip и задавался вопросом, может ли сжатие повредить данные. Я попытался выполнить поиск, но не смог найти конкретных случаев, когда сжатие gzip фактически искажало данные, так что их больше нельзя было восстановить.

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


person user401445    schedule 26.10.2017    source источник
comment
Нет, сжатие gzip не приводит к повреждению данных. Это сжатие без потерь.   -  person Jesper    schedule 26.10.2017
comment
Вы проверили это решение?   -  person    schedule 26.10.2017
comment
Я подозреваю, что любая файловая система, где работает gzip, может обрабатывать петабайты.   -  person A.Rashad    schedule 26.10.2017
comment
@Mysticate Я проверил это решение, но оно означает запись данных на диск и выполнение другой задачи с интенсивным использованием ЦП. Я хотел бы избежать этого, если это возможно   -  person user401445    schedule 26.10.2017


Ответы (4)


Я бы не рекомендовал использовать gzip сразу для большого блока данных за один раз. Много раз я сжимал целые диски, используя что-то похожее на dd if=/dev/sda conv=sync,noerror | gzip > /media/backup/sda.gz, и данные были непригодны для использования, когда я пытался их восстановить. Я вернулся к тому, чтобы не использовать сжатие

person user2747753    schedule 07.10.2020
comment
Я только что столкнулся с той же проблемой: я передал вывод dd в gzip и после повторной распаковки полученного архива foo.gz с помощью gzip получил gzip foo.gz: unexpected end of file. Так как алгоритм сжатия работает безупречно на веб-серверах миллионы раз в день, в то время как есть бесчисленные результаты Google для gzip неожиданного конца файла, я подозреваю, что где-то должна быть ошибка в инструменте командной строки gzip. … - person balu; 08.04.2021
comment
…В то же время библиотека zlib (используемая на большинстве веб-серверов; по существу тот же алгоритм, что и в gzip, но не совсем), вероятно, не имеет этой ошибки . - person balu; 08.04.2021

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

person Aaron Bentley    schedule 26.10.2017
comment
Я выполняю сжатие в памяти и использую MD5 для несжатых данных, поэтому меня не беспокоит переворот битов, вызванный плохим диском. В настоящее время меня больше всего беспокоят любые проблемы, вызванные сжатием. - person user401445; 26.10.2017
comment
user401445, gzip (deflate) работает без потерь, но может иметь проблемы с низкой скоростью сжатия. Проверьте некоторые более современные методы сжатия и параллельные реализации (как сжатия, так и распаковки), такие как zstd/pzstd. - person osgx; 26.10.2017

Сжатие GZIP, как и любой другой широко используемый алгоритм сжатия данных, выполняется без потерь. Это означает, что когда вы распаковываете сжатые данные, вы получаете точную копию оригинала (а не что-то вроде этого, например, JPEG для изображений или MP3 для аудио).

Пока вы используете известную программу (например, gzip) для сжатия, работаете на надежном оборудовании и на вашем компьютере нет вредоносного ПО, шансы на сжатие, приводящее к повреждению данных, практически равны нулю.

person cHao    schedule 26.10.2017

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

Что-то вроде gzip -dc < petabytes.gz | cmp - petabytes в Unix было бы способом сделать это без повторного сохранения исходных данных.

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

person Mark Adler    schedule 27.10.2017