Альтернативные загрузчики [202.3]

Рейтинг: 68.5% · 14 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Альтернативные загрузчики [202.3]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3] (вы здесь)
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 8. Альтернативные загрузчики [202.3]

GRUB 2 стоит почти везде по умолчанию, но он не единственный и не всегда лучший. Когда вам нужно поднять загрузку сотни машин по сети без единого диска, когда хочется минималистичный UEFI-загрузчик без меню на полэкрана, или когда надо собрать загрузочный образ для флешки и CD - в дело идут SYSLINUX, ISOLINUX, PXELINUX и systemd-boot. В этом уроке разберём, чем они отличаются от GRUB, как устроена сетевая загрузка по PXE, как systemd-boot читает UEFI и как руками править записи загрузки через efibootmgr.

Изображение

Как это работает

Семейство Syslinux - это набор маленьких загрузчиков от одного проекта, каждый под свою среду. SYSLINUX грузится с раздела FAT (флешка, дискета), EXTLINUX - с ext2/3/4, btrfs и xfs, ISOLINUX живёт на оптических образах ISO 9660, а PXELINUX скачивается по сети при загрузке по PXE. Конфиг у всех общий по синтаксису: текстовый файл с метками LABEL, строками KERNEL и APPEND. Это намеренно простые загрузчики - они не понимают файловых систем так глубоко, как GRUB, зато весят килобайты и загружаются мгновенно.

PXE (Preboot Execution Environment) - это механизм в прошивке сетевой карты, который позволяет компьютеру стартовать вообще без локального диска. Машина шлёт DHCP-запрос, сервер отдаёт ей IP плюс два важных параметра: адрес TFTP-сервера и имя файла загрузчика. Прошивка качает этот файл по TFTP и передаёт ему управление. Для BIOS-машин файлом будет pxelinux.0, для UEFI - либо syslinux.efi, либо grubx64.efi. Дальше загрузчик по тому же TFTP тянет ядро и initrd, а корневую систему обычно монтирует по NFS или разворачивает из образа.

systemd-boot (старое имя - gummiboot) - это принципиально UEFI-only загрузчик. Он не умеет грузиться с BIOS и не разбирает файловые системы сам: вся его логика опирается на то, что UEFI-прошивка уже умеет читать раздел EFI (ESP, FAT32). systemd-boot просто показывает меню из найденных записей и запускает выбранный EFI-бинарь. Записи - это маленькие текстовые файлы в /boot/loader/entries/, а ядра лежат рядом на ESP. Отсюда его главное достоинство и ограничение: предельная простота при условии чистого UEFI.

Чтобы понять, где живёт UEFI-загрузка, надо знать про NVRAM. UEFI хранит список загрузочных записей прямо в энергонезависимой памяти материнской платы: каждая запись (Boot0000, Boot0001 и так далее) указывает на конкретный EFI-файл на ESP и имеет приоритет в порядке BootOrder. Именно этот список редактирует efibootmgr - он не трогает файлы загрузчика, а правит саму NVRAM.

Команды и примеры

Установка пакетов различается по семействам. Debian/Ubuntu:

Код: Выделить всё

apt install syslinux pxelinux syslinux-common isolinux
apt install systemd-boot   # Ubuntu 24.04 и Debian 13
RHEL/Fedora:

Код: Выделить всё

dnf install syslinux syslinux-tftpboot
dnf install systemd-boot-unsigned   # Fedora 41+
Минимальный конфиг ISOLINUX/SYSLINUX (файл isolinux.cfg или syslinux.cfg). Ключ DEFAULT задаёт метку по умолчанию, TIMEOUT - в десятых долях секунды:

Код: Выделить всё

DEFAULT linux
TIMEOUT 50
PROMPT 1

LABEL linux
    KERNEL /boot/vmlinuz
    APPEND initrd=/boot/initrd.img root=/dev/sda1 ro
Для PXELINUX конфиг лежит на TFTP-сервере в каталоге pxelinux.cfg/ и называется либо default, либо по MAC/IP клиента. Скелет TFTP-дерева:

Код: Выделить всё

/srv/tftp/
  pxelinux.0
  ldlinux.c32
  pxelinux.cfg/default
  vmlinuz
  initrd.img
DHCP-сервер (isc-dhcp-server) должен отдать клиенту имя файла и адрес TFTP:

Код: Выделить всё

next-server 192.168.10.1;
filename "pxelinux.0";
systemd-boot ставится в ESP командой bootctl. Она же копирует загрузчик и создаёт запись в NVRAM:

Код: Выделить всё

bootctl install
bootctl status      # показать версию и список записей
bootctl update      # обновить загрузчик после апдейта systemd
Пример записи /boot/loader/entries/fedora.conf:

Код: Выделить всё

title   Fedora Linux 41
linux   /vmlinuz-6.12.0
initrd  /initramfs-6.12.0.img
options root=UUID=xxxx-xxxx ro quiet
Работа с UEFI-записями через efibootmgr. Без аргументов он печатает текущий список и BootOrder:

