Jump to content

Начальный виртуальный диск

(Перенаправлено с Initrd )

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

Обоснование

[ редактировать ]

Многие дистрибутивы Linux поставляются с одним общим образом ядра Linux , который разработчики дистрибутива создают специально для загрузки на широком спектре оборудования. Драйверы устройств для этого общего образа ядра включены в качестве загружаемых модулей ядра , поскольку статическая компиляция множества драйверов в одно ядро ​​приводит к тому, что образ ядра становится намного больше, возможно, слишком большим для загрузки на компьютерах с ограниченной памятью или, в некоторых случаях, приводит к загрузке. сбои времени или другие проблемы из-за поиска несуществующего или конфликтующего оборудования. Этот подход со статической компиляцией ядра также оставляет в памяти ядра модули, которые больше не используются или не нужны, и поднимает проблему обнаружения и загрузки модулей, необходимых для монтирования корневой файловой системы во время загрузки, или, если уж на то пошло, определения того, где и что корневая файловая система. [1]

Еще больше усложняет ситуацию то, что корневая файловая система может находиться на томе программного RAID , LVM , NFS (на бездисковых рабочих станциях) или в зашифрованном разделе. Все это требует специальной подготовки для монтажа. [2]

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

Чтобы избежать необходимости жестко запрограммировать обработку большого количества особых случаев в ядре, начальный этап загрузки с временной корневой файловой системой, которая теперь называется ранним пользовательским пространством используется . Эта корневая файловая система может содержать помощники пользовательского пространства, которые выполняют обнаружение оборудования, загрузку модулей и обнаружение устройств, необходимые для установки настоящей корневой файловой системы. [2]

Выполнение

[ редактировать ]
mkinitcpio, программа для создания initramfs в Arch Linux и связанных с ним дистрибутивах.
dracut, еще одна программа для создания initramfs в некоторых дистрибутивах Linux.

Образ этой исходной корневой файловой системы (вместе с образом ядра) должен храниться где-то, доступном для загрузчика Linux или загрузочной прошивки компьютера. Это может быть сама корневая файловая система, загрузочный образ на оптическом диске , небольшой раздел на локальном диске ( загрузочный раздел , обычно использующий файловые системы ext2 или FAT ) или TFTP- сервер (в системах, которые могут загружаться через Ethernet). ).

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

В схеме initrd образ может быть образом файловой системы (опционально сжатым), который доступен в специальном блочном устройстве ( /dev/ram ), который затем монтируется как исходная корневая файловая система. [3] Драйвер для этой файловой системы должен быть статически скомпилирован в ядро. Многие дистрибутивы изначально использовали сжатые образы файловой системы ext2 , в то время как другие (включая Debian 3.1) использовали cramfs для загрузки систем с ограниченной памятью, поскольку образ cramfs можно смонтировать на месте, не требуя дополнительного места для распаковки. Как только начальная корневая файловая система запущена, ядро ​​выполняет /linuxrc в качестве первого процесса; [4] при выходе ядро ​​предполагает, что настоящая корневая файловая система смонтирована, и выполняет /sbin/init, чтобы начать обычный процесс загрузки в пользовательском пространстве. [3]

В схеме initramfs (доступной начиная с ядра Linux 2.6.13) образ может представлять собой архив cpio (возможно, сжатый). Архив распаковывается ядром в специальный экземпляр tmpfs , который становится исходной корневой файловой системой. Преимущество этой схемы состоит в том, что она не требует компиляции промежуточной файловой системы или блочных драйверов в ядро. [5] Некоторые системы используют пакет dracut для создания образа initramfs. [6] В схеме initramfs ядро ​​выполняет /init как первый процесс, который не должен завершиться. [5] Для некоторых приложений initramfs может использовать утилиту casper для создания среды с возможностью записи, используя Unionfs для наложения уровня персистентности на образ корневой файловой системы, доступный только для чтения. Например, данные оверлея могут храниться на USB-накопителе , а сжатый образ SquashFS, доступный только для чтения, хранящийся на Live CD, действует как корневая файловая система. [7] [8]

В зависимости от того, какие алгоритмы были скомпилированы в него статически, ядро ​​может распаковывать образы initrd/initramfs, сжатые с помощью gzip , bzip2 , LZMA , XZ , LZO , LZ4 , [9] и зстд .

Подготовка к монтированию

[ редактировать ]

Некоторые дистрибутивы Linux, такие как Debian, генерируют индивидуальный образ initrd, который содержит только все, что необходимо для загрузки определенного компьютера, например ATA , SCSI и файловой системы модули ядра . Обычно они включают расположение и тип корневой файловой системы.

Другие дистрибутивы Linux (например, Fedora и Ubuntu ) генерируют более общий образ initrd. Они начинаются только с имени устройства корневой файловой системы (или его UUID ) и должны обнаруживать все остальное во время загрузки. В этом случае программное обеспечение должно выполнить сложный каскад задач для монтирования корневой файловой системы:

  • Необходимо загрузить все драйверы оборудования, от которых зависит процесс загрузки. Обычно модули ядра для обычных устройств хранения упаковываются в initrd, а затем вызывается агент горячего подключения для загрузки модулей, соответствующих обнаруженному оборудованию компьютера.
  • В системах, которые отображают загрузочный экран , видеооборудование должно быть инициализировано, и помощник в пользовательском пространстве начинает рисовать анимацию на дисплее синхронно с процессом загрузки.
  • Если корневая файловая система находится в NFS, она должна затем подключить основной сетевой интерфейс , вызвать DHCP- клиент, с помощью которого она может получить аренду DHCP, извлечь имя общего ресурса NFS и адрес сервера NFS из аренды. и смонтируйте общий ресурс NFS.
  • Если корневая файловая система находится на программном устройстве RAID, невозможно узнать, какие устройства охватывает том RAID; стандартные утилиты MD для сканирования всех доступных блочных устройств и подключения необходимых из них к сети. необходимо вызвать
  • Если корневая файловая система находится на логическом томе , необходимо вызвать утилиты LVM для сканирования и активации группы томов, содержащей ее.
  • Если корневая файловая система находится на зашифрованном блочном устройстве, программному обеспечению необходимо вызвать вспомогательный сценарий, чтобы предложить пользователю ввести парольную фразу и/или вставить аппаратный токен (например, смарт-карту или USB- ключ безопасности ), и затем создайте цель расшифровки с помощью устройства сопоставления устройств .

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

Когда корневая файловая система наконец становится видимой, все задачи обслуживания, которые не могут быть выполнены в смонтированной корневой файловой системе, выполняются, корневая файловая система монтируется только для чтения, а все процессы, которые должны продолжать работать (например, помощник экрана-заставки и его команда FIFO ) переносятся во вновь смонтированную корневую файловую систему.

Окончательную корневую файловую систему нельзя просто смонтировать поверх / , поскольку это сделает сценарии и инструменты в исходной корневой файловой системе недоступными для любых задач окончательной очистки:

  • В initrd новый корень монтируется во временную точку монтирования и поворачивается на место с помощью Pivot_root(8) (который был введен специально для этой цели). При этом исходная корневая файловая система остается в точке монтирования (например, /initrd ), где обычные загрузочные сценарии могут позже отключить его, чтобы освободить память, занимаемую initrd.
  • В initramfs исходную корневую файловую систему невозможно удалить. [10] Вместо этого он просто очищается и поверх него монтируется окончательная корневая файловая система.

Большинство начальных корневых файловых систем реализуют /linuxrc или /init как сценарий оболочки и, таким образом, включает минимальную оболочку (обычно /bin/ash ) вместе с некоторыми важными утилитами пользовательского пространства (обычно набором инструментов BusyBox ). Для дополнительной экономии места оболочка, утилиты и поддерживающие их библиотеки обычно компилируются с включенной оптимизацией пространства (например, с флагом «-Os» gcc ) и компонуются с klibc — минимальной версией библиотеки C , написанной специально для этой цели. . [11]

Другое использование

[ редактировать ]

Установщики для дистрибутивов Linux обычно полностью запускаются из initramfs, поскольку они должны иметь возможность разместить интерфейс установщика и вспомогательные инструменты до того, как будет настроено какое-либо постоянное хранилище. [ нужна ссылка ]

Крошечное ядро ​​Linux [12] и Щенок Linux [13] [ не удалось пройти проверку ] может запускаться полностью из initrd.

