Как загружается Linux: от Grub до рабочего стола

Ладно, ребятки, любители пингвинов, хотите узнать, как ваш Linux просыпается после долгого сна? 🐧 Сейчас мы заглянем под капот этой операционки и разберём её загрузку по винтикам! 🤓

Представьте: вы нажимаете на кнопку, и в этот момент начинается настоящее волшебство! ✨ Ну, или как минимум хорошо отлаженный технический процесс. В общем, загрузка Linux похожа на восхождение на гору в пять этапов:

Этап первый. Навстречу загрузчику! ⛰️
Этап второй. Ядро – наш проводник в мир Linux. 🐧
Этап третий. Ищем драйвера и файловые системы – без них никуда! 🕵️‍♂️
Этап четвёртый. Системные службы, или Демоны на страже порядка. 🛡️
Этап пятый. Финишная прямая! Приветствуем пользователя! 🏁

Готовы к приключениям? Тогда запасайтесь попкорном, будет интересно! 😉

Ноооо… Прежде чем мы начнём ковыряться во внутренностях Linux, хочу обратиться к самым зелёным новичкам! 🌱 Чувствуете, что «sudo» для вас пока звучит как заклинание? 😅 Тогда прямиком отправляйтесь читать мою статью «Взлом Linux за 20 мин. экспресс-курс для новичка.» Не пугайтесь названия, там никто ничего ломать не будет! 😄 Это просто супер-быстрый курс по основам Linux специально для таких же новичков, как и вы.

Загрузчик: первый герой нашего сервера

Итак, друзья, наша пьеса начинается! Первый акт, и на сцену выходит он – великий и ужасный… Загрузчик!

Помните те тёмные века, когда Linux ещё не был таким крутым, и за его загрузку отвечал LILO? Да, этот парень был проще пареной репы: никаких тебе изменений на лету, только хардкор, только переустановка после каждого чиха! Обновил ядро и забыл про LILO? Поздравляю, твой ноутбук теперь – дорогой кирпичик!

Но к счастью, те времена давно канули в лету! Сегодня за всю эту магию отвечает Grub – настоящий монстр загрузки, созданный для GNU/Hard. Этот товарищ поумнее будет: он не только читает конфиг загрузки прямо с диска (как правило, это /boot/grub/grub.cfg), но и позволяет его редактировать прямо на месте, как заправский хакер!

Grub – это тебе не какой-то там LILO! У него есть своя командная строка (для особых гурманов), он дружит с кучей файловых систем и может создавать такие цепочки загрузки, что голова кругом пойдёт!

Короче говоря, Grub – это как швейцарский нож в мире загрузчиков. И как только ты выбираешь нужный пункт в меню (или же просто ждёшь, пока таймер дотикает до нуля), Grub находит на диске образ ядра Linux (обычно это /boot/vmlinuz) и образ initramfs (о нём чуть позже), загружает их в память и передаёт эстафету ядру.

Чтобы увидеть меню Grub в Ubuntu, необходимо удерживать Shift
Кстати, если ты пользуешься Ubuntu и хочешь лично познакомиться с Grub, не забудь при загрузке зажать клавишу Shift. Он будет рад!

vmlinuz: а почему, собственно, так?

А вы знали, что название файла с образом ядра – это не просто случайный набор букв? У него богатая история, прямо как у древнего артефакта!

В начале времён, когда UNIX был ещё совсем юным, образ ядра называли просто «unix» – без всяких заморочек. Но потом появились процессоры с защитой памяти (настоящая революция!), и чтобы никто не перепутал старый образ с новым, его переименовали в «vmunix». Вот так буква «vm» навечно вошла в историю Linux!

А буква «z» в конце vmlinuz – это как клеймо качества! Она означает, что образ сжат с помощью утилиты gzip (алгоритм Deflate, если кто хочет блеснуть знаниями). Так что vmlinuz – это не просто файл, а целый архив с историей!

Ядро выходит на сцену, а initramfs ему помогает

Итак, загрузчик вышел на поклон и скрылся за кулисами, передав эстафету самому главному герою нашего спектакля – ядру Linux!

Ядро, как настоящая звезда, не спешит с яркими эффектами. Сначала – небольшая разминка: настройка управления памятью, обработчика прерываний и других важных штук, о которых обычным смертным знать не обязательно.

Когда всё готово к работе, ядро вспоминает про своего верного помощника – initramfs (обычно это файл с именем типа /boot/initramfs-linux.img, если вам интересны подробности). Этот файл – настоящий спаситель! Он содержит базовый набор инструментов для Linux, как супергеройский рюкзак с гаджетами:

  • Стандартные системные каталоги (/bin, /lib, /etc и прочие страшные слова).
  • Простейший командный интерпретатор (обычно это ash, но кто их, программистов, разберёт).
  • Набор команд BusyBox (что-то вроде швейцарского ножа для Linux).
  • Кучу полезных библиотек (без них никуда!).
  • И самое главное – набор модулей ядра (драйверов), которые помогают работать с разными накопителями и файловыми системами.
Содержимое initramfs
Содержимое initramfs

Зачем всё это нужно? А вот представьте: ядро хочет подключить корневую файловую систему, но для этого ему нужны драйверы. А где их взять, если корневая файловая система ещё не подключена? Получается замкнутый круг!

И вот тут-то на помощь приходит initramfs! Он говорит: «Не волнуйся, ядро, у меня всё есть!» Запускается скрипт /init, который определяет, какие накопители у нас есть, подгружает нужные драйверы, подключает корневую файловую систему и… вуаля! Система готова к дальнейшей загрузке!

Скрипт init из initramfs
Скрипт init из initramfs

Но это ещё не всё! Скрипт /init, как настоящий джентльмен, не забывает о машине скорой помощи – скрипте /sbin/init. Именно он продолжит нашу увлекательную экскурсию по загрузке Linux!

А что у Android? Тоже самое, только по-другому!

Кстати, раз уж мы заговорили про загрузку, нельзя не вспомнить про нашего зелёного друга – Android! У него тоже есть initramfs, как и у взрослого Linux. Вот только ведёт он себя немного по-другому… как младший брат, который всегда пытается быть не таким, как все.

Если в Linux initramfs после загрузки системы скромно уходит в тень, то в Android он говорит: «А вот и я, ничего не знаю, буду жить тут!». И вместо того, чтобы передавать эстафету реальной файловой системе, он сам превращается в неё! Ну не чудо ли?

Первичная инициализация: запускаем настоящий Linux!

Итак, наш верный помощник initramfs успешно выполнил свою миссию и передал бразды правления утилите /sbin/init – настоящему дирижеру операционной системы! И тут начинается самое интересное!

/sbin/init – это как бывалый администратор системы: он знает, какие драйверы нужно загрузить, какие файловые системы подключить, как настроить сеть и, конечно же, какие системные службы запустить. В общем, настоящий профессионал!

Но давайте копнём немного глубже и узнаем, как он это делает.

SystemV: старый друг лучше новых двух?

Раньше, в далёкие времена, /sbin/init был простой, как три рубля. Он просто смотрел на переданный ему параметр и запускал соответствующий скрипт из каталога /etc/rcX.d/ (где X – это уровень загрузки). Каждый скрипт отвечал за свою задачу: один подключал файловые системы, другой настраивал сеть, третий запускал демона cron (ответственного за расписание), четвёртый – демона syslog (который записывает логи), и так далее.

Такой стиль инициализации называется SystemV (в честь той версии UNIX, где он впервые появился). Он простой и понятный, как конструкция велосипеда. Но у него есть один существенный недостаток: он устарел, как дисковый телефон!

Современные проблемы требуют современных решений!

Сегодня загрузка системы – это тебе не просто пара драйверов и служба. Это целый парад демонов, на запуск которых может уйти уйма времени! И не дай бог какой-нибудь демон зависнет – вся система может рухнуть, как карточный домик!

SystemV же ничего этого не учитывает: он просто запускает службы одну за другой, как будто на светофоре стоит. В итоге загрузка становится медленной, а стабильность системы оставляет желать лучшего.

macOS и launchd: учимся у лучших! 😎

Чтобы решить эти проблемы, разработчики macOS придумали launchd – настоящую революцию в мире инициализации! Launchd не только контролирует жизненный цикл служб (чтобы они не зависали), но и запускает их только тогда, когда они действительно нужны. Вот это я понимаю – оптимизация!

Systemd: будущее уже наступило!

И вот, вдохновившись идеями launchd, разработчики Linux создали systemd – самую популярную на сегодняшний день систему инициализации. Systemd – это как launchd на стероидах: он ещё более мощный, гибкий и функциональный.

Вместо скриптов и уровней запуска systemd оперирует юнитами (unit) – это такие кирпичики, из которых собирается вся система. Каждый юнит может быть службой, операцией монтирования, настройкой сети или чем-то ещё.

Для описания юнитов используется специальный язык, поэтому допустить ошибку стало гораздо сложнее (хотя и не исключено, мы же программистов знаем!). Юниты могут зависеть друг от друга и запускаться параллельно или по мере необходимости.

Например, службы, которым не нужна сеть, могут быть запущены раньше, а службы, зависящие от сети, – позже. Это позволяет значительно ускорить загрузку системы и сделать её более стабильной.

В общем, systemd – это круто! И если вы ещё не пользуетесь им, то обязательно попробуйте.

Демоны просыпаются: кто главный по Linux?

После того, как все драйверы на месте, файловые системы подключены, а сеть настроена, наступает пора разбудить демонов! Не пугайтесь, речь идёт не о рогатых существах из преисподней, а о системных службах – невидимых трудягах, которые отвечают за всю кухню Linux.

Udev: повелитель устройств

Первым делом представляю вам udev – главного по устройствам в мире Linux. У него ответственная работа: следить за каталогом /dev, где хранятся так называемые «файлы устройств». Это такие волшебные файлы, через которые Linux общается с железом: читает данные с диска, выводит изображение на экран, принимает сигналы с клавиатуры и так далее.

