Provided by: manpages-ru_4.23.1-1_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 (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику по его адресу электронной почты или по адресу списка рассылки русских переводчиков.

Linux man-pages 6.8                               2 мая 2024 г.                                        initrd(4)