← Назад к вопросам

С чего начинается загрузка ОС

1.7 Middle🔥 121 комментариев
#Linux и администрирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Секвенирование загрузки операционной системы

Загрузка ОС — это многоэтапный процесс инициализации аппаратного и программного обеспечения, который начинается с включения питания и завершается готовностью к выполнению пользовательских задач. Он представляет собой строгую цепочку событий, где каждый следующий этап загружается и контролируется предыдущим. Для современных компьютеров с BIOS/UEFI и использованием GRUB в качестве загрузчика процесс выглядит следующим образом.

Этап 0: Аппаратная инициализация (POST)

При подаче питания центральный процессор (CPU) переходит в заданное начальное состояние и выполняет код из микропрограммы (firmware), записанной в ROM (Read-Only Memory) или UEFI NVRAM. Этот этап включает:

  • POST (Power-On Self-Test): Базовая диагностика критических компонентов (процессор, память, накопители).
  • Инициализация оборудования: Настройка чипсета, видеокарты, обнаружение периферии.
  • Поиск загрузочного устройства: Согласно порядку загрузки, заданному в прошивке, происходит поиск загрузочной записи на устройствах (HDD, SSD, USB, сеть).

Этап 1: Загрузчик уровня 1 (Bootloader Stage 1)

После обнаружения загрузочного диска BIOS или UEFI загружает в оперативную память и передает управление первому сектору этого диска.

  • На диске с MBR (Master Boot Record) это первый физический сектор (512 байт), который содержит:
    *   **Первичный загрузчик (первого этапа)** — небольшая программа (до 446 байт).
    *   **Таблицу разделов (Partition Table)**.
    *   **Сигнатуру (0x55AA)** в конце сектора.
  • На диске с GPT (GUID Partition Table) в контексте UEFI этот этап часто пропускается, так как UEFI напрямую загружает исполняемый файл загрузчика из ESP (EFI System Partition).

Код первого этапа крайне ограничен в размере, и его единственная задача — найти и загрузить более сложный загрузчик второго этапа, расположенный где-либо еще на диске.

Этап 2: Загрузчик уровня 2 (Bootloader Stage 2)

Управление переходит к более функциональному загрузчику, например GRUB 2 (GRand Unified Bootloader). Он уже может:

  • Читать файловые системы (например, ext4, fat32 для ESP).
  • Отображать меню выбора ядра и дополнительных параметров.
  • Загружать выбранное ядро ОС (vmlinuz) и initial RAM-диск (initramfs/initrd) в память.

Initramfs — это временная корневая файловая система в памяти, содержащая драйверы и утилиты, необходимые для монтирования реального корневого раздела (например, драйверы для RAID, LVM, зашифрованных разделов).

Примерная структура файлов GRUB 2 в /boot/grub/:

/boot/grub/
├── grub.cfg          # Основной конфигурационный файл (генерируется автоматически)
├── fonts/            # Шрифты для отображения меню
└── i386-pc/          # Модули для загрузки (например, для чтения файловых систем)

Этап 3: Загрузка ядра ОС (Kernel Boot)

Загрузчик инициирует переход в защищенный режим (для x86) и передает управление ядру Linux, предварительно распакованному в память. Ядро выполняет:

  1. Инициализацию оборудования: Детектирует процессоры, настраивает менеджер памяти, инициализирует драйверы устройств из initramfs.
  2. Монтирование корневой файловой системы (rootfs): После загрузки необходимых драйверов ядро перемонтирует (pivot_root) с временного initramfs на настоящий корневой раздел, указанный в параметре ядра root=.
  3. Запуск процесса init/systemd: Ядро запускает первый пользовательский процесс с PID 1. В современных системах это, как правило, systemd.

Этап 4: Инициализация пространства пользователя (Userland)

Теперь управление переходит к systemd (или другому init). Его задачи:

  • Параллельный запуск служб (units): Монтирование файловых систем (local-fs.target), запуск сетевых служб (network.target), демонов (sshd.service и др.).
  • Запуск целевых уровней (targets): Достижение состояния multi-user.target (многопользовательский режим без графики) или graphical.target (с графической оболочкой).
  • Запуск getty: Активация виртуальных терминалов (tty1-tty6), которые выводят приглашение к логину.

Итоговая последовательность

Таким образом, каноническая цепочка загрузки выглядит так:

  1. POST и инициализация аппаратуры (CPU, чипсет, память).
  2. BIOS/UEFI → Поиск и выполнение кода из MBR или .efi-файла в ESP.
  3. Загрузчик 1-й стадии (MBR) → Загрузка загрузчика 2-й стадии (опционально для UEFI+GPT).
  4. Загрузчик 2-й стадии (GRUB2) → Загрузка vmlinuz и initramfs в RAM, передача управления ядру.
  5. Ядро Linux → Инициализация аппаратуры, монтирование корневого раздела via initramfs.
  6. Systemd (PID 1) → Параллельный запуск всех системных сервисов и целевых уровней.
  7. Экран входа в систему (login prompt) → Готовность к аутентификации пользователя.

Понимание этой последовательности критически важно для DevOps-инженера, так как позволяет эффективно диагностировать сбои на любом этапе (например, ошибки GRUB rescue, проблемы с монтированием rootfs, падения служб systemd) и настраивать параметры загрузки для конкретных инфраструктурных задач.

С чего начинается загрузка ОС | PrepBro