Зачем нужен initrd в linux

Обновлено: 07.07.2024

Как было сказано в предыдущем разделе, в процессе начальной загрузки вначале монтируется временный виртуальный диск, содержащий корневую файловую систему (очевидно, тоже временную), с помощью которой осуществляется запуск на выполнение ядра операционной системы. Образ этой корневой системы хранится на загрузочном устройстве в каталоге /boot и обычно носит имя initrd-2.x.yy-zzzz (точное наименование файла смотрите в вашей системе, далее он будет именоваться просто initrd). Загрузчик переносит образ корневой файловой системы из файла initrd в оперативную пямять одновременно с образом ядра, ядро преобразует initrd в "нормальный" RAM диск, монтирует временную корневую файловую систему, извлекает из нее нужные драйверы и другие служебные файлы, с помощью которых инициализирует все необходимые устройства. После этого происходит перемонтирование корневой файловой системы, временная ФС заменяется на постоянную, размещающуюся уже на долговременном носителе и процесс загрузки системы продолжается.

После того, как будет смонтирована корневая файловая система с жесткого диска, файл initrd уже никак не используется и место, занимаемое им в памяти, тоже освобождается. А теперь давайте подробнее рассмотрим как устроен этот файл. При этом надо сразу сказать, что внутреннее устройство initrd и его применение в ядрах версий 2.6 было изменено по сравнению с ядрами версий 2.4, так что придется рассмотреть эти случаи по отдельности.

3.2.1. Внутреннее устройство initrd

Как сказано в статье [10] в дистрибутиве Fedora Core 3 (и его предшественниках) файл initrd создавался с использованием виртуального loop-устройства. В этом случае сделать содержимое файла initrd доступным для просмотра можно с помощью следующих команд (напомню, что имя вашего образа initrd может отличаться):

Листинг 2. Просматриваем initrd в варианте loop-устройства (до FC3) После этого вы можете посмотреть содержимое initrd в директории /mnt/initrd. Заметьте что даже если имя вашего образа initrd не заканчивается на ".gz", это все равно сжатый файл и добавив к концу имени суффикс ".gz", вы сможете воспользоваться командой gunzip, чтобы его распаковать.

В таких дистрибутивах, как Fedora Core 4, SUSE 10, . файл initrd представляет собой cpio-архив, сжатый упаковщиком gzip. Чтобы просмотреть его содержимое, надо выполнить команды, приведенные в листинге 3

Листинг 3. Просматриваем initrd в варианте cpio-архива (FC3 и позже) После этого в каталоге

/tmp вы найдете каталоговую структуру, аналогичную структуре каталогов обычной Linux-системы. В ней вы обнаружите обычные для корневого каталога подкаталоги, а также файл linuxrc. Могут там оказаться и другие файлы, например, файл bootsplash (судя по названию он содержит картинку, которая отображается при запуске).

Познакомившись с внутренним содержанием файла initrd можно вернуться к рассмотрению его роли в процессе загрузки.

3.2.2. Загрузка системы в случае использования initrd (ядра версий 2.4.х)

Приводимое ниже описание последовательности операций на этапе загрузки я позаимствовал из [11,12].

1. Загрузчик загружает ядро и содержимое initrd в память (очевидно, по вполне определенным адресам . ), после чего передает управление ядру.

3. Ядро инициализирует устройства, создает файловую систему устройств /dev, разархивирует initrd и копирует его содержимое на устройство /dev/ram0, а затем освобождает память, занятую initrd.

4. Ядро монтирует устройство /dev/ram0 для чтения и записи в качестве начальной корневой файловой системы.

5. Если в начальной корневой файловой системе находится исполняемый файл /linuxrc, он исполняется с uid 0. Этот файл должен иметь разрешения на исполнение, он может быть как обычным исполняемым файлом, так и просто скриптом оболочки, но в последнем случае должен быть и интерпретатор скриптов.

6. Cкрипт /linuxrc монтирует нормальную корневую файловую систему.

7. Корневая файловая система помещается в корневую директорию. Смена корневого устройства выполняется системным вызовом pivot_root, который также доступен через утилиту pivot_root (см. pivot_root(8); pivot_root распространяется в составе util-linux версии не ниже 2.10h ). Смена корневой директории не включает её демонтирование. Следовательно, при выполнении данной процедуры можно сохранить процессы, запущенные с файловой системы initrd.

8. Если нормальная корневая файловая система имеет каталог /initrd, то устройство /dev/ram0 перемещается из / в /initrd. Иначе, если каталог /initrd не существует, устройство /dev/ram0 размонтируется.

