Как вы заявили, цель 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 на чтение-запись и монтировать все остальные ваши файловые системы.
mount -o remount,rw /
. Это не изменит подключенное устройство, но изменит параметры на монтировании. Со страницы руководства:After this call mount reads fstab (or mtab) and merges these options with options from command line
lsinitramfs /boot/initrd* | fgrep fstab
и удивительно, initramfs действительно содержит файл fstab, по крайней мере для меня.Может или не может. Поскольку Initramfs могут быть созданы различными способами (ядро просто загружает его и запускает,
/init
что угодно). Тем не менее, использование параметра является более распространенным, поскольку он обеспечивает большую гибкость - то есть, если что-то меняется, вы можете просто отредактировать загрузочную запись и все будет работать. Со встроенным жестко закодированным рутом это не обязательно будет возможно.Запись fstab все еще может потребоваться в любом случае, так как она также определяет другие вещи, такие как параметры монтирования (некоторые из которых могут быть изменены на ходу) и
fsck
порядок. Кроме того, даже если бы это было полностью излишним (и если Initramfs справится с этим, оно может работать без него), я бы все равно оставил запись там просто ради полноты.источник
Вы можете рассматривать / etc / fstab как статическое монтирование, это только способ выполнения такой задачи, но не единственный, на самом деле, запуск команды mount, и вы видите множество файловых систем, отсутствующих в fstab. Служба такого udev и udisk управляет большей частью «автомонтирования», игнорируя файл / etc / fstab ...
Так что, если что-то монтируется или не часто, это не имеет ничего общего с / etc / fstab.
initramfs - это только временные rootfs, используемые во время процесса загрузки до тех пор, пока не смонтированы «истинные» rootfs, так почему же initramfs должен быть в / etc / fstab?
источник