SquashFS

Squashfs
Полное название Сжимающая файловая система для GNU/Linux
Limits
Макс. размер тома 16 ЭБ (264) байт
Макс. размер файла 16 ЭБ (264) байт
Features
Признаки POSIX и Extended file attributes
Прозрачное сжатие gzip, LZMA, LZ4, xz, zstd
Другие
Операционная система Linux
Веб-сайт squashfs.sourceforge.net

Squashfs (.sfs) — сжимающая файловая система только для чтения GNU/Linux. Squashfs сжимает файлы, индексные дескрипторы и каталоги, а также поддерживает блоки размером до 1 МБ для лучшего сжатия. Поддерживаются несколько алгоритмов сжатия. Squashfs также является названием бесплатного программного обеспечения, лицензированного под GPL, для доступа к файловым системам Squashfs.

Squashfs предназначен для общего использования файловой системы только для чтения и в ограниченных системах памяти блок-устройств (например, встроенных систем ), где требуются низкие издержки.[Источник 1]

История

Squashfs изначально поддерживался как патч для Linux из дерева. Первоначальная версия 1.0 была выпущена 23 октября 2002 года. В 2009 году Squashfs был объединен с основной веткой Linux, как часть Linux 2.6.29. В этом процессе код обратной совместимости для старых форматов был удален. С тех пор код пространства ядра Squashfs поддерживается в основном дереве Linux, а инструменты пользовательского пространства остаются на странице Sourceforge проекта.

В оригинальной версии Squashfs использовалось сжатие gzip , хотя в ядре Linux 2.6.34 добавлена ​​поддержка LZMA и сжатия LZO, в ядре Linux 2.6.38 добавлена ​​поддержка сжатия LZMA2 (которое используется xz ), и в ядре Linux 3.19 добавлена ​​поддержка сжатия LZ4. Поддержка Zstandard была добавлена ​​в ядре Linux 4.14.

В ядре Linux 2.6.35 добавлена ​​поддержка расширенных атрибутов файлов. [Источник 1]

Обзор

Squashfs предназначена для широкого использования файловых систем «только для чтения», а также в ограниченных по размеру блочных устройствах/системах хранения (то есть во встраиваемых системах), где необходимы низкие затраты на производство. Старые версии Squashfs использовали алгоритм сжатия gzip, также существовал проект, позволявший использовать алгоритм сжатия LZMA. Начиная с версии ядра 2.6.29, стандартная версия Squashfs поддерживает алгоритм LZMA2 (xz)[Источник 2]. Основные характеристики файловой системы:

  • Данные, индексные дескрипторы и директории хранятся в сжатом виде
  • SquashFS хранит полные UID/GID (32 бит), а так же время создания файла
  • Поддерживаются файлы размером до 2^64 байт, и файловые системы превосходящие 2^64 байт
  • Данные индексных дескрипторов и директорий сильно сжаты, каждый сжатый индексный дескриптор занимает в среднем 8 байт (точная длина зависит от типа файла: обычный файл, директория, символическая ссылка, блочное/символьное устройство)
  • SquashFS может использовать размеры блоков до 64 Кб (2.х) и 1Мб (3.х). Значение по умолчанию - 128Kб (3.x), при котором достигается лучшее отношение сжатия чем при стандартном 4Кб размере блока
  • Во 2.x релизе была представлена концепция фрагментированных блоков: возможность объединять несколько файлов, меньших размера блока, в один блок достигая лучшего отношения сжатия
  • Дубликаты файлов отслеживаются и удаляются
  • Поддерживаются big- и little-endian архитектуры; SquashFS может монтировать файловые системы с разным порядком нумерованная байтов

Настройка

Получение SquashFS

Сайт SquashFS находится по адресу http://squashfs.sourceforge.net/ - он содержит новости, последние релизы и chengelog, а так же общую информацию о SquashFS. Отсюда можно скачать последнюю версию SqaushFS.

Подготовка SquashFS-совместимого ядра

Для того, чтобы использовать SquashFS, необходима ее поддержка ядром - так же как для reiserfs или ext3. Необходимо убедиться, что имеется подходящий патч для вашего ядра - он должен быть расположен в поддиректории linux-2.x. y источников SquashFS. Кроме того, помните, что в большинстве случаев вам понадобится чистое (оригинальное) ядро с kernel.org.

Патч исходников ядра

При наличии исходников ядра и подходящего патча SquashFS необходимо сделать следующее: (мы предполагаем, что исходники ядра Linux находятся в /usr/src/linux, а источники SquashFS в /usr/src/squashfs):

# cd /usr/src/squashfs
# cp linux-2.x.y/squashfs-patch /usr/src/linux

Перейдите в директорию источников ядра /usr/src/linux:

# cd /usr/src/linux

Запустите SquashFS патч:

# patch -p1 < squashfs-patch

Компиляция ядра 2.6.x

Подготовка источников ядра:

# make distclean
# make mrproper

Сконфигурируйте ядро

# make menuconfig
  1. В разделе "File systems" -> "Miscellaneous file systems" активируйте опцию "Squashed filesystem" в качестве модуля или с привязкой к ядру.
  2. Если вы хотите использовать сжатый инициализирующий RAM диск, активируйте "Initial RAM disk support" в разделе "Device drivers" -> "Block devices". Если вы хотите иметь возможность монтировать сжатую файловую систему при помощи loopback-устройства в будущем, активируйте "Loopback device support" в разделе "Device drivers" -> "Block devices".

Скомпилируйте ядро и модули:

# make

Установка и тестирование ядра

Предполагается, что ядро скомпилировано под х86 архитектуру и образ ядра находится в arch/i386/boot/. Скопируйте ядро в /boot директорию (и переименуйте для удобства в bzImage-sqsh):

# cp arch/i386/boot/bzImage /boot/bzImage-sqsh

Установите модули ядра:

# make modules_install

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

# cat /proc/filesystems

Или, при запуске SquashFS как модуля:

# insmod squashfs
# cat /proc/filesystems

Если вы видите строку squashfs среди других файловых систем, значит вы успешно активировали SquashFS в вашем ядре.

Компиляция mksquashfs

Теперь необходимо скомпилировать mksquashfs - инструмент для создания сжатых файловых систем.

# cd /usr/src/squashfs/squashfs-tools
# make
# cp mksquashfs /usr/sbin

Если все прошло по плану, вызов mksquashfs в терминале должен напечатать инструкцию использования.

Использование

Squashfs используется Live CD дистрибутивами Debian, Finnix, Gentoo, Ubuntu, Fedora, gNewSense, а также во встраиваемых дистрибутивах, таких как прошивки маршрутизаторов OpenWRT и DD-WRT. Кроме того, Squashfs используется совместно с файловыми системами, образующими каскадно-объединённое монтирование, такими как UnionFS и AUFS, чтобы предоставить возможность использовать Live CD дистрибутивы Linux в режиме «чтение-запись». Это даёт преимущества от использования высокоскоростного сжатия Squashfs с возможностью производить изменения дистрибутива во время загрузки с Live CD. Такие дистрибутивы как Slax, Debian Live и Mandriva One используют эту комбинацию.

Squashfs уже является достаточно стабильной файловой системой, что послужило основанием для внесения её в основную ветку разработки ядра Linux. Файловая система была протестирована на архитектурах PowerPC, I586, MIPS, Sparc и ARM.

См. также

Источники

  1. 1,0 1,1 SquashFS // Википедия. [2018–2019]. Дата обновления: 24.12.2018. URL:https://en.wikipedia.org/wiki/SquashFS (дата обращения: 11.01.2019)
  2. Что такое SquashFS? // SquashFS HOWTO Дата обновления: 24.07.2008 URL: https://www.tldp.org/HOWTO/html_single/SquashFS-HOWTO/ (дата обращения: 11.01.2019)

Ссылки