9. На нормальной корневой файловой системе следует обычная процедура загрузки (например, вызов /sbin/init).

10. Теперь можно демонтировать /dev/ram0 и освободить память, занятую RAM диском.

3.2.3. Initramfs - новая модель инициализации (ядра версий 2.6.х)

Все сказанное выше относительно процедур загрузки и использования файла initrd справедливо для ядер версии 2.4.xx и более ранних. В ядрах версии 2.6 (а точнее, начиная с экспериментального ядра версии 2.5.46) разработчики решили реализовать иной механизм. Причиной послужили несколько недостатков ранее использовавшегося варианта реализации временной корневой файловой системы.

Во-первых, виртуальный диск, как и все блочные устройства, требует драйвер файловой системы для интерпретации данных во время выполнения. Этот драйвер приходилось включать в ядро.

Во-вторых, неэфективно используется оперативная память, так как размер виртуального диска фиксирован и не может изменяться во время работы без его переформатирования (даже если диск не заполнен, невозможно отдать эту память под другие нужды).

В третьих, в Linux осуществляется кэширование всех файлов и записей каталогов, прочитанных или записанных на блочное устройство. Виртуальный диск тоже кешируется, как и обычные диски, то есть часть данных будет храниться не только на RAM диске, но и в страничном кэше "page cache" (для файловых данных) и в кэше для записей каталогов "dentry cache", что еще больше снижает эффективность использования памяти.

  • Система, использующая initramfs в качестве корневой файловой системы, более не нуждается в соответствующем драйвере файловой системы, встроенном в ядро, так как нет блочных устройств для интерпретации файловых систем.
  • Размер этой файловой системы автоматически изменяется в соответствии с обьёмом данных, которые она содержит. При добавлении новых файлов (как и при расширении существующих) автоматически выделяется память, при удалении или уменьшении файла происходит высвобождение памяти.
  • Достоинством initramfs является также то, что это не новый код, а новое применение уже существующего кода кэширования ядра Линукс, что практически не влечёт увеличение размера ядра, выполнение будет очень простым и основано на чрезвычайно хорошо протестированной инфраструктуре.
  • Исчезают некоторые проблемы загрузки с SATA-дисков.
  • Initramfs загружается немного быстрее, чем initrd.

Формат initramfs используется по умолчанию для всех ядер, начиная с версии 2.6.15.

В каталоге /boot такая файловая система хранится, по-прежнему, в файле в виде сжатого cpio-архива. Только имя включаемого в этот архив скрипта изменилось с linuxrc на init. Например, в системе ASP Linux 11 после разархивирования файла initrd-2.6.14-1.1653.1asp.img по приведенному в листинге 3 алгоритму я увидел скрипт init и следующую структуру каталогов:

В подкаталоге /bin обнаружилось всего 4 исполняемых файла и две ссылки, в подкаталоге /dev - 8 файлов устройств, в /etc - конфигурационный файл udev/udev.conf, в каталоге lib - два файла: ext3.ko и jbd.ko. Остальные подкаталоги - пустые. Файл init оказался скриптом оболочки следующего вида:

Листинг 4. Содержимое файла init в дистрибутиве ASP Linux версии 11. Обратите внимание на первую строку этого файла: это скрипт для оболочки nash, которая является сильно урезанной версией командного процессора и тоже включена в состав initramfs. Другие, более мощные оболочки на этом этапе еще недоступны.

Образ виртуальной файловой системы initramfs хранится на диске по-прежнему в файле /boot/initrd-version и создается такой файл как и ранее командой mkinitrd. Прочитать о том, как создать такой файл, можно в статье [10]. Перечень модулей (иначе говоря, драйверов), которые будут включены в эту файловую систему, приведен в переменой INITRD_MODULES в файле /etc/sysconfig/kernel. Если вам требуется включить в /boot/initrd-version какие-то дополнительные модули (например, в случае изменения состава оборудования), вы можете скорректировать соответствующим образом список модулей в файле /etc/sysconfig/kernel, после чего заново создать файл /boot/initrd-version.

Этот документ описывает, как создать и установить initrd, который может потребоваться для использования ядра версий 4.х. Смотрите также «man mkinitrd».

Что такое Initrd?

initrd расшифровывается как «initial ramdisk» (начальный виртуальный диск). Начальный виртуальный диск, это очень маленькая файловая система Linux, которая загружается в оперативную память и монтируется в качестве загрузчика ядра, перед монтированием основной корневой файловой системы.

