Документация по LinuxLinuxDoc.Ru 🔍

initrd - электронный диск, устанавливаемый во время загрузки системы

НАЗВАНИЕ
initrd - электронный диск, устанавливаемый во время
загрузки системы

ОПИСАНИЕ
Специальный файл /dev/initrd является блочным устройством
только для чтения. Устройство /dev/initrd - это
электронный диск, устанавливаемы во время загрузки системы
до того момента, как запускается ядро. Поэтому ядро может
использовать содержимое файлов блочных устройств /dev/ini-
trd для двухступенчатой загрузки системы.

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

ОПЕРАЦИЯ ЗАГРУЗКИ

С помощью initrd система загружается в следующем порядке:

1. Начальный загрузчик загружает программу ядра и
содержимое /dev/initrd в память компьютера.

2. При запуске ядро "распаковывает" и копирует
содержимое устройства /dev/initrd в устройство
/dev/ram0, а затем освобождает память, используемую
устройством /dev/initrd.

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

4. Если обычная корневая система является и начальной
(например, /dev/ram0), то ядро переходит к последнему
шагу в загрузке.

5. Если запускаемый файл /linuxrc присутствует в
начальной корневой системе, то /linuxrc запускается с
идентификатором пользователя, равным нулю. (Файл /lin-
uxrc должен иметь права доступа к системе, чтобы
осуществить соответствующий запуск. Файл /linuxrc может
быть любым запускаемым файлом, включая скрипт shell.)

6. Если /linuxrc не запущен или /linuxrc прерван, то
устанавливается нормальная корневая файловая система.
(Если работа /linuxrc с файловой системой, установленной
над начальной корневой файловой системой, прерывается,
то поведение ядра становится НЕАДЕКВАТНЫМ. Прочтите
раздел ЗАМЕЧАНИЯ для получения более подробной
информации).

7. Если обычная корневая файловая система имеет каталог
/initrd, то устройство /dev/ram0 переносится из / в
/initrd. Иначе, если каталога /initrd не существует, то
устройство /dev/ram0 удаляется. При переносе из / в
/initrd /dev/ram0 не удаляется и процесс в дальнейшем
работает с /dev/ram0. Если каталога /initrd не
существует в обычной корневой системе и остаются
процессы, работающие с /dev/ram0 (при существовании
/linuxrc), поведение ядра становится НЕПРЕДСКАЗУЕМЫМ.
Прочтите раздел ЗАМЕЧАНИЯ для получения более подробной
информации об этом.

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

ОПЦИИ
Нижеследующии опции начального загрузчика с использованием
initrd влияют на загрузку ядра:

initrd=имяфайла
Указывает файл, который загружается как содержимое
/dev/initrd. Для LOADLIN это опция командной
строки. Для LILO Вам следует использовать эту
команду в файле настроек LILO под названием
/etc/lilo.config. Название файла, указанное в этой
опции, будет образом файловой системы,
заархивированным программой gzip.

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

root=название-устройства
указывает на устройство, используемое как
нормальная корневая файловая система. Для LOADLIN
это опция командной строки. Для LILO это опция,
используемая во время загрузки; она может быть
опцией в файле настроек LILO под названием
/etc/lilo.config. Устройство, указанное в этой
строке, должно устанавливаться при наличии
подходящей корневой файловой системы.

СМЕНА ОБЫЧНОЙ КОРНЕВОЙ СИСТЕМЫ
По умолчанию установки ядра (с параметром rdev или сборка
ядра с этим параметром) или установки в опциях начального
загрузчика используются для обычной корневой файловой
системы. При сборке файловой системы NFS как корневой
надо использовать опции загрузки nfs_root_name и
nfs_root_addrs для настройки NFS. Для получения более
подробной информации по системе NFS, собранной как
корневая, прочтите файл документации о ядре nfsroot.txt.
Дополнительную информацию об установке корневой файловой
системы можно также прочесть в документации о LILO и LOAD-
LIN.

При помощи /linuxrc можно изменить устройство корневой
системы. Для этого необходимо собранное /proc. После
установки /proc /linuxrc меняет корневую файловую систему,
делая записи в файлах: /proc/sys/kernel/real-root-dev,
/proc/sys/kernel/nfs-root-name и /proc/sys/kernel/nfs-
root-addrs. Для смены физического устройства корневой
системы /linuxrc записывает номер нового устройства в
/proc/sys/kernel/real-root-dev. Для смены корневой
системы NFS /linuxrc записывает настройки NFS в файлы:
/proc/sys/kernel/nfs-root-name и /proc/sys/kernel/nfs-
root-addrs ,- и указывает 0xff (например, псевдономер
устройства NFS) в файле /proc/sys/kernel/real-root-dev.
Например, следующая командная строка shell сменит
устройство корневой системы на /dev/hdb1:
echo 0x365 >/proc/sys/kernel/real-root-dev
В случае с NFS нижеследующая строка сменит устройство
корневой системы на каталог NFS /var/nfsroot локального
сервера NFS с IP-адресом 193.8.232.7 (для машины с
IP-адресом 193.8.232.7 и именем 'idefix'):
echo /var/nfsroot >/proc/sys/kernel/nfs-root-name
echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \
>/proc/sys/kernel/nfs-root-addrs
echo 255 >/proc/sys/kernel/real-root-dev

ИСПОЛЬЗОВАНИЕ
Главной причиной использования initrd была возможность
настраивать модули ядра при установке системы.

Далее приводятся этапы установки:

1. Программа-загрузчик устанавливается с дискеты или с
любого другого носителя вместе с минимальным ядром
(например, поддержка для /dev/ram, /dev/initrd и
файловая система ext2) загружает /dev/initrd со сжатой
начальной файловой системой.

2. Скрипт /linuxrc определяет: что необходимо для сборки
корневой файловой системы (какой тип устройства,
драйверы устройства и т.д.), носители (например, CD-ROM,
сеть и т.д.). Это может быть сделано путем опроса
пользователя, методом автопробации или используя оба
подхода.

3. Скрипт /linuxrc загружает необходимые модули из
начальной файловой системы.

4. Далее /linuxrc создает корневую файловую систему. (На
этой ступени она еще не является рабочей).

5. Скрипт /linuxrc устанавливает /proc/sys/kernel/real-
root-dev, разбирает /proc, загрузочную корневую файловую
систему и любую файловую систему, которую он собрал, и
завершает свою работу.

6. Ядро устанавливает рабочую корневую файловую систему.

7. Когда файловая система установлена и функционирует,
можно установить начальный загрузчик.

8. Начальный загрузчик настроен на установку в /dev/ini-
trd, файловую систему с набором модулей для сборки
системы. (Устройство /dev/ram0 может быть изменено,
затем отсоединено, а образ может быть скопирован из
устройства в файл).

9. Теперь система может быть загружена.

Основной ролью /dev/initrd в вышеописанном процессе
является использование данных настройки во время работы
загрузочной корневой файловой системы без требования
полного ядра или его сборки.

Второй вариант используется, главным образом, если Linux
работает в системах с различной конфигурацией и в сети,
администрируемой одним человеком. В таких случаях удобно
использовать одно ядро и минимальное количество
специфического программного обеспечения. Создайте общий
файл со всеми необходимыми модулями, тогда будут
различаться только скрипт /linuxrc или скрипт, запускаемый
/linuxrc.

Такая информация, как местонахождение раздела с корневой
файловой системой, не нужна во время загрузки; система,
загружаемая с /dev/initrd, может провести опрос
пользователя и/или делать определения автоматически.

Также дистрибутивы Linux СD-ROM могут использовать initrd
для упрощенной установки системы с помощью CD-ROM.
Дистрибутив может использовать LOADLIN для прямой загрузки
/dev/initrd с CD-ROM без каких-либо дискет. Дистрибутив
также может использовать загрузочную дискету LILO и затем
загрузить больший электронный диск при помощи /dev/initrd
с CD-ROM.

КОНФИГУРАЦИЯ
/dev/initrd - это блочное устройство только для чтения с
основным номером 1 и второстепенным номером 250. Обычно
права на /dev/initrd принадлежат root.disk с режимом 0400
(только для чтения пользователем root). Если система
Linux не имеет готового /dev/initrd, он может быть создан
следующими командами:

mknod -m 400 /dev/initrd b 1 250
chown root:disk /dev/initrd

Поддержка для электронного диска и загрузочного
электронного диска (например, CONFIG_BLK_DEV_RAM=y и CON-
FIG_BLK_DEV_INITRD=y ) должна быть собрана вместе с ядром
для того, чтобы использовать /dev/initrd. При
использовании /dev/initrd драйвер электронного диска не
может быть загружен как модуль.

ФАЙЛЫ
/dev/initrd
/dev/ram0
/linuxrc
/initrd

СМ. ТАКЖЕ

1. С существующим ядром любая файловая система, остающаяся
установленной при переносе /dev/ram0 из / в /initrd,
доступна. Записи в /proc/mounts не обновляются.

2. В случае с текущей версией ядра: если каталога /initrd
не существует и если /dev/ram0 используется каким-либо
процессом (или в нем установлена какая-либо файловая
система), то " /dev/ram0 НЕ будет полностью удален. Если
/dev/ram0 НЕполностью отсоединена, то /dev/ram0 останется
в памяти системы.

3. Пользователи /dev/initrd не должны зависеть от
поведения описанного в предыдущих замечаниях. скорее
всего это будет исправлено в последующих версиях ядра
Linux.

ЗАМЕЧАНИЯ
Исходный текст в ядре для initrd был написан Werner Almes-
berger и Hans Lermen . Исходный текст initrd
добавляется в ядро, начиная с версии 1.3.73.
Читать новости Linux в Telegram
Linux - initrd - электронный диск, устанавливаемый во время загрузки системы
Мы в соцсетях ✉