8/02/2006

SquashFS, или Зачем в Linux архиваторы?

Как скажет любая поисковая система, SquashFS - это сжатая файловая система, разработанная для удобного и компактного хранения файлов с быстрым доступом к ним из Linux. Разработанная прежде всего для создателей LiveCD (Knoppix-based LiveCD), может пригодиться и простому линуксоиду благодаря высокой степени сжатия, скорости доступа и удобству работы. В Linux работать со SquashFS очень просто и легко.


Архиватор vs SquashFS

Всем когда-нибудь требовалось архивировать свои файлы, и для этого уже давно разработаны утилиты типа gzip, bzip2, rar, arj... Одни из них быстрее, другие обладают высокой степенью сжатия, некоторые архиваторы избирательны (заточены на сжатие текста или графики), другие претендуют на универсальность. Так зачем нужены сжатые файловые системы?


Архиваторы в Linux

Так или иначе, архиваторы создают из предъявленных ему данных сжатый файл. Прекрасно, данные заархивированы и положены на хранение. Теперь нам захотелось просмотреть архив. Есть много файловых менеджеров, которые умеют входить внутрь архивов и дают возможность работать со сжатыми файлами, как с обычными. Однако чтобы перечитать архив, требуется время (попробуйте зайти внутрь архива ядра linux.*.*.tar.gz - это будет не быстро). А теперь нам надо из архива вытащить один или несколько файлов - и вот архиватору приходится распаковывать весь архив и лишь после этого получаем нужный файл.

Теперь нужно добавить в архив файлы. Вот тут без перепаковки всего архива не обойтись. Долго, муторно, неудобно. К тому же некоторые архиваторы, особенно rar, "забывают" права доступа к файлам, что в Linux совсем ни в какие рамки не лезет. Или нам хочется создать свой загрузочный диск с подборкой нужного софта. Да, можно скачать чужие LiveCD, а можно создать свой собственный. Если приблизительно подсчитать, сколько софта на том же Knoppix, можно ужаснуться: ну и как такой объём впихнул Клаус Кноппер в маленький диск?


SquashFS

Очень просто. Специальной утилитой mksquashfs создаётся файл со сжатой файловой системой SquashFS. Далее, при необходимости, этот файл прикручивается (монтируется) на петлевое устройство (loop) и в точке монтирования видим наши файлы. Быстро и удобно, что особенно ценно при разборе старых архивов.

Степень сжатия, как правило, выше, чем у tar.gz при ощутимо более высокой скорости сжатия и несравненном удобстве пользования. Это уже оценили создатели LiveCD и ушлые пользователи. Если требуется извлечь файл - без проблем, просто копируем его куда нам нужно. Скорость чуть ниже, чем при обычном копировании, больше нагрузка на процессор (всё-таки декомпрессия архива), но по сравнению с архиваторами - небо и земля. Нужно добавить файлы? Не вопрос: указываем mksquashfs целью старый архив и происходит дописывание данных в конец, безо всякой перепаковки. Просто и удобно. Единственное, чего нельзя - это переписать файлы "на лету": файловая система SquashFS только для чтения. Приходится дописывать в архив файлы.

Достоинства и недостатки
Конечно, при всех достоинствах SquashFS обладает и недостатками. Архивы нужно каждый раз примонтировать и отмонтировать, обновление - дописыванием в конец или перепаковкой; кроме того, для использования нужен патч на ядро, который есть не для всех версий ядер. Компрессия больших файлов (несколько гигабайт) отнимает большое количество памяти. Зато для маленьких файлов это ценная находка: выкачанный из интернета сайт легко и быстро сжимается в один архив, а потом его можно легко читать броузером, указав точку монтирования.


Установка SquashFS в Linux
Если вы заинтересовались возможностями SquashFS и хотите его установить, то вам потребуются исходники ядра, установленный gcc, утилита patch и скачанный с сайта http://squashfs.sourceforge.net/ архив с патчем на ядро и исходниками mksquashfs. Поддерживаются последние ядра 2.4.х и ветка 2.6 начиная с 2.6.8 Можно включить поддержку SquashFS в ядро монолитно или модулем - накладываем патч на ядро:
#patch -p1 -i squashfs-patch
и вызываем make menuconfig. Теперь в разделе "File systems", "Miscellaneous file systems", должна появиться строчка "Squashed filesystem", которую можно поставить как модуль или вкомпилировать в ядро. Надеюсь, как компилировать ядро, вы знаете, а если что-то забылось - освежить знания можно тут.
Так же следует включить поддержку "Loopback device support" в секции "Device drivers"section, "Block devices" подсекции. Для более подробной справки идём сюда. Собрав ядро и перезагрузившись, компилируем mksquashfs:
# cd /usr/src/squashfs/squashfs-tools
# make
# cp mksquashfs /usr/sbin
Для этого потребуются пакеты zlib*, которые потребуется установить. Скомпилированные однажды утилиты mksquashfs и прочие можно переносить с компьютера на компьютер - и они будут работать.
Чтобы создать архив из файлов в директории /temp потребуется ввести:
mksquashfs temp temp.sq

Расширение добавляется для удобства - оно может быть любым или вообще отсутствовать. Лишь бы вам было понятно, что это архив. Увидеть и работать с файлами можно, прикрутив на петлевое устройство архив штатными средствами любой *никс системы:
mount -t squashfs temp.sq /mnt/squash -o loop
Далее работаем с файлами, как обычно. После использования не забываем отмонтировать.

Что ещё почитать по Squashfs
http://www.linux.org/docs/ldp/howto/SquashFS-HOWTO/gettingready.html
http://tldp.org/HOWTO/SquashFS-HOWTO/mksqoverview.html
http://ldp.linux.by/HOWTO/SquashFS-HOWTO/whatis.html

8 комментариев:

  1. Хм. Понятия не имел что такое вообще бывает. Интересная статья.

    ОтветитьУдалить
  2. А и я не знал, пока не попробовал :-) Кстати, в некоторых дистрибутивах squashFS скомпилирована модулем. В пятой федоре есть, по крайней мере.

    ОтветитьУдалить
  3. Хех... В убунте 7.04 вообще по дефолту есть, только сделал apt-get install squashfs-tools и все. Проверил на игрушке, которая весит 1,8 гб - FlatOut2, сжалось в 1,5 гига. Причем меньше минуты сжималось. Раром и бзипом оооочень долго сжималось, тоже в 1,5 гига. Прикольно... Повилась идейка добавить эту игрушку в слакс.

    ОтветитьУдалить
  4. Хм... если качаешь сайт и периодически его обновляешь (паук проверяет наличие новых страниц) - подойдет ли в данном случае скваш? Т.е. будет ли автоматически дописываться новая инфа? Или для записи надо еще какие-либо движения?
    Кстати, скваш может "переформатировать" свой архив? В смысле, после дописывания файлов свести все таблицы к одной [в начале]?

    ОтветитьУдалить
  5. сенкс. щас мудохаюсь с ubuntu live usb и толковые мануалы по squashfs очень кстати.

    ОтветитьУдалить
  6. я тоже мудохаюсь. Причем хочется сделать запуск просто от начального образа, или запуск в persistent, или слив из persistent в основной образ, вобщем цирк с блекждеком и шлюхами

    ОтветитьУдалить
  7. есть такой архиватор как XAR, поддерживает uid/gid

    ОтветитьУдалить
  8. Полезная статья, только обновить бы некоторые данные. Последняя версия ядра не 2.6, а уже 3.с чем-то.

    ОтветитьУдалить