13.05.2009 16:52
lwilis — Про Slackware 12.2 с ядром generic и про initrd
Читаю комментарии и замечаю, что есть желающие установить Slackware. Дистрибутив очень либеральный, поэтому есть несколько вариантов установки. Для ленивых с шилом в пятке подойдет первый вариант, а для интересующихся я рассмотрю вариант установки номер два.Первый вариант - ставим все (full install). Действуем по пунктам руководства, благо Патрик предусмотрел краткую, но достаточную инструкцию. Ничего особенного читать не придется - все рекомендации выводятся на экран еще до начала установки. По итогам получим работающую систему, с KDE 3.5.10, XFCE 4.4.3, fluxbox etc. Причем инсталлятор поинтересуется какую именно среду вам нужно после загрузки системы. На этом обсуждение первого варианта закончилось.
Второй вариант предполагает, что нам нужны не все пакеты из доступных в дистрибутиве. После установки нам хочется видеть систему под управлением модульного ядра. Зачем? Место на диске (да я знаю какие сейчас объемы, но а если у нас нетбук). Также небольшое ускорение загрузки и работы системы на модульном ядре, относительно ядра-"все-в-одном". Экономия оперативной памяти. Сокращение объемов при бекапе системы, да и бессмысленно держать в системе лишнее.
Если вы уже на этой строчке, и вам интересно, то к делу.
Созданы необходимые разделы на диске (для определенности предлагаю в этот раз сделать только один раздел, будем монтировать в него корень файловой системы, то есть / и еще можно swap сделать, но я не делаю), выбраны файловые системы, выбраны цели (в нашем случае цель будет одна, то есть только точка монтирования /), выбраны нужные пакеты для установки, копирование прошло успешно, установщик поинтересовался начальными настройками системы, автоматическая установка lilo в mbr прошла успешно, все хорошо, нам предлагают перезагрузиться в новую систему.
И тут выясняется, что не может смонтироваться первый раздел в /mnt. А как следствие, загрузка системы на этом прерывается. Здесь я исхожу из умолчания, что диск у нас один, определиться должен как /dev/hda и раздел на нем /dev/hda1.
Когда я впервые столкнулся с такой ситуацией, впал в состояние "немого пардона" минут на несколько. Самое удивительное было то, что все так хорошо шло, делал без отклонений от рекомендаций, вот только не все пакеты поставил. Впоследствии оказалось, что ситуация очевидна, а для выхода из нее все уже предусмотрено.
Небольшая справка. Возвращаясь немного назад в процесс установки, заметим, какое ядро мы выбрали. А выбрали мы kernel-generic-smp и выбрали соответствующий пакет с модулями modules-generic-smp. Еще ставили пакет с заголовками ядра (kernel-headers) и исходники (kernel-source) тоже, но это нас пока не интересует. Теперь вспоминаем, что ядро generic содержит в себе только те компоненты, которые с большой вероятностью будут востребованы любым компьтерным железом. А все, что индивидуально - вынесено в модули. Еще нам необходимо вспомнить какую файловую систему
поддерживает ядро, по-умолчанию такой системой является ext2. Вполне логично, что во времена ext3 (а уже и ext4 в новейших дистрибутивах) именно она и будет использована (для ext2 до сих пор есть ниша на нетбуках, но рассмотрим общий случай). То есть выходит, что наше ядро поддерживает только ext2, а корневой раздел нашего диска несет файловую систему ext3. Что делать? Ответ есть. Нам нужно вспомнить какой контроллер обслуживает наш жесткий диск. Вариантов,по сути, два IDE или SATA. Если IDE, то количество телодвижений несколько сократится. Иначе вспоминаем, что SATA-диски в линуксе представлены как устройства scsi и, как следствие, файл устройства нашего диска именуется /dev/sda, а раздел на нем /dev/sda1. Теперь нам нужно узнать где тот мост, который соединит наше ядро и корневую файловую систему. Этим мостом послужит файл initrd.gz.
Что такое файл initrd.gz. Это просто архив минимально необходимого дерева файловой системы для запуска ОС. Нас в этом архиве интересует наличие модулей для монтирования файловой системы ext3. Правда, если нам очень не повезло, то еще потребуется драйвер для sata контроллера, но драйверы для моих sata есть в ядре generic, поэтому считаем, что и у вас тоже контроллер не из экзотики. А где взять этот файлик initrd.gz?
Его нужно сгенерировать самостоятельно. Очень удобно это сделать при помощи утилиты mkinitrd. Поэтому при установке системы не забудьте про пакет mkinitrd.
Теперь нам все-таки нужно загрузиться в нашу новую систему. Для начала вставим в привод установочный диск Slackware и, немного погодя, увидим системное приглашение boot:там напечатаем
1 |
|
1 |
|
После этой процедуры в каталоге /boot появится файл initrd.gz и каталог initrd-tree. Как я упоминал выше, нас интересуют модули для ext3, поэтому проверим их наличие:
1 |
|
если в ответ мы получили:
1 |
/boot/initrd-tree/lib/modules/2.6.27.7-smp/kernel/fs/ext3/ext3.ko
|
то все не зря.
После создания initrd.gz, нам нужно сказать системе, как его непременно использовать. Для этого переконфигурируем загрузчик системы. Как конфигурируется lilo нам уже рассказал Патрик (файл /boot/README.initrd, он же является основой настоящей заметки), а я расскажу про GRUB... В следующий раз. Не переключайтесь :)
P.S. пишите уточнения, я мог что-то пропустить
P.P.S любителям reiserfs и других файловых систем просьба оставить флейм для другого случая, При желании замените все вхождения сочетания ext3 на reiserfs. (но возникновение ньюансов возможно)
booley 13.05.2009 16:55 #
+ 0 -
Пост обрезался?
конечно можно и на других сайтах посмотреть, но дополни про модульное ядро (что это такое и с чем его едят)
Модульное ядро состоит из собственно минимального ядра (с ограниченными возможностями) и армии модулей в /lib/modules/`uname -r`/ - доводящими возможности ядра до необходимых. То есть в процессе работы системы нужные модули подключаются к ядру, а весь userspace думает что это у нас ядро такое фичастое. как-то так
А слака устанавливается из прекомпилированных пакетов или sourc'ов?
наверно тут полно народу кто этим не раз занималься и ничего нового для себя не нашел. Даже если это про вас ставьте +!