Зачем мне нужен initrd?

Обычной причиной для использования initrd является то, что вам нужно загрузить модули ядра перед установкой корневого раздела. Как правило, эти модули, необходимы для поддержки файловой системы используемой корневым разделом (ext3, ext4, btrfs, XFS), или контроллера, жесткого диска который подключен к (SCSI, RAID, и т.д.). По существу, есть очень много различных опций, доступных в современных Linux ядрах, но не практично пытаться загружать различные ядра для того, чтобы удовлетворить потребности каждого. Гораздо более гибким решением будет загрузка стандартного ядра и набора модулей для него.

Как я могу создать Initrd?

Самый простой способ создать initrd это использовать скрипт mkinitrd , включенный в пакет Slackware, который так и называется «mkinitrd» . Мы пройдем через процесс обновления до generic 4.4.14 Linux ядра с помощью пакетов которые находится в каталоге slackware/a/.

Во-первых, убедитесь, что ядро, модули ядра, и пакет mkinitrd установлены (текущий номер версии может быть немного другой, так что это просто пример):

Перейдите в каталог /boot:

Теперь нужно будет запустить «mkinitrd». Я использую ext4 для корневой файловой системы, и так как контроллер диска не требует специальной поддержки, то мне, для загрузки, нужен будет только один модуль ext4 :

Эта команда сделает две вещи. Сначала, создаст каталог /boot/initrd-tree, содержащий файловую систему initrd. А потом создаст сам initrd (/boot/initrd.gz) из этого дерева. Если вы хотите, то можете сделать некоторые дополнительные изменения в /boot/initrd-tree/, а затем запустить mkinitrd снова без опций, чтобы пересоздать образ. Это необязательно делать, хотя, только опытным пользователям нужно будет думать об этом.

Вот еще один пример: Создание образа initrd с помощью Linux 4.4.14 модуля ядра для системы с ext4 на корневой раздел /dev/sdb3:

Теперь, когда я создал Initrd, как я могу его использовать?

Теперь, когда вы получили Initrd (/boot/initrd.gz), то захотите загрузить его вместе с ядром во время загрузки. Если вы используете загрузчик LILO, то вам нужно отредактировать файл /etc/lilo.conf и добавить строку для загрузки Initrd. Вот пример раздела lilo.conf, показывающий, как это делается:

Initrd загружается в строке «initrd = /boot/initrd.gz». Просто добавьте эту строку прямо под строкой используемого образа ядра . Сохраните файл, а затем запустить LILO снова (набрав «lilo» в командной строке). Вам нужно запускать «lilo» каждый раз, когда вы редактируете lilo.conf или пересоздаете Initrd.

Initrd загружается в строке «initrd = /boot/initrd.gz». Просто добавьте эту строку прямо под строкой используемого образа ядра . Сохраните файл, а затем запустить LILO снова (набрав «lilo» в командной строке). Вам нужно запускать «lilo» каждый раз, когда вы редактируете lilo.conf или пересоздаете initrd.

Другие загрузчики, такие как SYSLINUX также поддерживают использование initrd. Для подробностей, смотрите документацию по этим программам об использовании initrd с ними.

зачем поддержку fs выносят в модули? а потом трахаюца с initrd.


Наверно потому, что у создателей дистрибутива нет в штате телепата и они не знают какую фс выберет пользователь.


+ набивать ядро кучей лишнего и кода для неиспользующихся в конкретной системе фс - не кошерно :)


кошерно - это в синагоге.

Никакой связи. Учите матчасть.

Linux® initial RAM disk (initrd)- временная рутовая файловая система,которая монтируется во время загрузки. initrd включает в себя различные утилиты и драйвера, которые уже в свою очередь монтируют реальную рутовую систему, после чего initrd RAM отмонтируется и освободит память. Во многих embedded Linux системах initrd является собственно рутовой файловой системой. Эта статья делает обзор RAM disk для Linux 2.6, включая его создание и использование в ядре.

у родригеса можно прочитать :
LILO, GRUB, and Yaboot support the loading of the initial RAM disk (initrd). initrd acts as a root filesystem before the final root filesystem is loaded and initialized. We refer to the loading of the final root filesystem as pivoting the root.

This initial step allows Linux to initially come up with certain modules precompiled and then dynamically load other modules and drivers from initrd. The major difference to the bootloader is that it loads a minimal kernel and the RAM disk during Stage 2. The kernel initializes using the RAM disk, mounts the final root filesystem, and then removes the initrd.

initrd allows for

Configuring a kernel at boot time
*

Keeping a small general-purpose kernel
*

Having one kernel for several hardware configurations

The previously referenced stanzas are the most common for loading Linux with Yaboot, GRUB, and LILO. Each bootloader has a rich set of commands for their configuration files. For a customized or special function boot process, a quick Web search on GRUB and LILO configuration files yields good information on the subject.

Now that we have seen how the kernel is loaded and how memory initialization starts, let's look at the process of kernel initialization.

или :
Linux Bootdisk HOWTO - Tom Fawcett

Some bootdisks use a feature called initrd (initial ramdisk). This feature was introduced around 2.0.x and allows a kernel to boot in two phases. When the kernel first boots, it loads an initial ramdisk image from the boot disk. This initial ramdisk is a root filesystem containing a program that runs before the real root fs is loaded. This program usually inspects the environment and/or asks the user to select various boot options, such as the device from which to load the real rootdisk. It typically loads additional modules not built in to the kernel. When this initial program exits, the kernel loads the real root image and booting continues normally. For further information on initrd, see your local file

Начальный RAM диск для загрузки Linux (initrd) это временная корневая файловая система, которая монтируется в процессе загрузки системы в оперативную память для поддержки 2х уровневой модели загрузки. Initrd состоит из различных исполняемых файлов и драйверов, которые позволяют смонтировать настоящую корневую файловую систему, после чего initrd
размонтируется и освобождается память. Во многих встраиваемых системах initrd так и остаётся корневой файловой системой. В этой статье исследуется загрузочный RAM диск для ядра Linux 2.6, включая процесс его создания и использования в ядре линукса.

Что такое загрузочный RAM диск?

Загрузочный RAM диск (Initrd) это образ корневой файловой системы, который монтируется до того как настоящая корневая фс будет доступна. Initrd связан с ядром и загружается как часть ядра в процессе загрузки системы. Ядро монтирует образ initrd в котором находятся необходимые модули для монтирования корневой фс и уже дальнейшего перехода в этот корень как основной.

В initrd содержится минимальный набор директорий и исполняемых файлов для загрузки модулей, например insmod для загрузки модулей ядра.

В случае настольной системы или сервера, initrd временная файловая система. Её время жизни коротко и служит лишь связующим звеном к корневой фс. Во встраиваемых системах нет записываемых устройств хранения данных, поэтому initrd является постоянной корневой фс. В этой статье исследуются оба варианта.

Внутреннее устройство initrd

В образе initrd содержится необходимый минимум исполняемых и системных файлов для осуществления второй стадии загрузки linux. В зависимости от версии linux которую вы используете, различаются методы создания initrd.

Начиная с Fedora Core 3, по умолчанию образ initrd это сжатый cpio архив. Вместо монтирования файла с использованием loop device, нужно использовать программу cpio. Чтобы исследовать содержимое cpio архива, используйте следующую последовательность команд:

Листинг 2. Исследование initrd (FC3 и более поздние версии)

В итоге мы имеем маленькую корневую фс, содержимое которой показано в листинге 3. Маленький, но необходимый набор приложений присутствует в каталоге /bin, включая nash (not a shell, интерпретатор скриптов), insmod для загрузки модулей ядра и lvm (утилита для управления lvm).

Листинг 3. Структура initrd по умолчанию (для FC3)

Интерес в листинге 3 представляет файл init в корне. Это файл, как и в традиционном процессе загрузки linux, запускается когда образ initrd распаковывается в память. Мы разберем этот процесс позже в этой статье.

Утилиты для создания образа initrd

Создание вручную индивидуального образа initrd

Листинг 4. Утилита (mkird) для создания индивидуального образа initrd

Листинг 4. Скрипт mkird для автоматического создания образа

Чтобы создать образ initrd, начнем с создания пустого файла, используя
псевдоустройство /dev/zero (просто поток нулей) в качестве входящего
потока в файл ramdisk.img. В результате получим файл размером 4
мегабайта (4000 блоков по 1ому килобайту). Потом, используя команду
mke2fs, создадим в этом файле файловую систему ext2. После того как файл
отформатирован в ext2, смонтируем его в каталог /mnt/initrd как
устройство loop. В точке монтирования у вас теперь есть директория,
которая отражает ext2 файловую систему файла и там вы уже можете
собирать свой образ initrd.

Следующим шагом является создание необходимых подкаталогов: /bin, /sys,
/dev и /proc. Нужно только необходимое, для обеспечения требуемой
функциональности, например не нужно никаких библиотек (это условие верно
когда все исполняемые файлы находящиеся в образе initrd скомпилированны
статически).

Чтобы такая корневая фс предоставляля необходимый функционал используйте
BusyBox. Это приложение является единым образом для многих утилит,
которые обычно используюся в linux системах (такие как ash, awk, sed,
insmod etc.) . Приемущество BusyBox в том что он, включая в себя
функциональность многих необходимых утилит, имеет куда меньший размер.
Это идельный выход для встраиваемых систем. Скопируйте BusyBox в каталог
/bin в корневой файловой системы вашего образа initrd. Создайте
необходимые символические ссылки (на те же ash, awk, sed и т.д.) в
каталоге /bin на BusyBox. BusyBox выясняет какая утилита была запущена и
предоставляет необходимые функции. Небольшое количество ссылок создаётся
в этом каталоге чтобы заработал init скрипт (ссылки эти указывают опять
же на BusyBox).

Следующий шаг - это создание необходимых файлов устройст. Я копирую их
прямо из каталога /dev со своей рабочей системы используя опцию -a (для
cp) чтобы сохранить атрибуты файлов.

В итоге мы получаем готовую корневую фс. Образ размонтируется и
сжимается с помощью gzip. Результирующий файл (ramdisk.img.gz)
копируется в каталог /boot для того чтобы можно было загрузить GRUB'ом
или lilo.

Чтобы создать начальный RAM диск, можно просто запустить mkinitrd и он
автоматически соберет образ и скопирует его в каталог /boot

Дистрибутив linux в initrd Был разработан интересный open
source проект, в котором весь дистрибутив linux помещался в образ
initrd, называется он MiniMax. Он занимает 32 мегабайта , включает в
себя BusyBox и uClibc для меньшего размера. Несмотря на маленький
размер, это дистрибутив на основе ядра 2.6 и несет в себе довольно
большое количество полезных утилит.

Альтернатива файловой системе ext2 Ext2 это стандарт
де-факто для linux, но если альтернативы, которые позволяют уменьшить
размер итогового образа initrd. К примеру romfs (файловая система ROM),
cramfs (сжатая файловая система ROM) и squashfs (сильно сжатая файловая
система только для чтения). Если вам нужно что то писать на фс, ext2
вполне для этого подходит. Напоследок есть еще e2compr - это расширения
для драйвера ext2, которое поддерживает сжатие.

Тестирование индивидуального образа initrd

Итак, ваш новый образ initrd лежит в каталоге /boot, следующим шагом
нужно оттестировать его с вашим ядром. Перезагрузите систему и когда
появится приглашение GRUB, нажмите клавишу C, это переведет GRUB в
режим командной строки. Вы можете взаимодествовать с GRUB'ом например
чтобы передать ядру специфические параметры или загрузить свой образ
initrd. Команда kernel определить какое ядро загружать, а команда
initrd выбрать образ initrd. Когда эти параметры определны, наберите
boot и загрузчик загрузит указанные ядро и initrd.

Листинг 5. Ручная загрузка ядра и initrd используя GRUB

grub> kernel /bzImage-2.6.1
[Linux-bzImage, setup=0x1400, size=0x29672e]

grub> initrd /ramdisk.img.gz
[Linux-initrd @ 0x5f2a000, 0xb5108 bytes]

Uncompressing Linux. OK, booting the kernel.

После того как ядро запущенно, оно проверяет доступен ли initrd
(подробнее об этом позже) и образ initrd доступе, ядро загружает его в
память и монтирует как корневую фс. Вы можете посмотреть на процесс
загрузки в листинге 6. Когда initrd загружен, становится доступна
оболочка ash. В этом примере я исследую корневую фс и опрашиваю
виртуальную файловую систему /proc. Я так же демонстрирую возможность
писать на файловую создавая файл командой touch. Обратите внимание на то
что первый созданный процесс это linuxrc (обычно init).

Листинг 6. Загрузка ядра linux с простым initrd

.
md: Autodetecting RAID arrays
md: autorun
md: . autorun DONE.
RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 file system).
Freeing unused kernel memory: 208k freed
/ $ ls
bin etc linuxrc proc sys
dev lib lost+found sbin
/ $ cat /proc/1/cmdline
/bin/ash/linuxrc
/ $ cd bin
/bin $ ls
ash cat echo mount sysctl
busybox dmesg ls ps
/bin $ touch zfile
/bin $ ls
ash cat echo mount sysctl
busybox dmesg ls ps zfile

Процесс загрузки с начальным RAM диском

