Как вы заявили, цель initramfs - смонтировать «настоящую» корневую файловую систему (она может делать и другие вещи, но это обычная задача).
Без initramfs ядро обычно монтирует раздел как доступный только для чтения, а затем передает управление /sbin/init
. Initramfs просто берет на себя эту задачу из ядра, обычно когда корневая файловая система не является нормальным разделом (mdraid, lvm, зашифрованный и т. Д.).
Теперь, кроме фона для initramfs, вы находитесь /etc/fstab
в корневой файловой системе. Таким образом, когда запускается initramfs, этой корневой файловой системы нет, и поэтому он не может добраться до fstab (проблема с курицей и яйцом).
Вместо этого мы должны передать параметр в аргументы загрузки ядра для использования initramfs. Обычно это что-то вроде root=/dev/sdX
. Однако он также может что-то сделать, чтобы автоматически выяснить, где находится ваше корневое устройство, и поэтому параметров вообще нет. Так как это просто программное обеспечение (обычно скрипт), оно может действительно делать все, что захочет для монтирования корневого устройства.
Теперь, как указывалось ранее, ядро будет монтировать настоящий root только для чтения. Initramfs должен делать именно это. После завершения initramfs система продолжает загрузку точно так же, как если бы не было initramfs, и /sbin/init
запускается. Затем этот init запускает все ваши обычные загрузочные сценарии, и задача одного из этих сценариев - читать /etc/fstab
, переключать root на чтение-запись и монтировать все остальные ваши файловые системы.