FastNetMon

Показаны сообщения с ярлыком Initrd. Показать все сообщения
Показаны сообщения с ярлыком Initrd. Показать все сообщения

пятница, 1 октября 2010 г.

Что такое Linux initrd и зачем он нужен?

Очень многие, уверен, замечали, что на Linux ядро всегда сопровождается загадочным initrd образом. Так что это за зверь и зачем он нужен?

Для начала давайте обратим внимание на то, что Linux root раздел (/) может располагаться на NFS, Linux Soft Raid или LVM разделе. Таким образом, ядро должно загрузить драйверы доступа к соответствующим подсистемам (LVM, MDRAID, NFS) на этапе первичной инициализации. Драйверы представляют собой не что иное как модули ядра, которые хранятся в папке /lib/modules/*, которая в свою очередь очень велика (сотни мегабайт) и располагается на root разделе. Так как же быть, если нужные нам драйверы лежат на устройстве, которое само требует драйверов для доступа к нему?

Вариантов решения проблемы озвученной в предыдущем абзаце несколько - вкомпилировать необходимые дарйвера в само ядро, тем самым увеличив его размер на многие мегабайты, что не лучшим образом скажется на универсальности ядра при использовании его на различных конфигурациях; то есть этот вариант нам не подходит. Второй вариант - положить все необходимые модули ядра рядом с самим ядром (допустим, на /boot раздел), но это также далеко не лучший вариант, так как ядро может грузится не с локального диска, а по сети, тогда просто-напросто хранить эти модули негде (а как мы помним они занимают сотни мегабайт и передача их по сети не рентабельна).

И вот приходит он - initrd. Если изъясняться просто, то это небольшой набор модулей ядра, который лежит в запакованном (gzip) виде рядом с ядром. При этом, этот набор не задан жестко и его можно очень быстро изменить (добавив, допустим, какой-то специфичный драйвер) и следом пересобрать initrd. То есть, при использовании initrd загрузка представляет собой следующую последовательность - запуск ядра, распаковка initrd, подгрузка модулей из initrd (теперь появляется возможность увидеть root раздел даже если он стоит на LVM/MDRAID/NFS), монтирование root раздела и последующая инициализация системы.

У кого есть дополнения / комментарии, милости прошу в комменты :)

среда, 8 сентября 2010 г.

Пересборка initrd Debian

Иногда по различным причинам в Debian генерируется кривой или неполный initrd файл, поэтому может возникнуть необходимость его пересборки, делать это так:
update-initramfs -v -u -k `uname -r` -t

Если же Вы в LiveCD и uname -r вернет далеко не ядро текущей системы, то смотрите в /etc/grub.conf или /boot/grub/menu.lst версию используемого ядра и вписывайте ее как аргумент команды вручную.