SquashFS против архиваторов в Linux: плюсы и минусы

Задача: сравнить степень и скорость сжатия файловой системы SquashFS и распространённых архиваторов под Linux, а так же ещё раз упомянуть, где и когда можно (и нужно) использовать сжатые файловые системы.

Преамбула
Здесь я писал о том, что такое SquashFS и зачем оно надо. Иногда удобно использовать такие файловые системы вместо архиваторов, и не столько из-за степени сжатия (которая у архиваторов выше), а за большую скорость доступа и возможность работы с данными без разархивации. Например, вы скачали какой-нибудь сайт целиком wget-ом. Это куча html-ек и графических файлов, но они занимают много места, менять вы их не собираетесь, а хотите только просматривать время от времени. Легко и просто: сжимаем каталог с сайтом:

mksquashfs www.vasya.ru www.vasya.ru.sq
Расширение можно указать любое, которое понравится. Потом, когда захотите посмотреть на этот сайт и побродить по нему, просто прикручиваете на петлевое устройство файл - и вперёд. Распаковка "на лету" происходит незаметно - для современных процессоров это семечки. Посмотрели, открутили - и забыли. Удобно, просто и легко.
Вариант: есть много ISOшников, которые не так часто используются. Сжимаем их тоже в SquashFS, а когда надо, например, погонять их в эмуляторе, просто прикручиваем на петлю и указываем эмулятору на iso-файл, который виден в точке монтирования. И никакой утомительной разархивации.

Тестирование SquashFS в Linux
Проводилось тестирование на скорость и степень сжатия по шести видам файлов (которые у меня чаще всего попадаются). Красным выделялся архиватор с наибольшей степенью сжатия. Участие в тестировании приняли архиваторы, наличествующие в Debian GNU/Linux (и кое-какие, в нём по религиозным лицензионным соображениям отсутствующие, но установленные), как то: bzip2, p7zip (многопоточный), gzip, arj, rar (проприетарный, полнофункциональная trial-версия, после тестирования удалён), mksquashfs v3.0, mksquashfs v3.1 (многопоточный).
Тестирование проводилось на машине следующей конфигурации: P4 630 (3GHz, 2Mb cache, HyperThreading), Intel i915 PGNL Motherboard, 2Gb DDRAM, HDD 36Gb WD Raptor + 250Gb WD 250JB, ATi X200 VideoCard. OS Debian GNU/Linux v3.1 "Sarge" с оптимизированным ядром Linux версии 2.6.15.7 \#1 SMP PREEMPT i686. На момент тестирования время непрерывной работы машины составляло 95 дней.
При архивировании утилитам передавались параметры:
  • mksquashfs
  • rar a -m5
  • bzip2 --best -z
  • p7zip
  • gzip --best
  • arj a -m4
Запуск проводился скриптом на bash, в консоли, графический сервер был выключен. Никаких ресурсоёмких процессов на фоне запущено не было.

1. Много больших несжатых полутоновых видеофайлов
Тест несколько искусственный, так как эти "фильмы" сделаны из простых полутоновых BMP-файлов. В свободном виде они занимают просто чудовищный объём, а нужны для оптических экспериментов (эксперимент MotionScreen, кому надо, тот знает). В чистом виде занимают 1.5Гб, а вот что с ними стало после архивирования:


Архиватор Время Компрессия



squashfs 3.0 61 175,07



squashfs 3.1 83 175,07



rar 114 508,66



bzip2 140 2900,95



p7zip 307 5017,85



gzip 101 191,5



arj 31 53,24




Архиватор p7zip показал самую высокую степень сжатия, однако, несмотря на то, что он работал в многопоточном режиме (ядро с активированной поддержкой HyperThreading), сжимал дольше всех. Хвалёный и тем более несвободный rar порядком проигрывает свободному bzip2 при сравнимой скорости сжатия. Сжатие squashfs несколько в стороне, хотя и довольно быстрое. Занятно, что многопоточное исполнение для утилиты сжатия squashfs даже снизило её быстродействие (тест запускался трижды, значения те же).

2. Цветные RAW-файлы
Фотографии в формате "прямо с камеры" объёмом в 90 Мб были сжаты теми же архиваторами - посмотрим, что из этого вышло:


Архиватор
Время
Компрессия



squashfs 3.0
14
1,06



squashfs 3.1
13
1,06



rar
61
1,1



bzip2
37
1,14



p7zip
72
1,12



gzip
12
1,06



arj
1
1



Здесь с незначительным перевесом по степени сжатия, но почти вдвое по скорости обскакав конкурентов, лидирует bzip2. В этой программе squashfs выглядит уже не так бледно, находясь так же на уровне gzip.

3. Офисные документы
Здесь я вытащил find-ом всё, что имело расширение doc, odt, xls и ods. Получилось немного, на 30Мб, но тем не менее:

Архиватор
Время Компрессия








squashfs 3.0
4 1,07








squashfs 3.1
4 1,07








rar
20 1,07








bzip2
15 1,07








p7zip
19 1,13








gzip
4 1,07








arj
0 1,05





















Здесь свободный p7zip снова делает проприетарный rar, причём не только по степени сжатия, но и по скорости (а вот тут, быть может, HyperThreading и сыграл, а rar его не держит - проприетарщина, а ещё денег просит). SquashFS очень шустрый, и компрессия неплохая, очень похожая по результатам на gzip (в этом тесте размер архива gzip и sq просто совпали байт-в-байт, что наводит на мысль о том, что в squashFS сжатие если не zip, то во всяком случае очень похожее).

4. Полутоновые графические файлы TIF
Много экспериментальных результатов приходится хранить в tif-файлах, так что интерес к тому, кто круче их жмёт (не обязательно быстро) неслучаен. Сжато файлов на 82Мб, вот результаты:


Архиватор
Время
Компрессия





squashfs 3.0
20
1,81





squashfs 3.1
18
1,81





rar
48
1,97





bzip2
25
2,4





p7zip
132
2,23





gzip
19
1,86





arj
6
1,51





Первое место вновь за свободной программой: bzip2 очень лихо жмёт tif-файлы, а кроме того очень быстро. Чуть меньше степень сжатия у p7zip. SquashFS при той же компрессии в многопоточном режиме жмёт немного быстрее, но тоже на уровне gzip - как по скорости, так и по сжатию (здесь разница между ними была ровно 200 байт).

5. Скачанный сайт
Мой любимый тест - сайтов я качаю много, так что очень и очень актуально. Здесь пожат портал www.teatips.ru, где находится всё, что можно и нужно узнать о чае. Всего 460Мб, немного терпения и результат:


Архиватор
Время
Компрессия




squashfs 3.0
38
3,49




squashfs 3.1
30
3,49




rar
167
3,03




bzip2
257
4,41




p7zip
188
4,59




gzip
22
4,26




arj
19
2,68





Картина маслом: rar сливает squashfs по всем статьям! Очень радостно видеть первые три места за свободными программами. Впрочем, результат по времени p7zip можно оспорить: здесь скорее всего заиграл снова гипертреадинг, что видно и по squashFS (та же степень сжатия, но быстрее на 21%, что неплохо коррелирует с заверениями Интел про прибавку до 30% производительности на некоторых задачах). Это подтверждается и визуально: многопоточные архиваторы на глаз быстрее при включённом гипертреадинге при пожатии множества мелких файлов.

6. ISO-образ
Пожат первый iso-образ диска с Дебианом Сарж, 650Мб:


Архиватор
Время
Компрессия



squashfs 3.0
74
1,03



squashfs 3.1
75
1,03



rar
718
1,05



bzip2
297
1,03



p7zip
411
1,05



gzip
65
1,03



arj
16
1



Rar таки обошёл p7zip, но на сколько? Не поверите, но аж на 0,0039% - я уверен, что это стоит тех денег, которые Рошаль с вас потребует за консольную версию своего чудотворного архиватора.
В общем, сжимать iso-шники здорово простым gzip, быстро и примерно так же по компрессии, как и все другие. А ещё лучше isoшники пожимать в squashFS, ибо их можно пропаливать на болванки и гонять в эмуляторах, даже не распаковывая.

Итоги
Ну вот, пока тесты закончились и заметка написана, и в комнате теплее стало. :-)
Здесь хотелось бы отметить важный момент: открытые архиваторы почти всегда уделывают проприетарные, либо по скорости, либо по компрессии. Так что для того, чтобы эффективно сжимать свои данные, вовсе не обязательно платить за это деньги, так как p7zip и bzip2 есть под распространённые платформы и распространяются под GPL-совместимыми лицензиями.
SquashFS по компрессии и скорости близка к gzip, что вовсе не так плохо: в ряде случаев её применение более чем оправдано, особенно если вы часто имеете дело со скачанными сайтами или большим количеством редко изменяемых офисных документов.

