10.10. Создание образа initrd
Проблема
В системе используются диски SCSI. Из-за разнообразия драйверов SCSI вы хотите, чтобы драйверы загружались в виде модулей. В этом случае диски или контроллеры можно будет менять без повторной сборки ядра, а вам не хотелось бы отягощать ядро включением всех возможных драйверов. Но как перезагрузить систему без встраивания драйвера SCSI в базовое ядро?
Решение
Постройте образ initrd (виртуальный диск) командой mkinitrd после сборки ядра. Затем включите в загрузчик запись для загрузки образа. В ядрах 2.4 и 2.6 команда mkinitrd выполняется после команды make modules_install:
# mkinitrd -o /boot/initrd-2.4.25-new.kernel.img
Команда строит образ и устанавливает его в каталог /boot; остаётся лишь создать записи в загрузчике. Для загрузчика GRUB это выглядит так:
title Kernel 2.4.25. new kernel
root (hd0,0)
kernel /boot/bzImage-2.4.25-new-kernel root=/dev/hda1 ro
initrd /boot/initrd-2.4.25-new-kernel.img
Пользователи LILO могут использовать следующий синтаксис:
image=/boot/bzImage-2.4.25-new-kernel
initrd=/boot/initrd-2.4.25-new-kernel.img
label=Kernel 2.4.25. new kernel
root=/dev/hda1
read-only
Не забудьте выполнить команду /sbin/lilo, чтобы активировать изменения в загрузчике.
Комментарий
Обязательно прочитайте man-страницу mkinitrd, поскольку параметры могут отличаться в зависимости от дистрибутива. Использование initrd — гибкое решение, но оно не обязательно. Если вы предпочитаете, можно встроить SCSI-драйверы непосредственно в ядро.
Как правило, initrd применяется для того, чтобы ядро могло загружаться на множестве разных систем без необходимости встраивания всех драйверов в ядро, что делает систему более гибкой и лёгкой для настройки.
См. также
mkinitrd(8).