Запуск виртуальной машины RHEL7 в моей домашней лаборатории. /boot отделен от "/".

root@localhost ~# grep part anaconda-ks.cfg -A4
clearpart --none --initlabel
# Disk partitioning information
part pv.251 --fstype="lvmpv" --ondisk=sda --size=12808
part /boot --fstype="xfs" --ondisk=sda --size=512
volgroup rhel --pesize=4096 pv.251
logvol swap  --fstype="swap" --size=512 --name=swap --vgname=rhel
logvol /home  --fstype="xfs" --size=1024 --name=home --vgname=rhel
logvol /  --fstype="xfs" --size=11264 --name=root --vgname=rhel

Я удалил запись "/boot" из /etc /fstab, чтобы посмотреть, что произойдет (я ожидал ошибку об отсутствии grub2 или initramfs). Но то, что происходит, ничто! RHEL7 загрузится и мне будет предложено войти в систему, и я смогу войти в систему. Не могу понять, как загрузились grub2, тогда initramfs и ядро без /boot?

1 ответ1

0

Не могу понять, как загрузились grub2, тогда initramfs и ядро без /boot?

Потому что все эти вещи уже произошли до чтения /etc /fstab.

  1. прошивка загружает GRUB
  2. GRUB загружает ядро & initramfs;
  3. ядро запускает init;
  4. 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, при следующем обновлении будут установлены новые модули, но не само ядро. Поскольку вы не можете смешивать разные версии ядра и модуля, система не будет загружаться правильно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .