FastNetMon

Friday 1 October 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 раздела и последующая инициализация системы.

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

1 comment :

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

    Это уже устарело вроде как. Модно стало initramfs вместо initrd

    ReplyDelete

Note: only a member of this blog may post a comment.