Процесс загрузки Linux‑системы
Когда мы нажимаем кнопку питания на компьютере, до появления приглашения ввода логина проходит несколько этапов. Каждый из них решает свою задачу: проверка железа, поиск загрузчика, запуск ядра и подготовка пользовательской среды.

1. BIOS/UEFI: старт системы
После включения процессор начинает выполнять код встроенной прошивки материнской платы - BIOS или UEFI.
Прошивка выполняет самотест (POST), инициализирует базовые устройства (оперативная память, контроллеры, видеосистема) и по настройкам выбирает загрузочное устройство: диск, флешку, сетевую карту и т.д.
Основная задача этого этапа - подготовить железо и найти, откуда загружать операционную систему.
2. MBR/GPT: первая стадия загрузки
В начале диска находится область, отвечающая за разметку и начальный код загрузки:
MBR (Master Boot Record) - классическая схема, занимает первые 512 байт диска.
GPT (GUID Partition Table) - современная схема, логически отделяет таблицу разделов и код загрузки.
В этой области лежит крошечный фрагмент кода - первая стадия загрузчика. Его возможности ограничены: он только считывает таблицу разделов и находит место, где расположена "вторая стадия" полноценного загрузчика (обычно на разделе /boot).
3. Загрузчик (GRUB/LILO): выбор и запуск ядра
Дальше управление получает загрузчик второго этапа - чаще всего GRUB.
Он уже умеет работать с файловыми системами и конфигурационными файлами.
Типичные задачи загрузчика:
- Показать меню с вариантами загрузки (разные ядра, режим восстановления, другие ОС).
- По выбору пользователя загрузить в память образ ядра Linux и initramfs (initial RAM filesystem).
- Передать управление загруженному ядру.
В системах с dual‑boot GRUB может не только загружать Linux, но и "передавать эстафету" загрузчику Windows (chainloading).
4. initramfs: временная файловая система в памяти
После загрузки в память ядро получает вместе с ним образ initramfs - это небольшая файловая система, расположенная в оперативной памяти.
Зачем она нужна:
- На "настоящем" корневом разделе (/) лежат драйверы и модули, но чтобы его смонтировать, эти драйверы уже должны быть доступны.
- initramfs решает эту проблему, предоставляя ядру временный root с необходимыми модулями, скриптами и утилитами.
Типичный сценарий работы initramfs:
- Ядро монтирует initramfs как временную корневую файловую систему и запускает из неё скрипт /init.
- /init подгружает модули ядра, настраивает RAID, LVM, расшифровывает шифрованные разделы и ищет постоянный корневой раздел.
- После нахождения и монтирования «настоящего» root выполняется переход (switch_root/pivot_root) на него, и система готова стартовать основную init‑систему.
По сути initramfs - одноразовая мини‑система, которая существует только во время старта и "исчезает" после перехода на основной root.
5. Ядро Linux: инициализация системы
Получив управление от загрузчика, ядро распаковывает себя, настраивает планировщик, управление памятью, систему прерываний и загружает драйверы устройств.
На этом этапе формируется базовый программный "скелет" системы: ядро уже умеет работать с устройствами и файловыми системами и готово запускать пользовательские процессы.
Когда корневой раздел смонтирован, ядро запускает первый пользовательский процесс с PID 1 - init‑систему.
6. Init‑система: запуск служб и пользовательской среды
Init‑система - это первый процесс в пространстве пользователя, который отвечает за запуск всех остальных сервисов и подготовку окружения для пользователя.
В современных дистрибутивах чаще всего используется systemd, но исторически применялись и другие варианты:
SysV init - набор shell‑скриптов и runlevel’ов (0,1,3,5 и т.д.), запускающих службы в определённом порядке.
Upstart - событийная система, где службы стартуют в ответ на события (запуск системы, поднятие сети и т.п.).
systemd - современная система с unit‑файлами, параллельным запуском служб, зависимостями и мощным журналированием.
Основные задачи init‑системы:
- Запустить системные службы (журналы, сеть, диспетчер входа, SSH, cron и др.).
- Смонтировать дополнительные файловые системы.
- Запустить графический сервер и рабочее окружение пользователя либо выдать текстовое приглашение логина.
Как только init‑система завершит свои задачи, пользователь видит приглашение к входу или рабочий стол - на этом процесс загрузки считается завершённым.
Глоссарий терминов
BIOS и UEFI - "Начальники железа"
- BIOS (Basic Input/Output System - базовая система ввода‑вывода)
Представьте BIOS как "бригадира" на стройке. Когда вы включаете компьютер, он просыпается первым, проверяет, что все рабочие (железо) на месте и в состоянии работать, а затем показывает, откуда начинать строительство (загрузку системы).
Это старая технология: она простая, но имеет ограничения (например, не видит очень большие современные диски и имеет примитивный текстовый интерфейс). - UEFI (Unified Extensible Firmware Interface)
Это "современный менеджер" на замену старому бригадиру BIOS. Он делает то же самое (проверяет железо и ищет загрузчик), но гораздо умнее:- Понимает мышку и имеет красивый графический интерфейс.
- Видит диски огромного объёма (больше 2 ТБ).
- Умеет загружаться быстрее и безопаснее (Secure Boot).
Сегодня почти на всех новых компьютерах стоит именно UEFI, хотя по привычке мы часто называем его BIOS.
- POST (Power-On Self Test)
Это "утренняя перекличка" железа. Сразу после включения BIOS/UEFI быстро проверяет основные узлы:- Оперативная память (RAM) - целая ли?
- Видеокарта - работает ли вывод на экран?
- Клавиатура - подключена ли?
Если всё хорошо - компьютер пикнет один раз или просто покажет логотип. Если что-то сломалось - начнёт пищать кодами ошибок (например, три длинных гудка - проблема с памятью).
Разметка диска: MBR и GPT
Чтобы компьютер понял, где на диске лежат файлы, диск нужно разметить.
- MBR (Master Boot Record - главная загрузочная запись)
Старый способ разметки, как старая карта города.- Ограничение: видит диск размером максимум 2 Терабайта.
- Может иметь всего 4 главных раздела (например, диск C, D, E и F).
- Хранит информацию о разделах только в одном месте (в самом начале диска) - если это место повредится, можно потерять все данные.
Загрузчик при такой разметке часто "втискивается" прямо в эти первые байты диска.
- GPT (GUID Partition Table - таблица разделов GUID)
Современная "карта города".- Понимает диски любого реального размера (хоть 100 ТБ).
- Позволяет создать огромное количество разделов (теоретически - бесконечно, практически - 128 и больше).
- Хранит копии таблицы разделов в начале и в конце диска - если начало повредится, данные можно восстановить из копии.
Обычно используется в паре с UEFI.
Загрузчики в мир ОС
- Загрузчик (Bootloader)
Это маленькая программа-посредник. BIOS/UEFI слишком примитивен, чтобы разбираться в файлах операционной системы. Поэтому он запускает загрузчик, а уже загрузчик знает: "Ага, ядро Linux лежит вот в этой папке на этом диске, сейчас я его прочитаю и запущу".
Примеры: GRUB (для Linux), Windows Boot Manager (для Windows). - GRUB (GRand Unified Bootloader)
Самый популярный и мощный загрузчик в мире Linux.
Его суперсилы:- Умеет загружать почти любую операционную систему.
- Показывает меню при включении компьютера, где вы можете выбрать: "Загрузить Ubuntu", "Загрузить Windows" или "Восстановить систему".
- Если что-то сломалось, у него есть своя командная строка, через которую иногда можно починить загрузку вручную.
- Chainloading (Цепная загрузка)
Это когда один загрузчик не грузит систему сам, а передает управление другому загрузчику.
Представьте: вы выбрали в меню GRUB пункт «Windows». GRUB не умеет запускать ядро Windows напрямую, он просто говорит: «Эй, загрузчик Windows, твой выход!», и передаёт управление ему. Для пользователя это выглядит просто как выбор пункта меню.
Внутренности Linux: Ядро и его помощники
- Ядро (Kernel)
Это "мозг" операционной системы.
Ядро - это самая главная программа, которая управляет всем компьютером.- Оно решает, какой программе дать поработать процессором прямо сейчас.
- Оно выделяет память программам и следит, чтобы они не мешали друг другу.
- Оно общается с железом (дисками, видеокартой, мышкой).
Пользователь с ядром напрямую не общается - для этого есть оболочки и программы.
- Драйвер
Это "словарь" или "инструкция" для ядра.
Ядро само по себе не знает, как управлять конкретной моделью видеокарты NVIDIA или принтером Canon. Драйвер - это модуль, который объясняет ядру: "Чтобы напечатать страницу на этом принтере, нужно отправить вот такие команды в порт USB".
Без драйверов железо просто "мертвый груз". - initramfs (Initial RAM Filesystem)
Это "аварийный чемоданчик" для старта ядра.
Проблема: чтобы прочитать файлы с диска, ядру нужен драйвер диска. Но драйвер диска сам лежит на диске! Как его прочитать, если мы еще не умеем читать диск?
Решение: initramfs - это маленький архив, который загрузчик кладёт в оперативную память вместе с ядром. В нём уже лежат самые важные драйверы. Ядро сначала открывает этот архив, берёт оттуда драйвер диска, а уже потом может читать настоящий большой диск с системой. - Root (Корень, /)
Это главная папка всей системы Linux.
В Windows есть диски C:, D:, E:. В Linux всё начинается от одного корня - символа /.
Все остальные диски и флешки "подключаются" (монтируются) внутрь папок в этом корне. Когда система загружена, именно в корне лежат все ваши программы, настройки и файлы.
Init-системы: "Управляющие процессами"
После того как ядро запустилось, оно запускает самый первый процесс (PID 1). Этот процесс должен запустить всё остальное (сеть, звук, экран входа в систему). Это и есть Init-система.
- SysV init (System V init)
Классический, "дедовский" метод.- Работает по строгой очереди: сначала запусти сеть, потом (когда сеть готова) запусти SSH, потом запусти веб-сервер.
- Использует простые и понятные скрипты (текстовые файлы с командами).
- Минус: загрузка идёт медленно, потому что процессы ждут друг друга.
- systemd
Современный стандарт (используется в Ubuntu, Debian, CentOS, Fedora).- Умеет запускать всё параллельно: сеть и звук грузятся одновременно, не ожидая друг друга, если не зависят друг от друга.
- Очень мощная и сложная: умеет перезапускать упавшие службы, следить за логами, управлять таймерами.
- Многие критикуют её за сложность ("комбайн, который делает всё"), но она де-факто стандарт сегодня.
- Upstart
Попытка сделать что-то среднее между старым SysV и новым systemd.
Главная идея - "события". Не просто "запусти сеть", а "если вставили сетевой кабель - запусти настройку сети".
Сейчас почти не используется, так как systemd победила в "войне init-систем".