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