LINUX.ORG.RU
ФорумTalks

Все unix-компрессоры — говно?

 


6

4

Всегда думал, что все эти gzip, bzip2, xz и т.п. обладают достаточной восстановимостью. Т.е. если в стриме испортится несколько байт, то декомпрессия пойдет дальше, начиная со следующего блока. Оказалось — шиш!

Провёл небольшую лабораторную работу.

Исходные данные: tar-архив с исходниками 1,3 МБ (1,300,480).

Методика: пакуем файл со стандартными параметрами, меняем 8 байт по смещению (last_offset / 2) на de-ad-be-ef-ff-ff-ff-ff, пытаемся распаковать и/или восстановить архив.

Результаты:

  • 7z — распаковано 47.9%, всё что дальше — не восстанавливается
  • bzip2 — распаковано 0%, bzip2recover поделил файл на два якобы годных блока, но первый и больший из них распаковать не смог
  • gzip — распаковано 45.8%, gzrecover дает тот же эффект
  • lz4 — распаковано 81.76% (на самом деле 100%, но на выходе получился битый tar, который после cpio -ivd -H tar < my.recovered.tar дал указанное значение). Некоторые файлы, правда, с частичным мусором внутри.
  • lzip — распаковано 43.1% (спасибо PtiCa, за указания по правильному использованию lziprecovery)
  • lzma — распаковано 0%, чем оно восстанавливается — хз
  • lzop — распаковано 40.3%
  • rar — распаковано 0%, после восстановления (rar r) файл всё равно поврежден
  • rar -rr — распаковано 100% (задействовалась recovery record), после восстановления (rar r) у распакованного файла такая же sha1 как и у неиспорченного
  • xz — распаковано 47.8%
  • zip — распаковано 45.4%, zip -F или -FF дают тот же результат.

    ---

    Ну и чо теперь делать? Паковать всё в .tar.rar?

Компрессор компрессирует, а не занимается помехоустойчивым кодированием. Всё по юниксвею.

Harald ★★★★★ ()

Ну и чо теперь делать? Паковать всё в .tar.rar?

Если нужна устойчивость к повреждениям, есть par2.

i-rinat ★★★★★ ()
Ответ на: комментарий от Harald

никто не запрещает прогнать результат работы компрессора через какую-нибудь утилиту, добавляющую избыточную информацию для восстановления

Harald ★★★★★ ()

И тут ты такой достаёшь неюниксный компрессор и показываешь ошеломляющие результаты?

Deleted ()
Ответ на: комментарий от ShizuShidou

Тогда он не будет уметь в восстановление

Harald ★★★★★ ()
Ответ на: комментарий от ozz_is_here

А какой круче всех сжимает?

От данных сильно зависит. Но, в общем, примерно так («больше» в смысле «лучше»):

7z > xz => rar > bzip2 > gz => lzo

ShizuShidou ()

Всегда думал, что все эти gzip, bzip2, xz и т.п. обладают достаточной восстановимостью.

Думал? Нет. Ты предполагал. Если бы ты подумал, то понял бы что восстановимость невозможна без оверхеда, и нужна крайне редко, так что в компрессорах ей делать нечего, и для неё есть отдельные утилиты.

slovazap ★★★★★ ()

Всегда думал, что все эти gzip, bzip2, xz и т.п. обладают достаточной восстановимостью.

Всегда думал

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

вот тут упоминается один такой инструмент https://en.wikipedia.org/wiki/List_of_archive_formats

в таблице он указан как ".afa"

A format that compresses and doubly encrypt the data (AES256 and CAS256) avoiding brute force attacks, also hide files in an AFA file. It has two ways to safeguard data integrity and subsequent repair of the file if has an error (repair with AstroA2P (online) or Astrotite (offline)).

Deleted ()

меняем 8 байт по смещению

Зачем? Ты свои архивы по голубиной почте передаешь?!

BceM_IIpuBeT ★★★★ ()