Раньше каталог /dev был похож на чердак, где хранится всякая всячина: даже если у тебя не было звуковой карты, файл для неё всё равно был! Но udev наводит порядок: он смотрит, какие устройства действительно подключены к компьютеру, и создаёт файлы только для них.

Syslog и systemd-journald: хранители логов

Ещё один важный демон – это syslog. Он собирает логи (записи о событиях) от всех приложений и складывает их в уютный каталог /var/logs. В современных Linux-системах его часто заменяют на systemd-journald, который хранит логи в более продвинутом формате (и защищает их от злых хакеров!).

Другие демоны: у каждого своя миссия

Помимо этих двух, в Linux трудится целая армия демонов:

  • cron: запускает задачи по расписанию (например, создание резервных копий).
  • cups: отвечает за печать (чтобы ваши документы всегда попадали на нужный принтер).
  • systemd-logind: управляет пользовательскими сессиями (чтобы вы могли легко переключаться между ними).
  • dbus: позволяет приложениям общаться друг с другом.
  • NetworkManager: настраивает сеть (чтобы вы всегда были онлайн!).

Секрет быстрой загрузки: ленивые демоны

А вы знали, что многие демоны запускаются не сразу, а только тогда, когда они действительно нужны? Это как ленивый кот, который спит до последнего, пока ему не покажут корм.

Секрет в том, что systemd (и его предшественник launchd в macOS) умеют создавать «фальшивые» сокеты – точки соединения, через которые общаются процессы. И только когда какое-то приложение пытается соединиться с этим сокетом (то есть воспользоваться службой), демон просыпается и начинает работать. Вот такой вот хитрый трюк!

Финальный аккорд: встречаем пользователя!

Итак, друзья, мы уже на финишной прямой! Все демоны на своих местах, драйверы загружены, сеть работает… Осталось совсем немного – впустить в систему пользователя!

Консоль или графика?

Тут у нас, как в хорошем ресторане, – есть меню! Можно выбрать классический вариант – консоль, где вас встретит строгий, но справедливый командный интерпретатор. Или же отдать предпочтение модному графическому интерфейсу с окошками, кнопочками и прочими красивостями.

Если вы выбрали консоль, то вас поприветствует связка утилит getty и login. Getty – это как старый дворецкий, который вежливо просит вас представиться (ввести логин), а login – бдительный охранник, который проверит ваш пароль.

Если же вам ближе графика, то вас встретит дисплейный менеджер – KDM (для KDE), GDM (для GNOME) или какой-нибудь другой. Он покажет вам красивое окошко для ввода логина и пароля, а после успешной авторизации запустит оконный менеджер или выполнит команды из файла ~/.xinitrc.

Дисплейный менеджер KDM в Debian
Дисплейный менеджер KDM в Debian

X Window System: волшебник графики

Но кто же отвечает за всю эту красоту на экране? Конечно же, X Window System (или Xorg в современных системах)! Это как художник, который рисует все эти окошки, кнопочки и прочие элементы интерфейса. X Window System работает по принципу клиент-сервер: сервер отвечает за общую картинку, а клиенты (приложения) отправляют ему свои рисунки и получают события от мыши и клавиатуры.

Менеджеры окон: кто в домике живёт?

Чтобы в этом хозяйстве не царил хаос, нужен менеджер окон. Он решает, где какое окно будет расположено, как его можно перемещать, сворачивать, разворачивать и так далее. Есть простые менеджеры окон (типа fluxbox, window maker, i3), а есть и целые среды рабочего стола (KDE, GNOME, XFCE), которые включают в себя не только менеджер окон, но и кучу других полезных программ.

PAM: строгий, но справедливый контролёр

И наконец, последний рубеж защиты – это PAM (Pluggable Authentication Modules). Это как строгий, но справедливый контролёр на входе в клуб: он проверяет вашу личность и решает, пускать вас или нет. По умолчанию он просто сравнивает ваш пароль с тем, что хранится в системе. Но его можно настроить так, чтобы он требовал дополнительного подтверждения – например, отпечатка пальца, USB-ключа или даже SMS-кода с телефона.

Вот и сказке конец!

На этом процесс загрузки Linux можно считать завершённым! Вы успешно прошли все испытания, преодолели все препятствия и добрались до финиша! Теперь вы можете наслаждаться всеми прелестями свободной операционной системы!

Вместо заключения: Linux не так страшен, как его загружают!

Вот мы и добрались до конца нашего увлекательного путешествия в мир загрузки Linux! Конечно, я рассказал не обо всех тонкостях этого процесса (иначе вы бы тут уснули!), но самое главное – вы теперь имеете представление о том, как это работает.

И знаете что? Это совсем не так сложно, как кажется на первый взгляд! По сути, Linux готов к работе уже после загрузки initramfs. Всё остальное – это просто украшательства для нашего с вами удобства.

Так что не бойтесь экспериментировать, изучать Linux и наслаждаться всеми его возможностями! Ведь это действительно крутая операционная система!

Подпишись на Telegram!

Только важные новости и лучшие статьи
Подписаться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика
3wifi.ru © 2024