понедельник, 6 июля 2009 г.

Initial RAM-Disk (initrd)

В большинстве дистрибутивах используется один очень полезный костыль - это initrd - Initial RAM disk, что по русски звучит круче - "диск в оперативной памяти для начальной инициализации". По названию и по некоторому опыту можно самостоятельно понять, что это некий образ диска, который грузиться в начале старта системы и используется для ее инициализации.
На деле - этот файл уже не является образом. Ветка ядер 2.6 уже поддерживает помимо образов еще и cpio архивы. То есть сейчас, файл initrd.img представляет из себя cpio-архив, сжатый обычно gzip'ом, внутри которого урезанная корневая файловая система. То есть, в нем те-же каталоги "/bin", "/etc" и т.д., но только не целиком взятые с основной корневой фс, а только лишь с необходимыми файлами для загрузки системы. То есть, там естественно будут утилиты типа "insmod", чтобы подгружать модули, "mount", чтобы монтировать уже настоящею корневую систему и т.д. Еще там находятся необходимые для загрузки модули - ведь ядро, например, не сможет получить доступ к файловой системе, поддержка которой скомпилена модулем, а сам модуль находиться на этой ФС. То есть ядро не сможет прочитать модуль с этой ФС, пока не загрузит этот модуль. Немного смешно звучит конечно, но собственно для таких целей и используется initrd. В нем просто находятся модули файловых систем, модули контроллеров жестких дисков и т.д.
Работает это все очень просто. Загрузчик, типа grub, загружает ядро линукса и в параметрах передает этому ядру файлик initrd. Ядро загружается, загружает в память содержимое initrd, запускает в нем программу "/sbin/init" которая уже задачи загрузки берет на себя. Подгружаются необходимые модули, монтируются файловые системы и дальше initrd передает уже управление загрузкой на основной корневой системе.
В разных дистрибутивах состав этого образа не одинаковый. Поэтому разберу его на примере уже в следующей теме.

3 комментария:

  1. а вот это очень для меня интересно. особенно тот шаг когда он реальную ФС уже монтирует. Всегда было интересно узнать этот фокус

    ОтветитьУдалить
  2. Можно ли обойтись без этого образа, если вкомпилить модули в ядро? И даст ли это какие-то преимущества?

    ОтветитьУдалить
  3. Можно. Даст одно заберет другое. Например ядро уже будет огромным. Переносимость будет практически не доступна.. только если заного ядро перекомпилить.

    Но производительность должна не намного.. но вырасти.

    ОтветитьУдалить