13 комментариев: |высказаться!| RSS-лента дискуссии.|
StraNNicK комментирует...

Считать деньги в чужих карманах - нехорошо... :)

Хвалить p7zip и bzip2 - можно и нужно, но пинать при этом rar... Фи...

virens комментирует...

2 StraNNicK
Статья вообще-то о сравнении архиваторов со squashFS, а не между собой. Пинание при этом рар - побочный эффект :-)

Считать деньги в чужих карманах - нехорошо... :)
Рошаль - жлоб, и брать деньги за консольную версию - хамство. Моё ИМХО. Имею право :-)

Хвалить p7zip и bzip2 - можно и нужно, но пинать при этом rar...
А почему нет? Почему идёт реклама проприетарного архиватора, когда есть лучшие бесплатные альтернативы?

aim комментирует...

спасибо за статью!
буду всем пользователям windows советовать ставить 7zip (собственно и раньше так делал вот уже на протяжении 2х лет примерно, с тех самых пор как к 7zip оболочку приделали

aim комментирует...

да. и не могу не присоединиться к страннику -- зря ты Рошаля так полощешь... хороший дядька.

kmmbvnr комментирует...

Для полноты картины надо указывать ключики командной строки.. а то щас как 7zip без сжатия, и rar с solid архивацией напущу на кучу html'ек посмотрим кто победит.

virens комментирует...

2 aim
не могу не присоединиться к страннику -- зря ты Рошаля так полощешь... хороший дядька.
Да... согласен... перебор. Надо будет поправить. Спасибо.

2 kmmbvnr
Для полноты картины надо указывать ключики командной строки..
О, это точно, это я пропустил. Будет исправлено.

Большое спасибо товарищам комментаторам за конструктивную критику и тёплые слова.

Ramaloke комментирует...

несовсем в тему но если я хочу запаролить скажем bzip2 как я это делаю?

и еще одно, можно ли bzip2 сделать что нибудь вроде recovery record

virens комментирует...

2 Ramaloke
несовсем в тему но если я хочу запаролить скажем bzip2 как я это делаю?
Не в курсе, в мане не нашёл.

и еще одно, можно ли bzip2 сделать что нибудь вроде recovery record
А вот это в мануале написано: bzip2recover - recovers data from damaged bzip2 files

loki8 комментирует...

А еще есть патч к squashFS - www.squashfs-lzma.org, который добавляет к родному gzip сжатию squashFS возможность lzma-компрессии (она используется в p7zip). Там при упаковке блоки жмутся обеими методами и выбирается наименьший.

virens комментирует...

2 loki8
А еще есть патч к squashFS
Большое спасибо - не знал, обязательно посмотрю и добавлю в пост.

Вий комментирует...

а для "запаролить" есть pgp

LLL комментирует...

несовсем в тему но если я хочу запаролить скажем bzip2 как я это делаю?
Не в курсе, в мане не нашёл.
И незачем искать, ибо для *NIX'ов характерна модульность, т.е. выполнение каждой программой достаточно узкой задачи при поддержке методов интеграции между программами. Т.е. шифровать надо другими утилитами.

и еще одно, можно ли bzip2 сделать что нибудь вроде recovery record
А вот это в мануале написано: bzip2recover - recovers data from damaged bzip2 files
Цитата из мануала не о том, о чем спрашивалось. Записи, а особенно тома для восстановления -- это, на мой взгляд, самое существенное, в чем p7zip отстает от rar'а.

Анонимный комментирует...

Статья интересная, но.
1) В squashfs используется LZMA. То, что размер байт-в-байт совпал с зипом, скорее всего, связано с максимальной степенью сжатия
2) Основная фишка squashfs - не скорость компрессии, а высокая скорость блочной распаковки при произвольном доступе. Поэтому её так любят лайвсидишники.
3) rar - отстой.
4) LZMA также используется в xz, который используется в пакетных системах (например, Arch Linux). Но если сравнить squashfs с xz, то по скорости компрессии выиграет xz, а по скорости распаковки - сквош. Догадываетесь, почему?

Отправить комментарий

Подписаться на RSS-ленту комментариев к этому посту.