Теперь вы знаете как собрать свой образ initrd, в этой часте астатьи мы
рассмотрим как ядро идентифицирует и монтируется initrd как корневую фс.
Я прошелся через этот процесс останавливаясь на некоторых важных
функциях в цепочке загрузки, объясняя что происходит.

Загрузчик, например GRUB, идентифицирует ядро, которое нужно загрузить и
копирует образ ядра и initrd в память. Вы можете найти описание всех
необходимых функций в каталоге /init в дереве исходных кодов ядра.

После того как ядро и initrd распакованы и скопированны в память,
исполняется ядро. В этом месте происходит много разных инициализационных
процедур, в конечном счете вы оказываетесь в функции init/main.c:init()
(поддиректория/файл:функция). Эта функция как раз и представляет собой
подсистему инициализации. Отсюда идет вызов функции
init/do_mounts.c:prepare_namespaces(), которая подготавливает рабочее
пространство (монтирует файловую систему dev, RAID или md устройства и,
в итоге, сам initrd). Загрузка initrd выполняется вызовом
init/do_mounts_initrd.c:initrd_load().

Функция initrd_load() вызывает init/do_mounts_rd.c:rd_load_image()
которая определяет браз RAM диска, чтобы загрузить его в
init/do_mounts_rd.c:identify_ramdisk_image(). Это функция проверяет
"магическое число" образа чтобы определить какая фс в этом образе:
minux, ext2, romfs,cramfs или формат gzip. Возвраящаясь к функции
initrd_load_image, происходит вызов init/do_mounts_rd:crd_load(). Эта
функция выделяет в памяти место под RAM диск и считает контрольную сумму
(CRC), после этого распаковывает и загружает RAM диск в память. Теперь
ваш образ initrd находится в подходящем для монтирования блочном
устройстве.

В конце, вас возвращает в функцию init и происходит вызов
init/main.c:run_init_process. Это происходит в результате вызова execve
чтобы запустился процесс init (в данном случае linuxrc). Linuxrc может
быть как исполняемым файлом, так и скриптом (если для скрипта есть
интерпретатор).

В листинге 7 показана иерархия функций. Не все функции учавствующие в
процессе копирования и монтирования инициализационного RAM диска
показаны здесь, но общее представление об общем процессе здесь дано.

Листинг 7. Иерархия основных функций участвующих в процессе загрузки и
монтирования initrd

init/main.c:init
init/do_mounts.c:prepare_namespace
init/do_mounts_initrd.c:initrd_load
init/do_mounts_rd.c:rd_load_image
init/do_mounts_rd.c:identify_ramdisk_image
init/do_mounts_rd.c:crd_load
lib/inflate.c:gunzip
init/do_mounts.c:mount_root
init/do_mounts.c:mount_block_root
init/do_mounts.c:do_mount_root
fs/namespace.c:sys_mount
init/main.c:run_init_process
execve

Загрузка бездисковых систем

Почти как во встраиваемых системах, локальный диск (флоппи или CD-ROM)
не обязательны чтобы загрузить ядро и корневую фс в RAM. Протокол
динамического назначения адресов или просто DHCP может быть использован
для того чтобы определить такие параметры как IP адресс и маску подсети.
Упрощенный протокол передачи данных (TFTP) может быть использован для
передачи образа ядра и образа initrd на локальную машину. После
передачи, ядро может быть загружено, а initrd смонтирован, так как будто
это загрузка с локальной машины.

Уменьшение размера образа initrd

Когда вы создаёте встраиваемую систему и хотите добится наименьшего
размера от образа initrd, если несколько хитростей чтобы это сделать.
Первый совет - используйте BusyBox (описано в статье). BusyBox включает
в себя несколько мегабайт утилит и сжимает их всего до нескольких сотен
килобайт.

В этом примере BusyBox скомпилирован статически, т.е. ему не нужно для
работы никаких библиотек. Однако, еесли вам нужны стандартные библиотеки
языка C (для дополнительных программ), есть нескольно путей решить эту
проблемму не используя массивный glibc. Первая маленькая библиотека
подходящая для наших целей это uClibc, которая является минимизированной
версией стандартной библиотеки C для систем с ограниченным местом.
Другая библиотека, идеальная с точки зрения занимаемого дискового
пространства это dietlib. Не забывайте что для того чтобы ваши программы
работали с урезанными версиями, эти программы нужно перекомпилировать
используя эти библиотеки, потребуется некоторая дополнительная работа,
но оно того стоит.

Читайте также: