Не могу понять, как загрузились grub2, тогда initramfs и ядро без /boot?
Потому что все эти вещи уже произошли до чтения /etc /fstab.
- прошивка загружает GRUB
- GRUB загружает ядро & initramfs;
- ядро запускает init;
- init читает /etc /fstab.
Поэтому ни прошивка, ни GRUB не могут зависеть от /etc /fstab - они используют свои собственные механизмы:
Микропрограммы BIOS всегда запускают загрузочный код с 0-го сектора диска (где находится MBR). В вашем случае этот 0-й сектор будет иметь этап GRUB1.
Микропрограммы UEFI сохраняют конфигурацию загрузки в NVRAM - установщик RHEL настраивает его для поиска grubx64.efi
в "системном разделе EFI", который обнаруживается UUID.
Когда GRUB запущен, он уже знает свой собственный раздел, находит в нем grub.cfg
и ищет ядро Linux на основе определенного там UUID. (Конечно, grub.cfg
часто генерируется на основе содержимого fstab во время установки.)
(GRUB имеет свои собственные драйверы для ext4 и даже LVM. Некоторые загрузчики, например systemd-boot, используют UEFI для доступа к файлам в "системном разделе EFI". Я думаю, что LILO запоминал положение сектора ядра на диске.)
Другая причина в том, что /etc /fstab является конфигурацией, специфичной для ОС, поэтому наличие GRUB напрямую зависит от него, что помешает корректной загрузке операционных систем, в которых нет такого fstab.
(То же самое еще более важно для первого шага (загрузка прошивки GRUB). Подумайте об этом - если для этого потребуется /etc /fstab, как прошивка загрузит Windows?)
Обратите внимание, однако, что /boot
должен быть в fstab - или смонтирован каким-либо другим способом - чтобы обновления ядра работали правильно. Если вы забудете смонтировать /boot, при следующем обновлении будут установлены новые модули, но не само ядро. Поскольку вы не можете смешивать разные версии ядра и модуля, система не будет загружаться правильно.