Как получить доступ к / etc / fstab до монтирования root?

21

Я вносил некоторые изменения /etc/fstab, когда мне приходил в голову вопрос о курице и яйце - если он /etc/fstabсодержит инструкции по монтированию файловых систем, включая корневой раздел, то как ОС в первую очередь считывает этот файл?

sashoalm
источник

Ответы:

18

Когда загрузчик вызывает ядро, он передает ему параметр с именем root. Поэтому, как только ядро ​​завершит инициализацию, оно продолжит монтирование указанного корневого раздела /и последующий вызов /sbin/init(если это не было переопределено другими параметрами).

Затем initпроцесс запускает остальную часть системы, загружая все службы, которые определены для запуска на уровне запуска по умолчанию.

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

Вот упрощенный пример моей конфигурации Grub. Важная часть, чтобы ответить на ваш вопрос - от второй до последней строки root=/dev/sda3:

menuentry 'Gentoo GNU/Linux' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-40864544-2d0f-471a-ab67-edd7e4754dae' {
    set root='hd0,msdos1'
    echo    'Loading Linux 3.12.6-gentoo-c2 ...'
    linux   /kernel-3.12.6-gentoo-c2 root=/dev/sda3 ro  
}

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

переигровка
источник
2
Корневой раздел изначально монтируется только для чтения ядром. Затем initпроцесс монтирует объекты в /etc/fstabсоответствии с их параметрами, что обычно означает повторное монтирование корневого раздела для чтения-записи.
Златовласка
1
Также ядро ​​может быть скомпилировано с жестко запрограммированными подпрограммами, которые ищут некоторые специальные файлы на активном разделе, который еще не смонтирован. Загрузчик FreeBSD работает именно так.
Кондыбас
@Kondybas LILO в Linux также жестко запрограммирован для загрузки ядра с фиксированными номерами блоков
phuclv
3

fstabНеобходим вход в , если вы хотите указать некоторые нестандартные параметры монтирования. Тем не менее, в настоящее systemdвремя правильное устройство ядра и fstype в не fstabявляются ненужными. Вы можете заменить корневую запись чем-то вроде:

#UUID=8f74237d-b689-4beb-9d1f-f60b426c9969 /            ext4        rw,relatime,data=ordered    0 1
dummy /             auto        rw,relatime,data=ordered,debug  0 1

и параметры монтирования все еще учитываются systemd.

Вы можете использовать любое плохое имя устройства, например /dev/sdz1, кроме плохого UUID. При неправильном UUID сообщение будет напечатано при загрузке Failed to start Remount Root and Kernel File Systems, но система все равно загрузится .

бассейн
источник