Provided by: manpages-ru_4.21.0-2_all bug

ИМЯ

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

НАСТРОЙКА

       Устройство  /dev/initrd  —  это  блочное  устройство, доступное только для чтения, имеющее
       старший номер 1 и младший номер 250. Обычно, /dev/initrd принадлежит root:disk  с  правами
       0400  (читать  может только root). Если /dev/initrd ещё не создано, то это можно сделать с
       помощью команд:

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

       Для использования /dev/initrd с поддержкой «диска в RAM» и «начального диска в  RAM»  ядро
       Linux  должно  быть  собрано с параметрами CONFIG_BLK_DEV_RAM=y и CONFIG_BLK_DEV_INITRD=y.
       При использовании /dev/initrd драйвер диска в RAM не может загружаться как модуль.

ОПИСАНИЕ

       Специальный файл /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. Имя файла, определяемое этим параметром,
              обычно является образом файловой системы, сжатым программой gzip.

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

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

   Смена нормальной корневой файловой системы
       По  умолчанию, для определения нормальной корневой файловой системы используются настройки
       ядра (например, установленные в файле ядра с помощью rdev(8) или на этапе сборки ядра) или
       параметр  системного  загрузчика. При монтировании нормальной корневой файловой системы по
       NFS для задания настроек NFS нужно  использовать  загрузочные  параметры  nfs_root_name  и
       nfs_root_addrs.  Дополнительную информацию об этом можно найти в файле документации к ядру
       Documentation/filesystems/nfs/nfsroot.txt  (или  Documentation/filesystems/nfsroot.txt   в
       Linux  2.6.33).  Также  дополнительная  информация по настройкам корневой файловой системы
       содержится в документации к LILO и LOADLIN.

       Также сменить нормальное корневое устройство можно из  /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. Для смены корневой файловой системы NFS из /linuxrc  нужно
       записать      настройки      NFS      в     файлы     /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

       В качестве примера c NFS, следующие команды  изменят  нормальное  корневое  устройство  на
       каталог  NFS  /var/nfsroot  на  NFS-сервере  локальной  сети  с IP-адресом 193.8.232.7 для
       системы с IP-адресом 193.8.232.2 и именем '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

       Замечание: Файл /proc/sys/kernel/real-root-dev для смены корневой файловой системы  больше
       не применяется. Современный метод смены корневой файловой системы описан в файле кода ядра
       Linux Documentation/admin-guide/initrd.rst (или Documentation/initrd.txt до Linux 4.10), а
       также в pivot_root(2) и  pivot_root(8).

   Использование
       Основной  причиной  реализации initrd стала потребность в настройках модулей ядра во время
       установки системы.

       Возможный сценарий установки системы:

       (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  в  вышеописанном механизме — в повторном использовании данных
       настройки во время нормальных действий системы без необходимости начального  выбора  ядра,
       загрузки ядра большего размера или пересборки ядра.

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

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

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

ФАЙЛЫ

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

ЗАМЕЧАНИЯ

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

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

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

СМ. ТАКЖЕ

       chown(1), mknod(1), ram(4), freeramdisk(8), rdev(8)

       Файл  Documentation/admin-guide/initrd.rst (или Documentation/initrd.txt до Linux 4.10) из
       дерева  исходного  кода  ядра  Linux,  документация  к  LILO,  документация   к   LOADLIN,
       документация к SYSLINUX.

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства    был    сделан   Azamat   Hackimov
       <azamat.hackimov@gmail.com>,   Dmitriy   S.   Seregin   <dseregin@59.ru>,   Yuri    Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.