Загрузка системы: от BIOS до systemd [101.2]

Рейтинг: 67.6% · 8 голосов
Полный курс LPIC-1 (экзамены 101-500 и 102-500): архитектура, загрузка, пакеты, команды и текст, ФС и права, шелл-скрипты, пользователи, сервисы, сеть, безопасность. Debian и RHEL.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Загрузка системы: от BIOS до systemd [101.2]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-1 и как устроен путь администратора
  2. Железо, устройства и модули ядра [101.1]
  3. Загрузка системы: от BIOS до systemd [101.2] (вы здесь)
  4. systemd, цели и уровни выполнения [101.3]
  5. План разметки диска и swap [102.1]
  6. Загрузчик GRUB 2 [102.2]
  7. Разделяемые библиотеки [102.3]
  8. Управление пакетами в Debian: dpkg и apt [102.4]
  9. Управление пакетами RPM, DNF и Zypper [102.5]
  10. Linux как гость виртуализации [102.6]
  11. Командная строка Bash [103.1]
  12. Обработка текста фильтрами [103.2]
  13. Базовое управление файлами [103.3]
  14. Потоки, конвейеры и перенаправление [103.4]
  15. Процессы: создание, мониторинг, сигналы [103.5]
  16. Приоритеты выполнения процессов [103.6]
  17. Регулярные выражения [103.7]
  18. Редактор vi и vim [103.8]
  19. Разделы и создание файловых систем [104.1]
  20. Целостность и обслуживание ФС [104.2]
  21. Монтирование файловых систем [104.3]
  22. Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты
  23. Жёсткие и символические ссылки
  24. FHS и поиск файлов в системе [104.7]
  25. Окружение и кастомизация оболочки [105.1]
  26. Урок 25. Написание простых bash-скриптов [105.2]
  27. Графика, рабочие столы и доступность
  28. Учётные записи пользователей и групп
  29. Автоматизация задач: cron, at, таймеры [107.2]
  30. Локализация и интернационализация [107.3]
  31. Системное время и синхронизация [108.1]
  32. Системное логирование [108.2]
  33. Основы почтового агента (MTA) [108.3]
  34. Печать и CUPS [108.4]
  35. Основы интернет-протоколов [109.1]
  36. Постоянная конфигурация сети [109.2]
  37. Диагностика сети [109.3]
  38. DNS на стороне клиента [109.4]
  39. Задачи администрирования безопасности [110.1]
  40. Настройка безопасности хоста [110.2]
  41. Шифрование данных: SSH и GnuPG [110.3]
Урок 2. Загрузка системы: от BIOS до systemd [101.2]

Машина не загружается одним прыжком. От нажатия кнопки до приглашения в терминале проходит цепочка из четырёх-пяти звеньев, и каждое передаёт управление следующему. Когда сервер не поднялся, админ обязан знать, на каком именно звене он застрял: прошивка не нашла диск, загрузчик не показал меню, ядро запаниковало, initramfs не смонтировал корень или systemd завис на какой-то службе. Этот урок собирает всю цепочку в одну картину и учит читать её следы в журналах.

Изображение

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

Первой включается прошивка материнской платы. Старый вариант - BIOS: он умеет читать только первые 512 байт диска (MBR), куда влезает крошечный кусок загрузчика, и грузится в режиме совместимости с процессором 1981 года. Современный вариант - UEFI: это полноценная мини-ОС в прошивке, она понимает файловую систему FAT на отдельном разделе ESP (EFI System Partition, обычно смонтирован в /boot/efi), читает оттуда нормальные файлы загрузчиков с расширением .efi и хранит список вариантов загрузки в энергонезависимой памяти NVRAM. На железе 2026 года UEFI - норма, BIOS остался в виртуалках и совсем старых машинах. Сопутствующая UEFI вещь - Secure Boot: прошивка проверяет цифровую подпись загрузчика и ядра, чтобы между ними не вклинился руткит.

Дальше прошивка запускает загрузчик. В мире Linux это почти всегда GRUB 2. Его задача - показать меню, найти образ ядра и initramfs в /boot, загрузить их в память и прыгнуть в ядро, передав ему строку параметров. GRUB - не единственный: на UEFI всё чаще встречается systemd-boot, более простой и быстрый.

Ядро распаковывается, поднимает свои подсистемы, находит процессоры и память. Но вот беда: драйвер вашего дискового контроллера или модуль для LVM, RAID, LUKS-шифрования может лежать на том самом диске, который ещё не смонтирован. Эту курицу-и-яйцо решает initramfs (initrd) - маленький временный корень-в-памяти, архив, который GRUB загрузил рядом с ядром. В нём есть базовые модули и скрипты ровно для одной цели: смонтировать настоящий корневой раздел. Сделав это, initramfs выполняет pivot_root на реальный корень и запускает первый процесс - /sbin/init, который на современных системах является symlink на systemd. С этого момента PID 1 берёт штурвал, активирует цели (targets) и поднимает все службы.

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

Посмотреть строку параметров, с которой реально стартовало текущее ядро:

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

cat /proc/cmdline
# ro root=UUID=... quiet splash
Параметры задаются в /etc/default/grub (переменная GRUB_CMDLINE_LINUX), после правки конфиг GRUB надо пересобрать. Команды различаются по семействам:

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

