Загрузка

1. BIOS (Basic Input/Output System)

BIOS — это микропрограмма, хранящаяся на чипе материнской платы (во FLASH-памяти). При включении питания процессор выполняет первую инструкцию по адресу 0xFFFFFFF0 (так называемый reset vector), который указывает на код BIOS.

Основные функции BIOS:

  • POST (Power-On Self-Test): Проверка целостности самой микропрограммы, инициализация критически важного оборудования (процессор, память, чипсет), запуск встроенного ПО других устройств (видеокарта, сетевая карта).
  • Сигналы POST: Если на этапе самотестирования возникает ошибка, BIOS подаёт сигналы через системный динамик (например, 1 короткий — успех, длинные и короткие комбинации — различные ошибки).

2. Загрузчик (Bootloader)

Задача загрузчика — найти, загрузить в оперативную память и передать управление ядру операционной системы.

Схемы загрузки

  • BIOS + MBR (Master Boot Record):

    • MBR — это первые 512 байт на диске. Содержит:
      • Bootstrap Code (446 байт) — первичный код загрузчика.
      • Partition Table (64 байта) — таблица разделов (до 4 первичных).
      • Signature (2 байта) — сигнатура 55 AA.
    • Ограничение MBR: работа с дисками до 2 ТБ.
    • Процесс: BIOS загружает MBR, код из MBR находит активный раздел и загружает следующий этап загрузчика (например, GRUB2), который уже находится в этом разделе.
  • UEFI + GPT (GUID Partition Table):

    • UEFI — современный стандарт, пришедший на смену BIOS. Умеет читать файловые системы (например, FAT32) и поддерживает безопасную загрузку (Secure Boot).
    • GPT — современная схема разделов, не имеющая ограничений MBR.
    • Процесс: UEFI напрямую обращается к специальному FAT32-разделу (EFI System Partition), где хранятся файлы загрузчиков с расширением .efi (например, grubx64.efi). Загрузочные записи хранятся в NVRAM.

Полезные команды:

  • Просмотр UEFI-записей: efibootmgr -v
  • Просмотр разделов: fdisk -l

GRUB2 (Grand Unified Bootloader 2)

Самый распространённый загрузчик в Linux.

  • Позволяет выбирать ядро или ОС для загрузки.
  • Загружает необходимые модули для поддержки оборудования и файловых систем.
  • Основной конфигурационный файл: /boot/grub/grub.cfg (генерируется автоматически).

3. Ядро (Kernel)

Ядро Linux — это сжатый исполняемый файл (обычно vmlinuz-<версия> в каталоге /boot).

  1. GRUB загружает ядро в оперативную память.
  2. Ядро распаковывается.
  3. Ядро запускается с параметрами командной строки (можно посмотреть в /proc/cmdline).
  4. Ядро монтирует в памяти начальную RAM-диск (initramfs).

Initramfs (Initial RAM File System)

Это временная корневая файловая система в памяти.

  • Содержит необходимые на раннем этапе загрузки драйверы, модули ядра, микрокод и скрипты.
  • Его главная задача — смонтировать реальную корневую файловую систему (/), после чего управление передаётся процессу init.

4. Init и systemd

Процесс с PID 1 (init или systemd) является родителем для всех остальных процессов в системе.

Его основные задачи:

  • Управление порядком запуска служб (демонов).
  • Монтирование файловых систем (согласно /etc/fstab).
  • Управление всеми запущенными процессами.

systemd — современная и самая распространённая реализация init.

  • Использует концепцию юнитов (units) (сервисы, монтирования, сокеты и т.д.).
  • Позволяет просматривать зависимости: systemctl list-dependencies default.target
  • Имеет множество утилит для управления системой (systemctl, journalctl и др.).