Вы когда-нибудь интересовались различными этапами загрузки операционной системы? Что происходит, когда вы включаете свой компьютер?
Этапы процесса загрузки Linux условно можно разделить на:
Загрузка BIOS (POST).
Первый этап загрузки (MBR или GPT).
Второй этап загрузки (GRUB2).
Инициализация ядра.
Инициализация главного процесса (init или systemd).
Уровни выполнения (runlevels).
Сейчас мы их и рассмотрим.
Загрузка BIOS (POST)
BIOS (сокр. от «Basic Input/Output System») — это низкоуровневое программное обеспечение (прошивка), хранящееся на небольшом чипе памяти материнской платы вашего компьютера. Оно облегчает процесс запуска компьютера, а также управляет потоком данных между ним и другими подключенными к компьютеру устройствами, такими как: мышь, принтер, монитор и пр. Когда вы нажимаете кнопку питания, первым инициализируется BIOS, который начинает поиск загрузочного устройства для запуска операционной системы.
Если процесс инициализации BIOS и поиск загрузочного устройства завершаются успешно, то компьютер издает один звуковой сигнал, а затем еще один, когда система готова к загрузке операционной системы. Данный этап носит название POST (сокр. от «Power-On Self-Test» — самотестирование при включении). POST проверяет работоспособность системного оборудования и находит загрузочный сектор, который содержит программное обеспечение, необходимое для продолжения процесса загрузки. POST выполняется программами, входящими в BIOS.
Вы можете использовать функциональные клавиши (F1-F12) в режиме BIOS, чтобы задать приоритет загрузки устройств, настроить параметры аппаратного обеспечения компьютера или восстановить заданные по умолчанию значения параметров компьютера. В меню BIOS вы найдете номер версии BIOS, наименование поставщика BIOS, тип вашего процессора и другую подробную информацию о системе.
Меню загрузки в BIOS (Boot Manager) представляет собой список, в котором вы можете выбрать загружаемую операционную систему. Если на вашем компьютере установлено несколько дистрибутивов Linux или других операционных систем, вы можете добавить их в меню загрузки. Последняя установленная ОС будет показана в верхней части Boot Manager.
На следующем рисунке вы можете видеть, что на моем компьютере установлены Ubuntu и Windows. Я могу выбрать любую операционную систему (из доступных) для загрузки.
Первый этап загрузки (MBR или GPT)
К загрузчикам первого этапа относятся MBR (сокр. от «Master Boot Record») и GPT (сокр. от «Guided Partition Table»). MBR содержит таблицу разделов диска и находится в первом секторе загрузочного диска, обычно это /dev/hda или /dev/sda, в зависимости от вашего оборудования. Основная задача MBR — это «переход» в тот раздел диска, с которого необходимо выполнять дальнейший код загрузки операционной системы.
Как только MBR обнаруживает загрузчик второго этапа, то передает управление на него.
Примечание: Стоит отметить, что сейчас все чаще вместо MBR используется более современная технология — GPT.
Второй этап загрузки (GRUB2)
Задача загрузчика второго этапа состоит в том, чтобы найти ядро системы и загрузить его в память.
Большинство дистрибутивов Linux используют в качестве загрузчика GRUB (сокр. от «GRand Unified Bootloader») или GRUB2 (как более современный). Поскольку GRUB2 является более новой версией GRUB, то именно эту версию вы увидите в большинстве случаев при загрузке компьютера. В данном загрузчике есть простое меню, в котором вы можете выбрать опции загрузки. Если у вас установлено несколько различных ядер, вы можете использовать клавиатуру, чтобы выбрать именно то ядро, с которым хотите загрузить свою систему:
Конфигурационными файлами загрузчика GRUB обычно являются файлы /boot/grub/grub.conf или /etc/grub.conf. Как только загрузчик находит ядро, то загружает его в оперативную память и передает ему дальнейшее управление.
Примечание: Раньше в дистрибутивах Linux использовался преимущественно загрузчик LILO (сокр. от «LInux LOader»). Но на сегодняшний день его полностью вытеснил более современный GRUB.
Инициализация ядра
Большинство новых пользователей Linux считают, что Linux — это операционная система. Но на самом деле Linux — это ядро. Ядро часто называют сердцем операционной системы. Оно играет очень важную роль в процессе загрузки Linux. Ядро Linux находится в каталоге /boot и отвечает за взаимодействие между основными компонентами компьютера и операционной системой.
Поскольку для экономии места на жестком диске ядро находится в сжатом виде, первое, что оно сделает, как только получит контроль, — это произведет свою «самораспаковку». Затем выполнит монтирование образа корневой файловой системы, указанной в файле grub.cfg, и запустит процесс инициализации системы.
Файлы ядра Linux
Инициализации главного процесса (init или systemd)
Ядро, сразу после своей загрузки, запускает главный процесс инициализации, который приводит к запуску всех необходимых служб и программ. Данные службы продолжат работать после инициализации и будут управлять основными системными процессами, такими как: регистрация различных системных сообщений, отслеживание устройств и обеспечение синхронизации файловой системы с системной памятью.
Примечание: В системе инициализации SysV главным процессом является процесс init, а в системе инициализации systemd — (одноименный) процесс systemd.
Уровни выполнения (runlevels)
Уровень выполнения (runlevel) — это непосредственное состояние операционной системы (например, когда Linux завершил процесс загрузки и готов к использованию), в котором можно управлять параметрами питания, пользовательским режимом и всем окружением. Когда система переходит на соответствующий уровень выполнения, на экран продолжат выводиться сообщения главного процесса инициализации. Стандартное ядро Linux поддерживает семь различных уровней выполнения:
Runlevel 0 — завершает работу системы.
Runlevel 1 — однопользовательский режим работы. Чаще всего используется в целях обслуживания и выполнения других административных задач. Этот уровень также может называться Runlevel S (от англ. «Single-user»). Если вам когда-либо приходилось сбрасывать пароль на Linux, то вы вероятно уже пользовались этим режимом.
Runlevel 2 — многопользовательский режим работы (англ. «multi-user») без поддержки сетевых служб.
Runlevel 3 — многопользовательский режим с поддержкой сети, но без графического интерфейса. Чаще всего серверные версии Linux работают именно на этом уровне выполнения.
Runlevel 4 — не используется. Пользователь может настраивать этот уровень исходя из его целей.
Runlevel 5 — схож с режимом 3, но здесь запускается графический интерфейс. В этом режиме работают десктопные версии Linux.
Runlevel 6 — перезагружает систему.
Примечание: В системах семейства Debian уровни выполнения выстроены немного иначе. Например, Ubuntu в режиме командой строки запускается с уровнем выполнения 5.
В процессе загрузки Linux состояние уровня выполнения представлено буквенно-цифровым кодом. Если вы посмотрите на скриншот, приведенный ниже, вы увидите, что мой текущий уровень выполнения равен N 5
; это означает, что мой компьютер уже завершил процесс загрузки, и работает в многопользовательском режиме с графическим интерфейсом.
Узнать текущий режим уровня выполнения можно с помощью следующей команды:
sudo runlevel
Если вам по какой-либо причине потребуется изменить уровень выполнения, то это можно сделать с помощью следующей команды:
Заключение
Данный урок является лишь общим обзором процесса загрузки Linux, тем не менее для новичков он уже должен внести понимание о том, что происходит с системой Linux при нажатии кнопки включения на компьютере.
runlevel —help
Prints the PREVIOUS and current runlevel of the init system.
То есть N это предыдущее состояние runlevel, а 5 текущее.