Сходства в других операционных системах

[ редактировать ]

Начиная с Windows Vista, [14] Windows может загружаться из файла образа диска WIM , формат которого опубликован; [15] он похож на формат ZIP, за исключением того, что он поддерживает жесткие ссылки, дедуплицированные фрагменты и использует поблочное сжатие. В этом случае весь WIM изначально загружается в ОЗУ, после чего следует инициализация ядра. Далее загруженный WIM доступен как SystemRoot с назначенной буквой диска. Установщик Windows использует это для загрузки из BOOT.WIM, а затем использует INSTALL.WIM в качестве коллекции файлов Windows, которые необходимо установить.

Кроме того, среда предустановки Windows (Windows PE) использует то же самое, являясь основой для версий с отдельной загрузкой некоторых антивирусов и программного обеспечения для резервного копирования/аварийного восстановления.

Также можно установить Windows так, чтобы она всегда загружалась из файла WIM или VHD, размещенного на физическом диске. Однако это используется редко, поскольку загрузчик Windows способен сам загружать файлы .sys для модулей ядра во время загрузки, а для этой задачи в Linux требуется initrd.

См. также

[ редактировать ]
  1. ^ Альмесбергер, Вернер (2000), «Загрузка Linux: история и будущее» , Труды Оттавского симпозиума по Linux , заархивировано из оригинала 24 июля 2008 г.
  2. ^ Jump up to: а б Лэндли, Роб (15 марта 2005 г.), Представляем initramfs, новую модель начальных RAM-дисков.
  3. ^ Jump up to: а б Альмесбергер, Вернер; Лермен, Ганс (2000). «Использование исходного RAM-диска (initrd)» . Архивировано из оригинала 2 апреля 2015 года . Проверено 14 марта 2015 г.
  4. ^ «linux/do_mounts_initrd.c по адресу 4f671fe2f9523a1ea206f63fe60a7c7b3a56d5c7 · torvalds/linux · GitHub» . Гитхаб .
  5. ^ Jump up to: а б Лэндли, Роб (17 октября 2005 г.). «Документация ramfs, rootfs и initramfs, дубль 2» . Дерево исходного кода ядра Linux.
  6. ^ Петерсен, Ричард Лиланд (2010). Fedora 13: Администрирование, сеть, безопасность . Аламеда, Калифорния: Surfing Turtle Press. п. 76. ИСБН  978-1-936280-02-5 . Dracut использует параметры ядра, перечисленные в командной строке ядра GRUB, для настройки файловой системы initramfs RAM «на лету», обеспечивая большую гибкость и дополнительно сокращая код файловой системы RAM.
  7. ^ «Страница руководства Ubuntu: casper — инструмент для initramfs-tools для загрузки работающих систем» . manpages.ubuntu.com .
  8. ^ Шон Пауэрс . «Каспер, дружелюбный (и настойчивый) призрак» . Linux-журнал. 2012.
  9. ^ Кёнсик Ли (30 мая 2013 г.). «Сжатие LZ4 и сокращение времени загрузки» (PDF) . event.linuxfoundation.org . п. 18 . Проверено 29 мая 2015 г.
  10. ^ Фиш, Ричард (6 июля 2005 г.). «pivot_root из initramfs вызывает циклическую ссылку в дереве монтирования» . Система отслеживания ошибок ядра Linux . Проверено 28 февраля 2009 г.
  11. ^ Гарзик, Джефф (2 ноября 2002 г.). «Слияние initramfs, часть 1 из N» . Список рассылки ядра Linux .
  12. ^ «Tiny Core Linux — Концепции» . ibiblio.org .
  13. ^ Барри Каулер. «Объявление о выпуске Puppy Linux» . ibiblio.org .
  14. ^ «Формат файлов изображений Windows (WIM)» . microsoft.com . Майкрософт.
  15. ^ «Загрузите формат файлов изображений Windows (WIM) из официального центра загрузки Microsoft» . Microsoft.com . Майкрософт.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0113a59f28ddcdb1fda34b1ad83b402f__1714974480
URL1:https://arc.ask3.ru/arc/aa/01/2f/0113a59f28ddcdb1fda34b1ad83b402f.html
Заголовок, (Title) документа по адресу, URL1:
Initial ramdisk - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)