Бекапы никто не отменял. Ну и par, как уже подсказали.

baka-kun ★★★★★ ()

Ну и чо теперь делать? Паковать всё в .tar.rar?

Ну, если тебе нужно сжимать исходники и хранить их в месте, где кто-то случайно меняет 8 байт в середине, при этом запрещено пользоваться утилитами, отличными от компрессоров, то да. А вообще, советую запомнить одно хорошее правило, о котором забывают сказать. когда говорят, что «админы делятся на два типа» — если у тебя только одна резервная копия, то у тебя нет резервной копии.

redgremlin ★★★★★ ()

Если у тебя где-то рандомно меняются 8 байт, то восстановление битых архивов - это то, что тебя должно заботить меньше всего. Да и вообще, чтобы данные восстанавливались нужна их избыточность, а не наоборот.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)

а скажите пожалуйста, зачем вам заниматься распаковкой битых архивов? может быть, вы сотрудник NASA и пытаетесь решить проблему порчи информации в результате космической радиации или попадания частиц нитрино в накопитель информации? нет, серьёзно. почему архив должен испортится при цифровой передаче данных? вы его собрались каким-то аналоговым методом передавать земля-марс?))

ладно, просто скажите дураку зачем вам это. интересно же.

Spoofing ★★★★★ ()
Ответ на: комментарий от Spoofing

Ну представь. Ты скидываешь архив на флешку, идешь по улице, рядом с тобой проезжает машина и тебя окатывает из лужи, ты кричишь в след машине, какой сказочный у неё водитель. Приходишь на место, а флешка перестала работать. Вообще. Ты вспоминаешь, что флешку ты даже не раскрывал и не сушил, а воткнул прям так, как есть. Быстро вырываешь флешку из порта, раскрываешь, сушишь, тщательно промываешь спиртом. Вставляешь в компьютер, и о чудо - она заработала. Ты начинаешь копировать архив. 0%, 5%, 25%, 75%, 95%... ошибка. И ты ничего не можешь с этим поделать.

ozz_is_here ()
Ответ на: комментарий от ozz_is_here

Скидываешь сорцы на cdrw или флоппик. Потом пытаешься их открыть.

crutch_master ★★★★★ ()
Ответ на: комментарий от crutch_master

А на месте нету ни флоппи-дисковода, ни сидюка. С собой тоже нет.

ozz_is_here ()
Ответ на: комментарий от ozz_is_here

В общем-то животрепещущее описание.
Не всякая флешка долетает через рамки аэропортовского рентгена.
В итоге git pushup через интернет спасает.

TomBOY ★★ ()
Ответ на: комментарий от TomBOY

Не всякая флешка долетает через рамки аэропортовского рентгена.

Хренасе. У меня ноутбук через аэропортовский рентген прошел, и ничего, держался еще лет 5. :)

ozz_is_here ()
Ответ на: комментарий от Deleted

Как тут уже сказали, задача архиваторов ужать по-максимуму.

Если я потеряю всё содержимое tar.bz2 объемом, к примеру, пару десятков гиг из-за одного испорченного байта в произвольном месте файла, то в топку такие архиваторы. Я согласен потерять пару десятков мегабайт, но никак не весь архив целиком.

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

.afa

Слишком экзотично.

ShizuShidou ()
Ответ на: комментарий от ozz_is_here

Это тебе его ещё на пол не роняли при проверке.

TomBOY ★★ ()

В GNU / Linux Debian искаропки всё работает. Что за Линукс у тебя? делал архивы в 7z и zip ваще без проблем. Сейчас во фряхе искаропки из гуя работает только tar.gz, но и тут 5 мин. настройки сделают своё дело...

xwicked ★★ ()
Последнее исправление: xwicked (всего исправлений: 1)
Ответ на: комментарий от Spoofing

космической радиации или попадания частиц нитрино в накопитель информации
аналоговым методом передавать земля-марс

Я вот сейчас вспомнил FreeBSD 4, которая при попытке прочитать сбойный сектор на флоповоде уходила в kernel panic. У её разработчиков, наверное, схожий образ мыслей был.

ShizuShidou ()
Ответ на: комментарий от xwicked

Что за Линукс у тебя?

Debian 9 и Ubuntu 17.10. Бобёр, выдыхай. Линукс тут вообще никаким боком.

ShizuShidou ()
Ответ на: комментарий от ShizuShidou

потеряю всё содержимое tar.bz2 объемом, к примеру, пару десятков гиг из-за одного испорченного байта в произвольном месте файла,

лишь потому что оно solid archive.

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

необучаемый? для такого случая ФС нужна c прозрачным сжатием.

тебе срочно нужно узнать чем поток от блока отличается.

n_play ()
Ответ на: комментарий от n_play

тебе срочно нужно узнать чем поток от блока отличается.

Ну да, конечно! Буфера там никакого нет, вот прямо по одному байту берем и запаковываем. Ага.

ShizuShidou ()
Ответ на: комментарий от ShizuShidou

дядя петя, ты дураг?

для совсем трудных.

блочная структура подразумевает беспроблемый доступ к любому блоку.

а поток - хер. нужно его проматывать и то лишь в одну сторону, пока доберешься до нужных данных.

n_play ()
Ответ на: дядя петя, ты дураг? от n_play

поток - хер. нужно его проматывать и то лишь в одну сторону

Куда ты собрался проматывать fifo?

ShizuShidou ()

freearc еще умеет информацию для восстановления.

Ну и чо теперь делать? Паковать всё в .tar.rar?

паковать в то что имеет механизм восстановления за счет избыточности.

onon ★★★ ()
Ответ на: комментарий от onon

freearc

Оно ж умерло, не?

паковать в то что имеет механизм восстановления за счет избыточности

Мне не нужна избыточность, мне нужна блочность. К примеру так, как это сделано в любом стриме из серии MPEG.

ShizuShidou ()
Ответ на: комментарий от ShizuShidou

мне нужна блочность. К примеру так, как это сделано в любом стриме из серии MPEG.

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

а если про layer 3, то да, почти идеально блоковый.

n_play ()
Ответ на: комментарий от Zhbert

И? Он что, не юниксовый? По какому принципу у него вообще юниксовость?

Deleted ()

RAR всегда был отличным форматом. Особенно нравилось отсутствие проблем с кодировками при перемещении архивов между разными ОС.

Сразу видно, качественный проприетарный софт, к разработке которого подходили с умом.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от TomBOY

Не всякая флешка долетает через рамки аэропортовского рентгена

Что, серьёзно? У меня так-то часто флешки сдыхают. Думал, уровень производства сейчас такой.

UPD: Да ну, ерунда. Просто при полёте излучение гораздо большее ловится, чем от рентгена в аэропорту.

Wizard_ ★★★★★ ()
Последнее исправление: Wizard_ (всего исправлений: 1)

это було актуально в эпоху дискет. А сейчас нафига оно ?

Jopich1 ()
Ответ на: комментарий от ShizuShidou

Тебе с какой целью архив нужен?
Для хранения и перевозки на флешке или отправки через сеть?
Распаковка будет на Linux или винде?

torvn77 ★★★★★ ()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от EXL

Ты не застал переходы между ранними мажорными версиями рара.

greenman ★★★★★ ()
Ответ на: комментарий от EXL

Сразу видно, качественный проприетарный софт

Ага. Я тоже так думал, пока в 7-й (кажется) Debian не притащили бета-версию 4.2, которая при упаковке теряла половину файлов не в latin-1 кодировке.

ShizuShidou ()
Ответ на: комментарий от ShizuShidou

бета-версию 4.2

Почему виноваты программисты RAR, а не мейнтейнеры Debian'а, которые даже не протестировали новый пакет?

EXL ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.