Provided by: manpages-ru_0.98-4_all bug

ИМЯ

       initrd - RAM-диск, инициализируемый загрузчиком

ОПИСАНИЕ

       Специальный  файл  /dev/initrd  -  это  блочное  устройство только для чтения.  Устройство
       /dev/initrd - это диск, расположенный в оперативной памяти, который инициализируется (т.е.
       загружается)  загрузчиком  до  запуска  ядра.   Затем  ядро  может использовать содержимое
       блочного устройства /dev/initrd для двухфазовой загрузки системы.

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

ДЕЙСТВИЯ ПРИ ЗАГРУЗКЕ

       При загрузке с initrd, система загружается следующим образом:

         1. Загрузчик загружает ядро и содержимое /dev/initrd в память.

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

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

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

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

         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.   Имя  файла, определяемое этой
              опцией, обычно является образом файловой системы, сжатым программoй 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.
       За   дополнительной  информацией  по  NSF-монтируемой  корневой  ФС  обращайтесь  к  файлу
       документации к ядру nfsroot.txt.  Также дополнительная информация по  установкам  корневой
       файловой системы содержится в документации к LILO и LOADLIN.

       Кроме  того,  /linuxrc  может  сменить  нормальное  корневое  устройство.  Для того, чтобы
       /linuxrc  сменил  это  устройство,  должен  быть  подмонтирован  каталог   /proc.    После
       монтирования /proc, /linuxrc сменяет нормальное корневое устройство, записывая установки в
       файлы    proc    /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.   Для  корневой  файловой  системы NSF корневое устройство
       меняется, если /linuxrc записывает установки NSF в файлы /proc/sys/kernel/nfs-root-name  и
       /proc/sys/kernel/nfs-root-addrs,    а    затем    записывает    0xff    (например,   номер
       псевдо-NFS-устройства) в файл /proc/sys/kernel/real-root-dev.   Так,  например,  следующие
       команды изменят нормальное корневое устройство на /dev/hdb1:
               echo 0x365 >/proc/sys/kernel/real-root-dev
       В  качестве  примера  для NSF, следующие команды изменят нормальное корневое устройство на
       каталог NSF /var/nfsroot на локальном сетевом NSF-сервере  с  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 была потребность в modular (***) конфигурации ядра во
       время инсталляции системы.

       Возможный сценарий инсталляции системы - следующий:

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

         2.  Исполняемый  файл  /linuxrc  определяет,  (1)  что  необходимо,  чтобы  смонтировать
         нормальную  корневую файловую систему (т.е., тип устройства, драйвера, файловую систему)
         и (2) носитель дистрибутива (например, CD-ROM, сеть, лента, ...). Для этого  может  быть
         задан вопрос пользователю, или запущена авто-проверка или использован гибридный подход.

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

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

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

         6. Затем ядро монтирует нормальную корневую файловую систему.

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

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

         9.  Система  теперь  может  загружаться,  и  в процессе инсталляции могут осуществляться
         дополнительные действия.

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

       Второй сценарий предназначен для установки Linux  на  системы  с  различной  конфигурацией
       оборудования  в  одной  административной  сети.   В  таких  случаях  может быть желательно
       использовать лишь небольшой набор ядер (в идеале  -  одно)  и  сделать  специфическую  для
       конкретной системы часть данных о конфигурации как можно меньшей по объему.  В этом случае
       создайте общий файл со всеми необходимыми модулями.  После этого, только файл /linuxrc или
       файл, запускаемый /linuxrc будет разным для разных конфигураций.

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

       И наконец, дистрибутивы Linux на CD-ROM могут использовать initrd для легкой инсталляции с
       CD-ROM.   Дистрибутив может использовать LOADLIN для непосредственной загрузки /dev/initrd
       с CD-ROM без необходимости в дискетах.  Дистрибутив также может  использовать  загрузочную
       дискету LILO и затем загрузить больший ram-диск с помощью /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
       Также  поддержка  RAM-диска  и  начального  RAM-диска  (например,  CONFIG_BLK_DEV_RAM=y  и
       CONFIG_BLK_DEV_INITRD=y  )  должна  быть  обеспечена соответствующими установками на этапе
       компиляции ядра, чтобы оно могло использовать /dev/initrd.  При использовании  /dev/initrd
       драйвер RAM-диска не может быть загружен как модуль.

ФАЙЛЫ

       /dev/initrd
       /dev/ram0
       /linuxrc
       /initrd

СМ. ТАКЖЕ

       chown(1),  mknod(1), /dev/ram(4), freeramdisk(8), rdev(8), Файл документации initrd.txt из
       пакета исходных  текстов  ядра,  документацию  LILO,  документацию  LOADLIN,  документацию
       SYSLINUX.

ПРИМЕЧАНИЯ

       1.  В текущем ядре все файловые системы, которые остаются смонтированными, когда /dev/ram0
       перемещается из / в /initrd, остаются доступными.  Между  тем,  элементы  /proc/mounts  не
       обновляются.

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

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

АВТОР

       Код  ядра  для  устройства  initrd был написан Werner Almesberger <almesber@lrc.epfl.ch> и
       Hans Lermen <lermen@elserv.ffm.fgan.de>.  Код для initrd был  добавлен  в  базовую  версию
       ядра Linux в версии разработки 1.3.73.