LINUX.ORG.RU
ФорумTalks

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

 


7

6

Всегда думал, что все эти 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?



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

Ответ на: комментарий от EXL

Почему НЕ виноваты программисты RAR, которые даже не протестировали бета-версию? Это спор ни о чем. И те и другие — молодцы.

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

Да шучу, же. И вряд ли ты посоветуешь то, о чём я не знаю.

Кроме указанных в первом посте, из достойных упоминания остались:

  • всё многопоточное семейство: pigz, pbzip2, lbzip2, pixz (с этой заразой надо аккуратней, не дай б-г, никаких глобов)
  • zpaq 7 — неплох в варианте быстро запаковать виртуалку и, по-идее, для пользовательских бэкапов (я не пробовал)
  • squashfs — для хранения сырых образов SSD/HDD
  • FSArchiver — для бэкапа линуксовых fs
  • xdelta3 — если файлы почти одинаковые, то паковать бессмысленно

Ко всему вышеперечисленному обычно прикладывается sha1 (теперь буду ещё и .par2 прикладывать иногда), а на кросс-платформенность мне наплевать.

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

Also, par2, да, ты можешь заархивировать и потом пар2 его.

Не распарсил.

Добавка восстановления к архивам

Пусть об этом у Павлова голова болит.

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

Пользовался как основным с 92-го по 2001-й. Хватит с него, пожалуй.

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

а на кросс-платформенность мне наплевать.

Тогда форматируй флешку в btrfs с опцией raid5 raid1 для данных и монтируй с compress-force.
Ну или в zfs, там можно и больший уровень компрессии задать и явно чексуммы включить.

При необходимости перевести архив в фаил делай снапшот субволюма.

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

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

Исходниками нужно делиться! :D Так у меня аж 4(!) копии, включая SourceForge.net.

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

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

Теперь понятно. Полностью с тобой согласен - всё говно!

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

Нет уж, спасибо! Я не настолько настоящий сварщик, знаешь ли. Тот же ext4, в случае чего, можно и руками починить...

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

А ты побольше субволюмов делай, чтобы в каждый по отдельности поменьше писалось.

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

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

а как насчёт метрошного? Я в рюкзаке таскаю флешку с rescuecd, как-то не задумывался...

WerNA ★★★★★
()

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

Rar - сам себе контейнер.

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

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

вообще тред годный сам по себе, даже без практического применения.
но могу тебе ещё пример, кроме флешки, попавшей под x-ray: торренты
у меня десяток торрентов висит с 98.2, 99.7 процентов в rar разделенный на части уже неделю.
я готов потерять пару секунд видео внутри некоторых серий, но не могу распаковать такой архив вообще через 7zip.

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

видео
rar разделенный на части

За такое убить мало.

Xellos ★★★★★
()
Ответ на: комментарий от system-root

это ты где такой отстой находишь?

Deleted
()

1,3 МБ

bz2 «обычно» жмёт блоками по 900к. Итого, один блок испорченный, второй - маленький. Плохой твой тест.

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

Весь соурсфорж на dvd? Коллекция из 50 дисков?

Интересный ход мыслей. Речь о своих исходниках была. У меня исходники своих программ имеют 3 копии и четвёртая на SourceForge.net. :)

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

Да ты маньяк отбитый.

Простой пример: архивы виртуальных машин. Компрессия в 1,5 раза. 7z даёт большую компрессию и уже больше поместится на BD-болванку.

xwicked ★★☆
()
Ответ на: комментарий от system-root

в rar разделенный на части
пару секунд видео

цп? ой только не спрашивай откуда я это знаю, вообще я первый спросил!

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

у меня десяток торрентов висит с 98.2, 99.7 процентов в rar разделенный на части уже неделю.я готов потерять пару секунд видео внутри некоторых сери

You doing it wrong.

А вообще аргументации за rar смешные как всегда. То избыточность, то сжатие wav, теперь уже фильмы жмут. Что показывает умственные способности людей, которые считают winrar и total commander бесплатным ПО.

steemandlinux ★★★★★
()
Последнее исправление: steemandlinux (всего исправлений: 3)
Ответ на: комментарий от system-root

я готов потерять пару секунд видео внутри некоторых серий,

Видео упаковано? О_о
А зачем?

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

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

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

и для неё есть отдельные утилиты.

Если заранее соломки не постелить...

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

Ты действительно не осознаёшь что твои проблемы во-первых, не имеют отношения к компрессорам, во-вторых, никого кроме тебя не волнуют, и в-третьих, качественно решаются специально предназначенными для это средствами?

Если заранее соломки не постелить...

А куда тебе ещё соломки напихать? Завтра тебе понадобится хранить непожатые файлы, и что, будешь ныть о нехватке избыточности в .txt?

PS. А вообще есть штука которая решает все твои проблемы сразу, называется ZFS. Она из коробки умеет хранить на нескольких носителях, проверку целостности чексуммами, компрессию, хранить в нескольких экземплярах (сверх избыточности рейда), и всё это в онлайн режиме и абсолютно прозрачно для пользователя.

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

Это вы с torvn77, похоже не осознаёте что крах ФС с настолько сложной структурой — это намного более серьёзная проблема чем пара битых архивов. И предлагаете сложить все яйца в одну штанину. В случае убитого fat|ntfs|ext{2,3,4} я могу, с определенной долей вероятности, найти все куски нужного файла и восстановить его. А вот в случае этих ваших модных ФС с блекджеком и шлюхами c компрессией, дедупликацией и шифрованием... Сами-то можете оценить сложность подобной задачи?

ShizuShidou
() автор топика

Я тут почитал краткую доку по формату FSArchiver. Судя по всему, это именно то, что я хотел: эдакий аналог gz.tar. Минусы, правда, тоже есть:

  • мелкие файлы объединяются в блоки по 256КБ, соответственно, при ошибке в таком блоке, будет потеряно более одного файла
  • требует повышенных привилегий (впрочем, можно спокойно запускать через fakeroot)
ShizuShidou
() автор топика
Ответ на: комментарий от slovazap

Ты действительно не осознаёшь что твои проблемы во-первых, не имеют отношения к компрессорам

Да ну?

во-вторых, никого кроме тебя не волнуют

Бекапы для лохов!

и в-третьих, качественно решаются специально предназначенными для это средствами?

Которые стоят на порядок больше денег - линуксвей.

А куда тебе ещё соломки напихать? Завтра тебе понадобится хранить непожатые файлы, и что, будешь ныть о нехватке избыточности в .txt?

Это ты ноешь про некий линуксвей, который ценнее людей: люди ужмитесь, для линуксвея место освободите. Этот txt весит меньше чем пожатые форматы с говноформатированием.

PS. А вообще есть штука которая решает все твои проблемы сразу, называется ZFS. Она из коробки умеет хранить на нескольких носителях, проверку целостности чексуммами, компрессию, хранить в нескольких экземплярах (сверх избыточности рейда), и всё это в онлайн режиме и абсолютно прозрачно для пользователя.

Как навернётся, так всё сразу.

Napilnik ★★★★★
()

lzip

Я как сторонник этого формата, попробую его защитить и реабилитировать.

Я проверил работу на своих данных, 70KB (сжатый tar.lz) и 4.8MB (оригинальный tar)

Согласно http://www.nongnu.org/lzip/manual/lziprecover_manual.html надо исплозовать -D совместно с -i

$ lziprecover -D0 -i -o a-part1.tar ../a.tar.lz

 Decoder error at pos 40285

затем я указыавю значение -D после битого места

$ lziprecover -D40305 -i -o a-part2.tar ../a.tar.lz

и получаю воторой кусок tar. Можно сказать, что распаковано почти всё, за исключением некоторых битых данных. Но придется поработать руками, из коробки не автоматизировано (я не нашел)

Т.е. инструменты для адекватного восстановления для lzip имеются и работают. Но как-то не слишком удобно!

Ознакомившись в свое время с http://www.nongnu.org/lzip/xz_inadequate.html я считаю что lzip очень перспективный формат, и его стоит использовать, а инструменты надо доработать.