# Debian/Ubuntu
sudo nano /etc/default/grub
sudo update-grub                 # обёртка над grub-mkconfig
# результат: /boot/grub/grub.cfg

# RHEL/Fedora
sudo nano /etc/default/grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# результат: /boot/grub2/grub.cfg
Полезные параметры ядра, которые задают на лету в меню GRUB (нажать e на пункте): single или 1 - режим одного пользователя; systemd.unit=rescue.target - аварийная цель; init=/bin/bash - голый shell без systemd для восстановления пароля; nomodeset - отключить ранние видеодрайверы при чёрном экране.

Пересборка initramfs нужна после смены драйверов или crypttab:

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

# Debian/Ubuntu (инструмент initramfs-tools)
sudo update-initramfs -u -k all

# RHEL/Fedora (инструмент dracut)
sudo dracut --force
# посмотреть содержимое образа:
lsinitrd /boot/initramfs-$(uname -r).img
Журналы загрузки - два разных источника. dmesg показывает кольцевой буфер сообщений ЯДРА (драйверы, железо, ошибки I/O):

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

dmesg --level=err,warn       # только ошибки и предупреждения
dmesg -T                     # человекочитаемое время
journalctl показывает журнал systemd, включая ядро и все службы:

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

journalctl -b                # сообщения текущей загрузки
journalctl -b -1             # предыдущая загрузка (если журнал persistent)
journalctl -k                # только сообщения ядра (аналог dmesg)
journalctl -p err -b         # только ошибки этой загрузки
systemd-analyze blame        # кто дольше всех стартовал
Частые грабли
  • Перепутать update-grub (Debian) и grub2-mkconfig (RHEL). На RHEL команды update-grub нет, а путь к конфигу - /boot/grub2/, не /boot/grub/.
  • Правят сам grub.cfg руками - и теряют правки при следующем grub-mkconfig. Менять надо /etc/default/grub и шаблоны в /etc/grub.d/, потом пересобирать.
  • journalctl -b -1 пуст, потому что журнал по умолчанию в RAM. Нужен persistent: создать /var/log/journal и выставить Storage=persistent в journald.conf.
  • После kernel panic с надписью "unable to mount root fs" грешат на ядро, а виноват чаще initramfs - забыли пересобрать после смены контроллера, переноса на новое железо или правки LUKS.
  • На RHEL/Fedora параметры ядра по умолчанию живут не только в grub.cfg, а в BLS-записях /boot/loader/entries/*.conf - редактировать их удобнее через grubby, а не руками.
  • Secure Boot молча блокирует неподписанное проприетарное ядро или самосборный модуль (NVIDIA) - чёрный экран без внятной ошибки.
Мини-лаба
  • Выполните cat /proc/cmdline и запишите, с какими параметрами загрузилось ваше ядро. Найдите root= и определите, по UUID или по имени устройства монтируется корень.
  • Откройте /etc/default/grub, добавьте в GRUB_CMDLINE_LINUX параметр заведомо безвредный (например systemd.show_status=1), пересоберите конфиг командой своего дистрибутива и перезагрузитесь.
  • Убедитесь, что параметр приехал: снова cat /proc/cmdline.
  • Сравните вывод dmesg --level=err и journalctl -k -p err -b. Найдите хотя бы одно общее сообщение.
  • Запустите systemd-analyze blame и systemd-analyze critical-chain, найдите самую долгую службу старта.
  • Включите persistent-журнал (mkdir /var/log/journal, перезагрузка) и проверьте, что journalctl -b -1 теперь показывает прошлую загрузку.
Контрольные вопросы
  • Чем UEFI отличается от BIOS в части того, откуда и как читается загрузчик? Что такое ESP и где он обычно смонтирован?
  • Зачем нужен initramfs, если ядро и так умеет монтировать файловые системы? Приведите случай, когда без него корень не смонтируется.
  • Какой процесс получает PID 1 на современной системе и кто его запускает?
  • Чем вывод dmesg отличается от journalctl -b? Какой параметр journalctl покажет только сообщения ядра?
  • Где на Debian и где на RHEL лежит итоговый конфиг GRUB и какой командой он пересобирается в каждом семействе?
  • Какой параметр ядра позволит загрузиться в минимальный shell для сброса забытого пароля root?
👍1 ❤️3 🔥1 😄 🤔
Аватара пользователя
pokemon
Сообщения: 1
Зарегистрирован: 14 май 2026, 06:35

Re: Загрузка системы: от BIOS до systemd [101.2]

Сообщение pokemon »

а если корень на LUKS, пароль для расшифровки спрашивает кто - ядро или уже initramfs? у меня запрос пароля до всякого systemd вылазит
👍 ❤️1 🔥 😄 🤔2
Аватара пользователя
kupa
Сообщения: 1
Зарегистрирован: 11 май 2026, 13:29

Re: Загрузка системы: от BIOS до systemd [101.2]

Сообщение kupa »

сделал update-grub на росе, ругается command not found. оказалось тут grub2-mkconfig, спасибо что в граблях прям это и написано
👍1 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Железо, устройства и модули ядра [101.1]
Следующая глава →
systemd, цели и уровни выполнения [101.3]

Все главы курса «LPIC-1: администратор Linux (101 + 102)»

Поделиться темой: ✈ Telegram VK
Похожие запросы: как создать systemd unit

Вернуться в «LPIC-1: администратор Linux»

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

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