Очень многие, уверен, замечали, что на 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 раздела и последующая инициализация системы.
У кого есть дополнения / комментарии, милости прошу в комменты :)
Friday 1 October 2010
Что такое Linux initrd и зачем он нужен?
Subscribe to:
Post Comments
(
Atom
)
"У кого есть дополнения / комментарии, милости прошу в комменты :) "
ReplyDeleteЭто уже устарело вроде как. Модно стало initramfs вместо initrd