Чи використовує initramfs / etc / fstab?


20

Як я це розумію, initramfs відповідає за завантаження "реальної" кореневої файлової системи.

Тепер є два місця, де ми визначаємо цей корінь. Спочатку ми вносимо запис /etc/fstab. По-друге, ми ставимо пристрій на команди завантаження ядра, наприклад root=/dev/sda1.

Який із initramfs використовує для визначення місця кореневої файлової системи? Якщо він використовує параметр кореневого ядра, чому ми маємо запис /etc/fstab? Другий варіант (він читається /etc/fstab) є досить нелогічним, оскільки /etc/fstabфайл знаходиться на самому кореневому пристрої, який initramfs намагається встановити в першу чергу.

Дуже заплутані речі.

Відповіді:


15

Як ви заявляли, мета initramfs - встановити "справжню" кореневу файлову систему (вона може робити і інші речі, але це звичайне завдання).

Без initramfs ядро, як правило, змонтує розділ як режим лише для читання, а потім передасть управління /sbin/init. Інітрамф просто приймає це завдання від ядра, як правило, коли коренева файлова система не є нормальним розділом (mdraid, lvm, зашифрований тощо).

Тепер, окрім фону в initramfs, ви /etc/fstabперебуваєте у вашій кореневій файловій системі. Таким чином, коли initramfs запускається, цієї кореневої файлової системи немає, і тому вона не може дістатися до fstab (проблема з куркою та яйцями).
Натомість нам потрібно передати параметр у аргументи завантаження ядра для використання initramfs. Зазвичай це щось подібне root=/dev/sdX. Однак це може також зробити щось, щоб автоматично з'ясувати, де знаходиться ваш кореневий пристрій, і таким чином немає жодного параметра. Оскільки це лише програмне забезпечення (як правило, це сценарій), він може дійсно робити все, що завгодно, для монтажу кореневого пристрою.

Тепер, як було сказано раніше, ядро ​​змонтує справжній корінь як лише для читання. Інітрамфи повинні робити саме це. Після того, як initramfs виконано, система продовжує завантажуватися точно так, як ніби взагалі не було initramfs, і /sbin/initзапускається. Потім цей init запускає всі ваші звичайні сценарії завантаження, і одна з цих скриптів - завдання читати /etc/fstab, переключати root на читати-записувати та монтувати всі ваші інші файлові системи.


Отже, ви говорите, що / sbin / init всередині реальної кореневої файлової системи знову перезавантажить корінь, використовуючи параметри в / etc / fstab?
Ахмед Гонім

3
Так. Зазвичай за допомогою простого mount -o remount,rw /. Він не змінить встановлений пристрій, але змінить параметри кріплення. Зі сторінки чоловіка:After this call mount reads fstab (or mtab) and merges these options with options from command line
Патрік

Як ми передаємо параметр в аргументи завантаження ядра, якщо ми використовуємо командний рядок grub2? Моя система з якихось причин не показує меню грубості.
інтуїтована

@intuited Вам слід задати нове запитання. Коментарі не є місцем для питань і запитань
Патрік

lsinitramfs /boot/initrd* | fgrep fstabІ дивно, що initramfs дійсно містить файл fstab, принаймні для мене.
youfu

2

Це може, а може і не. Оскільки Initramfs можна побудувати різними способами (ядро просто завантажує його і запускає, /initщо робить все, що завгодно). Однак використання параметра є більш поширеним, оскільки воно забезпечує більшу гнучкість, тобто, якщо щось зміниться, ви можете просто відредагувати запис завантаження, і все продовжить працювати. З вбудованим твердим корінням це не обов'язково можливо.

Запис fstab все ще може бути потрібен у будь-якому випадку, оскільки він також визначає інші речі, такі як параметри монтажу (деякі з яких можна змінити на ходу) та fsckпорядок. Крім того, навіть якщо це було б зовсім зайвим (і якщо Initramfs впорається з ним, воно може працювати і без нього), я все одно збережу запис просто для повноти.


1

Ви можете вважати / etc / fstab статичним монтажем, це лише спосіб виконання такої задачі, але не єдиний, насправді запустіть командне кріплення, і ви побачите багато файлових систем, яких у fstab не вистачає. Служба таких udev та udisk керує великою частиною "автоматичного" ігнорування файлу / etc / fstab ...

Отже, якщо щось встановлено або не часто, це не має нічого спільного з / etc / fstab.

initramfs - це лише тимчасові кореневі файли, які використовуються під час завантаження, доки не встановлено "справжні" корені, тому чому initramfs повинен бути в / etc / fstab?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.