Что касается информации о восстановлении, lzip сам по себе позволяет восстанавливать всего 1 байт на блок, штатно. Этого достаточно для обычного использования. И придется костылить par2 если требуется взрослая информация для восстановления.

Еще lzip позволяет «merge» - если у нас есть две( и больше) по-разному поврежденные копии - то следует использовать http://www.nongnu.org/lzip/manual/lziprecover_manual.html#Merging-files

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от ShizuShidou

я могу, с определенной долей вероятности, найти все куски нужного файла

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

А что касается вероятности довести ФС до необходимости выковыривать из неё данные, сам подумай, более это вероятно в версионной ФС не переписывающей данные, со встроенной избыточностью, чексуммами и self-healing или в fat. И в ZFS, кстати, есть замечательная штатная утилита zdb.

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

Бекапы для лохов!

А я где-то отменил бэкапы?

Которые стоят на порядок больше денег - линуксвей.

Што? У тебя из системы украли свободные реализации рейдов, софт для бэкапов и кодирования с избыточностью и просят бабки?

Это ты ноешь про некий линуксвей, который ценнее людей: люди ужмитесь, для линуксвея место освободите.

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

Как навернётся, так всё сразу.

Это у тебя, вместе с диском или бэдом в метаданных. А ZFS переживёт и смерть одного диска и бэды.

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

Мне не понятно почему ты не хочешь признавать очевидных вещей:

а) с повышением сложности системы, закономерно повышается вероятность отказа;

б) широко используемые ФС являются более отлажеными (очевидно же, что конфигураций Linux+ZFS даже не один процент от общего числа linux-установок).

Ты понимаешь, что ZFS, как правило, всерьёз используется в тепличных условиях? Резервное питание, специальное оборудование (типа тех же серверных ssd с супер-конденсаторами), аппаратные watchdog'и, память с ECC-четностью, вот это всё... И не забудь еще про регулярные бэкапы на ленту по расписанию.

Никто и никогда не планировал использовать эту ФС на локалхосте Васяна, с ширпотребными WD RED и упсом с полудохлой батареей. Тешить своё ЧСВ тем, что я, мол, использую такую же ФС как и в серьёзном продакшене, можно исключительно до первого сбоя. А потом ты резко перестанешь любить эту ФС.

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

А я где-то отменил бэкапы?

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

Што? У тебя из системы украли свободные реализации рейдов, софт для бэкапов и кодирования с избыточностью и просят бабки?

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

Это у тебя, вместе с диском или бэдом в метаданных. А ZFS переживёт и смерть одного диска и бэды.

На одном диске можно бэкапировать не всё. И существует опасность порчи изменяемых данных другими способами. Однажды может оказаться, что ты заменил нормальные данные испорченными, ZFS скопипастит плохие данные поверх хороших и ты про это узнаешь слишком поздно, если не будешь проверять лично, или не будешь использовать под хранение данных очень много места.

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

Спасибо за разъяснение. Опробовал указанную методику: второй кусок, как оказалось, содержит по большей части те же файлы, что и первый. Итого: восстановлено 43.1% исходных данных. Так себе результат.

если у нас есть две( и больше) по-разному поврежденные копии

С трудом представляю себе столь глобальный дизастер. Да и в этом случае можно банальным dd обойтись.

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

Опробовал указанную методику: второй кусок, как оказалось, содержит по большей части те же файлы, что и первый

Хм, интересно, спасибо за инфу. Как нибудь соберусь обстоятельно проверить, на разных размерах файлов

Deleted
()
17 января 2018 г.
Ответ на: комментарий от ShizuShidou

7z и xz - должны быть примерно одинаковы. В обоих используется один алгоритм.

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

Несколько раз возил с собой CompactFlash и пропускал через ретген в аэропорту, ни флешки, ни файлы не попортились.

grem ★★★★★
()
Ответ на: комментарий от system-root

У 7zip появилась своя реализация unrar? Очень сомневаюсь. Он использует ванильную unrar библиотеку/утилиту. Почему она не может распаковать разбитый на куски архив не знаю, наверное ограничение бесплатного разархиватора.

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