Как Linux или Unix «/» монтируется во время загрузки?

Ответ Дмитрия Григорьева выше правильный. В качестве мнемоники, вот почему мы обычно видим разрешения, которые "шире слева": ugo. Обычные режимы - 755, 644 и 600. Необычно, скажем, запретить владельцу, но разрешить группе. Я уверен, что никогда не видел ваш 061 в реальном использовании.

4
17.01.2017, 22:45
2 ответа

Во время загрузки системы Unix ядро ​​делает несколько вещей, которые не выполняются при нормальной работе. Одна из этих вещей - смонтировать файловую систему в каталоге / ; это сильно отличается от обычных операций монтирования, поскольку монтирование не запускается системным вызовом mount , а целевой каталог не является существующим каталогом. Другое дело выполнить программу как PID 1 , что отличается от нормальной работы, поскольку это создает процесс без дублирования существующего процесса .

Способ этого «волшебного» монтирования корневого каталога сильно различается в разных вариантах Unix. Ядро выбирает, какое устройство монтировать, на основе параметров конфигурации, которые могут быть указаны различными способами: конфигурация времени компиляции, конфигурация времени выполнения в образе ядра, конфигурация времени выполнения в некотором предопределенном месте памяти, параметры командной строки, ... Чтобы узнать, как это работает на вашем компьютере, вам нужно будет посмотреть документацию вашего варианта Unix и узнать, как настроена ваша машина.

Чтобы дать представление о том, как это работает, вот обзор того, как работает современное ядро ​​Linux. Это не самый простой пример, потому что Linux имеет богатую историю и различные варианты использования.

  • Linux может запускаться со «специальной» файловой системой, прикрепленной к пути / , которая состоит из файлов, хранящихся в ОЗУ. Эта специальная файловая система называется initramfs ; это экземпляр типа файловой системы rootfs.Initramfs заполняется контентом, который либо передается загрузчиком через архитектурно-зависимый протокол, либо скомпилирован непосредственно в образ ядра, который загружается в память загрузчиком.
  • В качестве альтернативы Linux может смонтировать устройство в / , которое является частью ограниченного (но большого) набора типов томов, которые распознаются кодом инициализации в ядре. К таким типам устройств относятся любые файловые системы на общих типах разделов на обычных типах дисков (что-либо, отдаленно напоминающее SCSI, включая ATA, USB и т. Д.), А также RAM-диски и монтирования NFS.
  • В зависимости от того, какой путь был выбран, исходная корневая файловая система позже может быть затенена или заменена другой. Затенение - это то, что происходит с initramfs, и именно так работает большинство настольных и серверных систем (с другой стороны, встроенные системы часто имеют жестко запрограммированную корневую файловую систему). Замена - это то, что происходит с initrd , который представляет собой особый тип RAM-диска. Задача initramfs или initrd - загрузить драйверы, обеспечивающие «настоящую» корневую файловую систему, которая будет использоваться при нормальной работе.
7
27.01.2020, 20:47

Это из руководства bootup (7) на машине Ubuntu:

В загрузке системы задействовано несколько различных компонентов. Сразу после включения системная BIOS выполнит минимальную инициализацию оборудования и передаст управление загрузчику, хранящемуся на постоянном запоминающем устройстве. Затем этот загрузчик вызовет ядро ​​ОС с диска (или из сети). В случае Linux это ядро ​​(необязательно) извлекает и выполняет начальный образ RAM-диска ( initrd ), например, созданный dracut (8) , который выглядит для корневой файловой системы (возможно, используя для этого systemd (1) ).После того, как корневая файловая система найдена и смонтирована, initrd передает управление системному администратору хоста (например, systemd (1) ), хранящемуся в образе ОС. , который затем отвечает за проверку всего оставшегося оборудования, монтирование всех необходимых файловых систем и создание всех настроенных служб.

Вы могли бы найти это, прочитав man boot , не найдя ответа, но увидев «См. Также: bootup (7) » внизу руководства.

Из любопытства я посмотрел руководство для initrd :

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

Вы упомянули «Unix», поэтому я укажу вам документацию для начальной начальной загрузки системы OpenBSD и начальной загрузки второй ступени .

5
27.01.2020, 20:47

Теги

Похожие вопросы