вторник, 20 апреля 2010 г.

Создание LiveCD Slackware based: использование Squashfs

Если в google ввести "сжатая файловая система" то первые десять станиц будут вести на сайты с обсуждением Squashfs. Честно говоря возникает впечатление что "на ней свет клином сошелся". Я специально не стал использовать Squashfs с самого начала, потому что русско-язычной документации по другим сжатым файловым системам крайне мало, а Unix-way подразумевает возможность выбора инструментов для своих целей. Кроме этого Вы НиКоГдА не узнаете что лучше/проще zisofs или squashfs пока сами не попробуете их на деле и не сравните результаты. Итак, давайте узнаем так ли хорош чертSquashfs как его малюют.

Матчасть. Так же как zisofs, squashfs использует gzip алгоритм компрессии, но итоговый результат у squashfs получается лучше за счет структуры свой файловой системы. /usr каталог сжатый zisofs до 13MB, squashfs сжал до 8MB. Результат налицо. Существует проект Squashfs LZMA добавляющий lzma сжатие для Squashfs, но там нужно будет накладывать патч на ядро, оставим это на потом.
Чтобы использовать Squashfs у Вас в ядро должен быть включен его драйвер
File systems -> Miscellaneous filesystems -> quashFS 4.0 - Squashed file system support
теперь нужна программа для создания архивов Squashfs. на странице проекта скачайте тарболл squashfs4.0.tar.gz, распакуйте, зайдите в каталог squashfs-tools и наберите make чтобы собрать программу и make install что бы установить.

Вернемся к нашим баранамскриптам. Как сжимать какой-то один или несколько каталогов системного раздела мы уже знаем, в это раз мы не будем мелочиться и сожмем весь системный раздел, соответственно системный раздел теперь у нас будет Read-Only. Наши скрипты теперь будут такими:
cat > /tmp/livecd/cl << EOF
#!/bin/sh
[ -d ./1 ] || exit 1
cd ./1
[ -e ../image.squash ] && rm ../image.squash
[ -d ./usr/doc ] && rm -rf ./usr/doc/*
[ -d ./usr/man ] && rm -rf ./usr/man/*
[ -d ./usr/info ] && rm -rf ./usr/info/*
[ -d ./usr/include ] && rm -rf ./usr/include/*
mksquashfs . ../image.squash
cd -
rm -r ./1

cat > /tmp/livecd/op << EOF
#!/bin/sh
[ -d ./1 ] && exit 1
mkdir ./1
cd ./1
mount ../image.squash /mnt/tmp -o loop && cp -av /mnt/tmp/* ./
umount /mnt/tmp
rm ../image.squash
cd -

cat > /tmp/livecd/isolinux.cfg << EOF
DEFAULT linux
PROMPT 0

LABEL linux
KERNEL vmlinuz
APPEND video=normal initrd=image.squash root=/dev/ram0 ro looptype=squashfs ramdisk_size=20000 vt.default_utf8=1
здесь ramdisk_size= должен быть размер вашего итогового файла image.squash в килобайтах

ну и соответственно поменяется fstab нашего livecd, теперь он будет таким:
/dev/loop0 / squashfs auto,loop,ro 1 1
tmpfs /dev/shm tmpfs defaults 0 0

на этом все изменения. мне удалось собрать сетевую станцию размером 19MB{архив=18MB + монолитное ядро 1.2MB} с расходом оперативной памяти на старте 54MB.

Комментариев нет:

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