Как загружается Linux

Ответ

Процесс загрузки Linux состоит из нескольких этапов:

  1. BIOS/UEFI - выполняет POST (Power-On Self-Test), инициализирует оборудование и загружает загрузчик с указанного устройства.
  2. Загрузчик (GRUB/LILO) - загружает ядро Linux и initramfs в память.
  3. Ядро - распаковывается, инициализирует оборудование, монтирует корневую файловую систему.
  4. Initramfs - временная root FS с драйверами и утилитами для монтирования реальной root.
  5. Init/systemd - первый пользовательский процесс (PID 1), запускает сервисы и демоны.

Пример конфигурации GRUB:

menuentry 'Linux' {
    linux /vmlinuz root=/dev/sda1
    initrd /initramfs.img
}

Ключевые моменты:

  • Ядро должно поддерживать оборудование.
  • Initramfs может потребоваться для сложных конфигураций (LVM, RAID).
  • Современные системы используют systemd вместо классического init.

Ответ 18+ 🔞

А, слушай, про загрузку Линукса. Ну, это ж классика, ёпта. Как будто на дворе 2002-й год, а процесс всё тот же, только обёртка другая. Сейчас разжуем, как это всё работает, чтобы ты не бздел, когда система не грузится.

Вот смотри, всё начинается с этой древней хуйни — BIOS или UEFI. Это такой дед в подвале, который просыпается первым, тыкает палкой в железо (это POST называется), проверяет, дышит ли оно, и потом ищет, с какого диска ему загрузчик выковырять. Старый пердун, но без него — никуда.

Дальше в дело вступает загрузчик, обычно это GRUB. Ну, или LILO, если ты совсем ретроград. Его задача — простая, как три копейки: найти на диске ядро Линукса и этот самый initramfs, и запихнуть их в оперативку. Как будто ты грузишь в тачку мешки с картошкой, чтобы потом готовить. Вот пример, как он это в конфиге прописывает:

menuentry 'Linux' {
    linux /vmlinuz root=/dev/sda1
    initrd /initramfs.img
}

Видишь? Говорит: «Берём файлик vmlinuz (это и есть ядро), корень системы будет на /dev/sda1, а для помощи возьмём initramfs.img». Всё, поехали.

Дальше ядро просыпается. Оно распаковывается, оглядывается вокруг — э, сабака, сука, сколько тут железа! — и начинает его инициализировать. Но чтобы продолжить, ему нужна корневая файловая система. А она может быть на каком-нибудь хитром RAID или зашифрованном LVM. Вот тут-то и нужен initramfs.

Initramfs — это такая временная, маленькая root FS, которая грузится прямо в оперативку. В ней лежат все необходимые драйвера и утилиты, чтобы докопаться до настоящей, большой корневой системы. Представь, что ты приехал на дачу, а ключ от дома забыл. Initramfs — это отвёртка и ломик в кармане, чтобы окно вскрыть. Без него — сиди на крыльце.

Когда ядро, с помощью initramfs, наконец-то смонтировало настоящую корневую файловую систему, оно передаёт эстафету первому пользовательскому процессу с PID 1. Раньше это был простой init, а сейчас все используют systemd. Вот тут начинается настоящий ёперный театр!

Systemd — это такой менеджер, который начинает орать на все сервисы и демоны, чтобы те вставали и работали. Сетевой демон, демон логирования, демон печати — все просыпаются, иногда нехотя, иногда с ошибками. Если всё прошло гладко — ты видишь приглашение на логин. Если нет — ну, бывает, видишь чёрный экран и молчание. Доверия ебать ноль к этому процессу, но он работает.

Ключевые моменты, которые надо помнить, а то будет тебе хиросима:

  • Ядро должно знать твоё железо. Если ты собрал своё ядро и выкинул поддержку SATA-контроллера, а система на SSD, то welcome to black screen. Сам от себя охуеешь.
  • Initramfs — не просто так. Для сложных конфигов (LVM, RAID, шифрование) он жизненно необходим. Без него ядро просто не увидит твой корень.
  • Systemd — это сейчас царь и бог. Старый init с его скриптами в /etc/rc.d — это уже история. Не пытайся бороться, просто прими это.

Вот и вся магия. Кажется сложным, но на самом деле — цепочка простых действий. Главное, чтобы на каком-то этапе не оказалось, что какой-то пидарас шерстяной стёр загрузчик или в конфиге GRUB путь к ядру кривой. Тогда придётся с LiveCD лезть и всё чинить. Но это уже другая история, про волнение ебать.