Создание LiveCD Slackware based: использование Squashfs
AUFS-2.1: установка и работа в связке с SquashFS
посвященых использованию сильно-сжатой файловой системы Squashfs в построении LiveCD.
Долгое время LZMA-сжатие для SquashFS было отдельным проектом Tomas'a Matejicek'a - основателя Slax-LiveCD. С принятием в основную ветку ядра Linux SquashFS четвертой версии, поддержка альтернативных алгоритмов сжатия легла на создателей SquashFS Филипа и Роберта Лоуферов(англ. Lougher). В настоящее время в ядро ревизии 2.6.36 включен алгоритм сверх-быстрого (Real-time) LZO сжатия. SquashFS версии 4.1 с поддержкой алгоритмов lzma и xz ожидается в ревизии ядра 2.6.37 или 2.6.38. Более подробно можно почитать на вики проекта дистрибутива "Федора"
https://fedoraproject.org/wiki/Features/LZMA_for_Live_Images
там же приведены ссылки на соответствующие треды.
Ближе к делу. Нам нужен будет пакет squashfs-tools с поддержкой lzma. Веб-адрес проекта:
http://squashfs.sourceforge.net
Последняя стабильная версия 4.1, в нем анонсирована поддержка lzma. Проблема в том, что при сборке используется LZMA SDK, который нужно брать здесь
http://www.7-zip.org/sdk.html
нам же, как пользователям Slackware, проще будет собрать squashfs-tools из рабочей версии, где осуществлена поддержка lzma на основе xz-пакета.
идем на страницу:
http://squashfs.cvs.sourceforge.net/viewvc/squashfs/squashfs/squashfs-tools
и мышкой жмем внизу на кнопку "Download tarball"
распаковываем архив:
# tar xvf squashfs-squashfs-tools.tar.gz
переходим в целевой каталог:
# cd ./squashfs-tools
и открываем текстовым редактором Makefile. На данный момент lzma и xz поддержка реализована, но пока отключена. Нужно раскомментировать(убрать решетку) следующие строки в Makefile:
#LZMA_XZ_SUPPORT = 1
#XZ_SUPPORT = 1
#XZ_SUPPORT = 1
после чего сохраняем Makefile и запускаем сборку командами
# make clean
# make
# make
на выходе получаем две утилиты mksquahsfs и unsquashfs. проверяем:
# ./mksquashfs --help
в конце справки должно будет вывести:
Compressors available:
gzip (default)
lzma
xz
значит все Ok
копируем в каталог /tmp/livecd содержимое диска полученного в прошлый раз в топике
AUFS-2.1: установка и работа с связке с SquashFS
и туда же копируем только что собраные утилиты mksquashfs и unsquashfs
# cp -v ./mksquashfs /tmp/livecd
# cp -v ./unsquashfs /tmp/livecd
# cp -v ./unsquashfs /tmp/livecd
размер полученного в прошлый раз размер образа initrd сжатого gzip алгоритмом:
54616064 байт
распакуем его:
# ./unsquashfs -d ./1 ./image
# cd ./1
# cd ./1
сожмем на этот раз lzma алгоритмом:
# rm ../image
# ../mksquashfs . ../image -comp lzma
# ls -l ../image
# ../mksquashfs . ../image -comp lzma
# ls -l ../image
47341568 байт. Разница более семи мегабайт, т.е. эффективность сжатия около 15%. Теперь пробуем еще раз, но с алгоритмом XZ
# rm ../image
# ../mksquashfs . ../image -comp xz
# ls -l ../image
# ../mksquashfs . ../image -comp xz
# ls -l ../image
47304704 байт. Разница в четвертом знаке, т.е. это доля процента. Думаю понятно, что этот алгоритм нас пока не будет интересовать. Как бы ещё так "прыгнуть выше головы", в смысле улучшить наше положение? Штудирование опций mksquashfs навело на следующие:
# rm ../image
# ../mksquashfs . ../image -comp lzma -b 512K
# ls -l ../image
# ../mksquashfs . ../image -comp lzma -b 512K
# ls -l ../image
44384256 байт. Ого!! итоговый результат более 10Мб, целых 20%! Увеличив размер блока файловой системы до 512Кбайт мы существенно уменьшили итоговый вес образа initrd. А вот сжатие с размером блока один мегабайт совершает чудо. размер initrd сокращается еще на мегабайт, до 43208704 и.. с таким образом Recovery-версия запускается на 96Мб оперативки. Это значит, что у меня есть вагон пространства до 128Мб для дополнительных программ. Кстати, эмпирическим путем наметилось правило: размер потребляемой оперативки равен размеру образа умноженному на два, плюс размер несжатого ядра. Как избавиться от умножения на два? хотелось бы мне знать..
Ах да. Для того чтобы загрузиться с новым initrd нужно еще ядро с поддержкой lzma для squashfs. Адрес проекта поддержки lzma для squashfs4.0:
http://git.kernel.org/?p=linux/kernel/git/pkl/squashfs-lzma.git;a=summary
оттуда можно выкачать исходники ядра 2.6.34-rc6 с lzma сжатием для Squashfs, отдельного патча к сожалению нет. Я собрал его с поддержкой AUFS и в итоге получил LiveCD на SquashFS-4.0 с LZMA сжатием. Таким образом, за счет использования SquashFS с LZMA сжатием, я снизил потребление оперативной памяти в Recovery-LiveCD c 256Мб до 96Мб.
скриншот

Комментариев нет:
Отправка комментария