Код: Выделить всё

efibootmgr -v
Создать новую запись (диск -d, раздел ESP -p, метка -L, путь к EFI-файлу -l с обратными слешами):

Код: Выделить всё

efibootmgr -c -d /dev/sda -p 1 -L "MyLinux" -l '\EFI\systemd\systemd-bootx64.efi'
Сменить порядок и удалить запись по номеру:

Код: Выделить всё

efibootmgr -o 0003,0000,0002
efibootmgr -b 0005 -B
Частые грабли
  • Забытые модули .c32. Современный Syslinux вынес многое в отдельные файлы (ldlinux.c32, libcom32.c32, menu.c32). Если их нет рядом с pxelinux.0, загрузчик падает с ошибкой Failed to load или просто виснет.
  • Пути в TFTP абсолютны от корня TFTP, а не от корня файловой системы. Лишний или недостающий слеш в filename ломает загрузку молча.
  • systemd-boot не видит ядро на отдельном /boot, который не на ESP. Ядро и initrd должны лежать на том же FAT-разделе, что и загрузчик, либо ESP должен быть смонтирован в /boot.
  • efibootmgr пишет в NVRAM, но требует загруженного модуля efivarfs и системы, реально стартовавшей в UEFI-режиме. В Legacy/BIOS-загрузке команда выдаст ошибку EFI variables are not supported.
  • Обратные слеши в путях efibootmgr. UEFI использует backslash как разделитель, и забыть про это - классика. Берите путь в одинарные кавычки, чтобы shell не съел слеши.
  • Secure Boot и неподписанные бинари. systemd-bootx64.efi и pxelinux под Secure Boot не запустятся без подписи или shim. На RHEL 10 для PXE обычно используют подписанный shim плюс GRUB, а не Syslinux.
  • Блокировка TFTP/DHCP файрволом. nftables по умолчанию режет udp/69 и широковещательный DHCP - открывайте порты явно.
Мини-лаба
  • Шаг 1. На UEFI-стенде выполните efibootmgr -v и запишите текущий BootOrder и номера записей - это точка отката.
  • Шаг 2. Установите systemd-boot: bootctl install, затем проверьте bootctl status.
  • Шаг 3. Создайте запись в /boot/loader/entries/test.conf на текущее ядро (возьмите versionы из uname -r и имена файлов в /boot).
  • Шаг 4. Перезагрузитесь и убедитесь, что меню systemd-boot показывает вашу запись и система грузится.
  • Шаг 5. Поднимите минимальный PXE: установите syslinux/pxelinux, разверните /srv/tftp с pxelinux.0 и .c32-модулями, запустите tftpd.
  • Шаг 6. Настройте dnsmasq или isc-dhcp с next-server и filename, загрузите вторую виртуалку по сети (boot from network в настройках ВМ).
  • Шаг 7. Через efibootmgr -o верните исходный BootOrder и при желании удалите тестовую запись через -B.
Контрольные вопросы
  • Чем PXELINUX отличается от SYSLINUX и EXTLINUX по среде загрузки, и какой файл прошивка качает первым по TFTP в BIOS- и в UEFI-режиме?
  • Какие два параметра DHCP обязательны для PXE-загрузки и за что отвечает каждый?
  • Почему systemd-boot не работает на BIOS-машинах и что он перекладывает на прошивку UEFI?
  • Где физически хранятся UEFI-загрузочные записи и какую часть системы правит efibootmgr?
  • Что означают ключи -c, -d, -p и -l у efibootmgr и почему путь к EFI-файлу пишут с обратными слешами?
  • Почему под Secure Boot SYSLINUX и systemd-bootx64.efi могут не запуститься и как эту проблему решают в RHEL?
👍5 ❤️1 🔥1 😄 🤔
Аватара пользователя
crysta
Сообщения: 1
Зарегистрирован: 18 май 2026, 21:06

Re: Альтернативные загрузчики [202.3]

Сообщение crysta »

А есть смысл городить PXELINUX в 2026, если можно iPXE с HTTP грузить? У меня по TFTP образ на 600 метров тянется минуты три, бесит
👍 ❤️1 🔥1 😄 🤔2
Аватара пользователя
rajgnzq1
Сообщения: 1
Зарегистрирован: 16 май 2026, 19:10

Re: Альтернативные загрузчики [202.3]

Сообщение rajgnzq1 »

Поднял systemd-boot, а оно ядро не видит. Оказалось /boot у меня отдельный ext4, а ESP отдельно смонтирован в /efi. Перемонтировал ESP в /boot - записи сразу подхватились
👍2 ❤️1 🔥 😄 🤔
Ответить
← Предыдущая глава
Восстановление системы [202.2]
Следующая глава →
Работа с файловой системой Linux [203.1]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей