Домой Bluetooth Этапы монтирования системы при загрузке ос. Введение в процесс загрузки и запуска Linux

Этапы монтирования системы при загрузке ос. Введение в процесс загрузки и запуска Linux

Linux как и любая другая операционная система загружается в несколько основных этапов: -> Досистемная загрузка -> Первичный загрузчик Linux -> Вторичный загрузчик -> Загрузка пользовательского пространства (INIT ).

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

Рассмотрим досистемную загрузку

Задача досистемной загрузки — выбрать как загружать ядро операционной системы .

То, как именно загрузить ядро пользователь может выбрать самостоятельно. Для того, чтобы выбрать нужна специальная система управления. Такую систему управления принято называть загрузчик . В Linux наиболее популярными и часто используемыми загрузчиками являются загрузчик LILO (Linux Loader) и загрузчик GRUB (Grand Unified Bootloader) . Они предоставляют пользователю возможность выбрать заранее настроенный тип загрузки. Оба эти загрузчика имеют текстовый (консольный) и графический варианты интерфейса. Основная и ключевая задача таких загрузчиков: загрузить в память компьютера ядро и всё необходимое для успешного старта системы.

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

Таким нехитрым образом мы разобрались с «загрузчик ядра ОС Linux «!

Linux может пригодиться вам по многим причинам. Например, ваш старый компьютер нельзя обновить до новых версий Windows или macOS, или вам нужны специфические приложения для Linux, или же вам просто любопытно попробовать новое. А может быть, вы просто приобрели новый компьютер без операционной системы и хотите сэкономить, выбрав бесплатную Linux.

Установить Linux несложно. Конечно, есть такие дистрибутивы, как Arch, установка которого довольно трудна для новичка. Но большинство современных дистрибутивов устанавливается очень просто. Пожалуй, даже проще и быстрее, чем Windows.

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

Установить Linux можно на компьютеры под управлением Windows и macOS или на пустой жёсткий диск. Вы можете выбрать Linux своей основной системой либо пользоваться ей параллельно с вашей старой системой.

1. Загрузите дистрибутив Linux

Прежде всего нужно выбрать дистрибутив Linux. Определиться вам поможет рейтинг DistroWatch.com .

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

Как правило, дистрибутивы Linux на официальных сайтах предлагается скачать двумя способами. Первый способ - обычная загрузка. Второй - через P2P посредством торрент-клиента. Второй способ, естественно, быстрее. Так что выбирайте его, если хотите сэкономить время.

Когда дистрибутив в формате ISO скачан, нужно записать его на CD или обычную USB-флешку.

Запись на CD можно осуществлять стандартными средствами системы: «Запись образа диска» Windows или «Дисковая утилита» macOS. Достаточно щёлкнуть по загруженному образу правой кнопкой мыши и выбрать соответствующий пункт в меню.

Для записи ISO на флешку вам понадобятся специальные утилиты. Для Windows лучше выбрать Rufus , а для macOS - UNetbootin . У этих программ очень простой интерфейс, в них довольно сложно запутаться.

3. Подготовьте раздел диска

Этот пункт следует выполнять в том случае, если вы хотите сохранить установленную у вас систему и использовать Linux одновременно с ней. Если вы решили перевести свой компьютер на Linux полностью или устанавливаете ОС на пустой жёсткий диск, пропустите параграф.

Windows

Откройте «Средство управления дисками» Windows. Выберите диск или раздел, от которого вы планируете отрезать немного места для установки Linux. Большинству дистрибутивов с лихвой хватит 10 ГБ. Но если вы планируете устанавливать много приложений, возьмите больше. Щёлкните по разделу правой кнопкой мыши и выберите «Сжать том». Введите размер и нажмите ОК.

Процесс может занять довольно много времени, так что запаситесь терпением.

Когда «Средство управления дисками» закончит изменять размеры разделов, на диске появится пустое неразмеченное пространство, отмеченное чёрным цветом. Туда мы и установим Linux.

Позже, если Linux вам не понадобится, можно будет удалить разделы с ним и отдать освободившееся место обратно Windows при помощи всё того же «Средства управления дисками».

macOS

Выделить место для установки Linux можно через «Дисковую утилиту» macOS. Выберите ваш диск и щёлкните по значку «+», чтобы создать раздел для Linux. Создание нового раздела может занять некоторое время.

4. Подготовьте загрузчик

Windows

Этот пункт касается только новых компьютеров под управлением предустановленной Windows 10, 8.1 или 8. На таких компьютерах используется загрузчик UEFI, который не позволит вам загрузить какую бы то ни было систему, кроме Windows.

Чтобы это исправить, зайдите в настройки BIOS вашего компьютера и отключите опцию Secure Boot. Затем перезагрузитесь. Готово, теперь вы можете загружать и устанавливать другие системы рядом со своей Windows.

macOS

В отличие от большинства компьютеров, Mac требует пары дополнительных действий для того, чтобы установить Linux в дуалбуте с macOS.

Прежде всего, отключите SIP. Перезагрузите Mac и нажмите Cmd + R. Появится меню Recovery. Выберите в нём «Терминал» и введите csrutil disable .

Перезагрузите Mac ещё раз. SIP отключён.

Ручной

Подойдёт, если вы хотите сами задать размеры для ваших разделов или, например, создать отдельный раздел для ваших файлов. Для этого выберите «Другой вариант» и нажмите «Продолжить».

Linux отобразит, какие разделы есть у вас на компьютере. Вы можете удалять их, форматировать или, наоборот, не трогать разделы с той информацией, которую хотите сохранить.

Чтобы установить Linux вместо вашей системы, выберите раздел с установленной системой и удалите его кнопкой «–». Затем на освободившемся месте создайте новые разделы.

  • Корневой раздел для системных файлов Linux. Выберите файловую систему Ext4 и точку монтирования /.
  • Swap-раздел, или раздел подкачки, пригодится, если у вас не хватает оперативной памяти, но зато быстрый SSD-диск. В списке файловых систем выберите «Раздел подкачки».
  • Home-раздел, где будут храниться ваши файлы. Выберите файловую систему Ext4 и точку монтирования /home.

Нажмите «Продолжить» и подтвердите изменения. Установщик сотрёт выбранные вами разделы и создаст новые на освободившемся месте.

Как установить Linux рядом с текущей системой

Установить Linux рядом с вашей системой можно двумя способами.

Автоматический

Большинство установщиков Linux сразу обнаруживают установленные у вас системы. Если вы не создавали отдельное пространство на диске для Linux, то можете попробовать выбрать пункт «Установить рядом с Windows». Установщик самостоятельно создаст нужные разделы, и вам не придётся ничего делать вручную.

Ручной

Если же вы хотите сами определить, сколько места выделять системе, и выполнили указания в пункте 3, щёлкните «Другой вариант» и нажмите «Продолжить». Вы увидите разделы своего диска и пустое место, которое мы приготовили для Linux. Создайте там корневой раздел (точка монтирования /), как описано выше. Домашний раздел в таком случае не обязателен: вы сможете копировать и изменять файлы в своей основной системе.

Нажмите «Продолжить». Установщик оставит ваши файлы на своих местах. Он просто создаст новые разделы на свободном месте. Вы сможете выбирать, какую систему хотите загрузить при запуске.

8. Завершите установку Linux

Затем вам будет предложено представиться. Введите своё имя и придумайте пароль. Не забудьте пароль, поскольку он будет постоянно нужен вам для выполнения задач от имени всех. При желании можете зашифровать свою домашнюю папку.

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

Что делать после установки

Когда вы перезагрузитесь и перед вами появится рабочий стол вашей Linux, вы сможете делать всё то же, что и в Windows и macOS: сёрфить в интернете, редактировать документы и слушать музыку. Не забудьте обновиться и заглянуть в «Магазин приложений» (или его аналог в зависимости от дистрибутива), чтобы доустановить нужные вам приложения.

Попробуйте Linux, и вы увидите, что в повседневной жизни она ничуть не сложнее Windows или macOS.

Для выбора и запуска операционной системы во время загрузки компьютера используется специализированная программа - загрузчик. Самый популярный загрузчик - Grub. При установке нескольких операционных систем, например, Linux поверх Windows, в меню загрузчика первой будет последняя установленная ОС.

Это не вызовет проблем у пользователей, которые пользуются Linux как основной системой, для них это даже более предпочтительный вариант. Но если вы еще новичок, и хотите использовать Linux второй системой, а Windows пока еще основной, до тех пор, пока не освоитесь, то наверное захотите чтобы первой была Windows. В этой статье мы рассмотрим как сделать загрузку Windows первой в Grub. Рассмотрим два способа: с помощью программы Grub Customizer и вручную, через файлы конфигурации загрузчика Grub.

Grub Customizer

Grub Customizer - это программа, позволяющая настраивать различные параметры загрузчика Grub. В том числе и положение и очередность пунктов загрузки. Установить программу можно из официальных репозиториев. Например, в Ubuntu нужно использовать ppa:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
$ sudo apt-get update
$ sudo apt-get install grub-customizer

Для запуска программы откройте терминал (Ctrl+Alt+T) и наберите grub-customizer:

Для работы программы необходимы права root, в некоторых системах возможно придется использовать такую команду:

gksu grub-customizer

Также программу можно запустить из главного меню. Главное окно выглядит вот так:

Несколько секунд после запуска программа будет сканировать установленные операционные системы, затем в этом же окне мы сможем перенести загрузку Windows на первое место. Для этого кликните на нужном пункте правой кнопкой чтобы открылось контекстное меню:

В меню выберите пункт Переместить вверх . Это действие нужно будет повторить несколько раз, пока Windows не будет первой в списке. Теперь будет выполняться загрузка windows по умолчанию grub.

Если потом вы захотите опустить Windows обратно вниз, есть обратное действие - Переместить вниз .

Для сохранения настроек просто нажмите кнопку Сохранить. Готово. Можете перезагружать компьютер и смотреть что получилось.

Но я хочу затронуть еще пару настроек, которые могут быть полезны. Вместо того чтобы делать загрузку Windows первой в Grub, можно изменить пункт запускаемый по умолчанию. Перейдите на вкладку Основные настройки :

Здесь для выбора пункта по умолчанию используемого по умолчанию есть список Задействовать :

Кроме того, можно загружать по умолчанию последнюю загруженную ОС, для этого есть галочка:

Изменение порядка загрузки Grub через терминал

Как я и обещал, теперь рассмотрим как сделать загрузку WIndows первой в Grub с помощью конфигурационных файлов. Конфигурация Grub находится в файле /boot/grub/grub.cfg.

gksu gedit /boot/grub/grub.cfg

Как правило, строки меню выглядят вот так:

menuentry имя_пункта --опции {
...

Например пункт Windows:

menuentry "Windows 8 (loader) (on /dev/sda1)" --class windows --class os $menuentry_id_option "osprob
er-chain-FC324E26324DE66C" {
....

Теперь чтобы изменить порядок пунктов меню достаточно вырезать все до обратной закрывающей скобочки, вместе с этой строкой, и вставить перед всеми другими пунктами. Затем можно сохранить файл и готово. Перезагружайте и смотрите. Загрузка Windows выполняется по умолчанию. Только минусом данного способа является то, что при обновлении конфигурации Grub все настройки собьются.

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

Откройте файл /etc/default/grub.

gksu gedit /etc/default/grub

Здесь нас интересует строчка:

Замените 0, на нужный пункт для загрузки, также вместо цифры можно указать имя пункта, например:

GRUB_DEFAULT="Windows 8 (loader) (on /dev/sda1)"

Посмотреть доступные пункты загрузки не открывая файл конфигурации можно командой:

sudo grep menuentry /boot/grub/grub.cfg

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

GRUB_SAVEDEFAULT=true

А в GRUB_DEFAULT укажите saved:

GRUB_DEFAULT=saved

Очевидным плюсом этого способа есть то, что настройки во время обновления конфигурации Grub не собьются, так как во время обновления информация берется из этого файла. Теперь давайте обновим конфигурацию и сохраним настройки командой:

Не во всех системах работает такой вариант, поэтому можно использовать другую команду:

grub2-mkconfig -o /boot/grub/grub.cfg

Вот и все. Теперь вы знаете как сделать загрузку Windows первой в Grub. Но представленную в этой статье информацию можно использовать в более широких целях. Она будет полезна не только для Windows, но и для любых других нескольких систем, очередностью загрузки которых нужно управлять.

Похожие записи:


Последовательность загрузки Linux системы состоит из следующих этапов:

BIOS (Basic Input-Output System - базовая система ввода вывода)

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

Как правило это:

  • Привод CD-ROM
  • Жёсткий диск
  • Дисковод (используются всё реже)

Список зависит от возможностей конкретного BIOS"а, а также вашего оборудования.

Приоритет загрузки может быть изменён в BIOS"е. Войти в меню настройки BIOS"а, как правило, можно нажав Del, F1, F2 или F10 во время загрузки компьютера.

MBR (Master Boot Record - главная загрузочная запись)

Первый сектор загружаемого устройства хранения данных зарезервирован под главную загрузочную запись. Когда происходит загрузка с устройства, BIOS загружает и исполняет загрузчик операционной системы (boot loader), находящийся в MBR.

В большинстве случаев загрузчик достаточно сложен и не может вместиться в 512 байт отведённые MBR. В этом случае в MBR находится так называемый stage1, программа которая просто загружает программу второго этапа загрузки операционной системы - stage2 (иногда в качестве stage2 загружается загрузочный сектор активного раздела, boot manager или программа авторизации и защиты доступа).

В частности, stage2 загрузчика GRUB считывает данные из файла /boot/grub/grub.conf (или /boot/grub/menu.lst, в зависимости от версии), который содержит список всех доступных операционных систем и их параметры загрузки. После этого на экран выводится список операционных систем из которого пользователь выбирает ОС для загрузки.

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

В некоторых случаях stage1 загрузчика GRUB (GRand Unified Bootloader) производит загрузку stage1.5 код которого находится в первых тридцати килобайтах устройства хранения данных следующих сразу за MBR, и уже stage1.5 производит загрузку stage2.

Когда stage2 получает управление, на экран выводится (псевдо)графическое меню для выбора пользователем ОС для загрузки. Стоит отметить, что параметры загрузки могут быть изменены из этого же меню, что позволяет восстановить систему после того как menu.lst или grub.conf были случайно испорчены.

Как только параметры загрузки были выбраны, GRUB загружает выбранное ядро в память и передаёт управление ядру, которое уже само продолжает загрузку системы. Также GRUB может передать управление не ядру, а другому загрузчику, используя так называемую цепную загрузку (chain loading), например загрузчику ОС не поддерживающей стандарт Multiboot.

Ядро

В свою очередь, ядро проверяет конфигурацию оборудования, инициализирует устройства и запускает initrd (опционально), после чего монтирует с устройство указанное в параметрах загрузки как "root" как корневую файловую систему.

Файловая система устройства определяется автоматически. Если по каким либо причинам монтирование не удаётся, система выдаёт kernel panic и загрузка останавливается.

После успешного монтирования файловой системы, ядро запускает демон init, которая получает идентификатор процесса равный единице и запускает оставшуюся часть системы.

init

init - это последний шаг в последовательности загрузки системы. init является родителем (или же более далёким предком) для всех процессов исполняемых в системе. Этот процесс запускается первым в системе и его запуск производится непосредственно ядром. Он же запускает все системные процессы так как это указано в /etc/inittab.

Покуда система работает, init не будет завершён. Стоит отметить что init - пользовательский процесс, а не системный, не смотря на то что он запущен от root"а.

Уровни запуска (runlevel)

Каждая запись в /etc/inittab содержит так называемый "уровень запуска" для процесса, т.е. информацию о том на каком уровне запуска системы данный процесс должен быть запущен.

В Linux системах существует семь возможных значений для уровня запуска: от 0 до 6 включительно:

  1. Останов системы
  2. Однопользовательский режим
  3. Определяется пользователем, как правило это многопользовательский режим без поддержки сети и графической оболочки
  4. Многопользовательский режим без графической оболочки
  5. Определяется пользователем, как правило, не используется
  6. Многопользовательский режим с графической оболочкой

Основываясь на текущем уровне запуска, init запускает скрипты находящиеся в поддиректориях /etc/rc.d/, для каждого уровня запуска существует своя поддиректория, от /etc/rc.d/rc0.d до /etc/rc.d/rc6.d.

В действительности же запуск скриптов каждого уровня запуска выполняется скриптом /etc/rc который вызывается на каждом уровне запуска с параметром равным текущему уровню. Вызов же /etc/rc параметром прописан в /etc/inittab, для каждого из возможных уровней запуска.

Уровень запуска по умолчанию определяется записью в /etc/inittab:

Id:3:initdefault:

Текущий уровень запуска может быть изменён путём вызова:

/sbin/telinit #

Где # - желаемый уровень запуска. Т.е. вызов "/sbin/telinit 6" приведёт к перезагрузке системы.

Лучший способ понять, как работает операционная система Linux, - это проследить поэтапно ее загрузку. Именно во время загрузки запускаются все те механизмы, что приводят ОС в движение. Процесс этот сложный, многоступенчатый и порой запутанный. Изучать его интересно, а открытия, которые вы сделаете при этом, могут сильно вас удивить.

В целом загрузку Linux дистрибутива можно разделить на 5 этапов:

  1. Загрузчик.
  2. Запуск и начальная инициализация ядра.
  3. Обнаружение оборудования, загрузка драйверов и подключение файловых систем.
  4. Запуск системных служб (демонов).
  5. Старт графической или консольной пользовательской сессии.

Мы пройдемся по всем стадиям и узнаем, что происходит во время загрузки типичного дистрибутива Linux, немного отклонившись в сторону BSD, macOS и Android по пути. Во многих случаях это позволит понять, почему процесс загрузки Linux именно такой, какой есть.

1. Загрузчик

Все начинается с загрузчика, которому во время старта машины BIOS передает управление. В старые времена, когда Linux был не так популярен, в качестве загрузчика использовался LILO (Linux Loader) - простой, очень примитивный и не позволяющий менять конфигурацию загрузки на лету. Фактически конфигурационный файл был вшит в сам загрузчик, и его приходилось переустанавливать после каждой смены настроек: обновил ядро, забыл переустановить, и твой ноутбук больше не грузится.

Сегодня загрузкой Linux практически в любом дистрибутиве занимается Grub, изначально разработанный для операционной системы GNU/Hard. Grub гораздо сложнее LILO и фактически сам является полноценной ОС. Он не просто читает конфиг загрузки (обычно это /boot/grub/grub.cfg) прямо с диска, но и позволяет исправить этот конфиг на месте. Grub имеет встроенную командную строку, работает с десятком различных файловых систем и позволяет формировать сложные цепочки загрузки.

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

Чтобы увидеть меню Grub в Ubuntu, необходимо удерживать Shift

2. Ядро и initramfs

Получив управление, ядро начинает первичную инициализацию: запускается подсистема управления памятью, настраивается обработчик прерываний, инициализируются необходимые для дальнейшей работы ядра структуры данных. Когда эта работа будет закончена, ядро распаковывает архив initramfs (обычно он имеет имя вида /boot/initramfs-linux.img и представляет собой архив cpio, сжатый с помощью gzip) в файловую систему в оперативной памяти (tmpfs), делает ее корневой файловой системой и запускает скрипт /init (в различных дистрибутивах имя может отличаться).

Initramfs включает в себя базовый набор компонентов Linux-дистрибутива: стандартные системные каталоги /bin, /lib, /etc и так далее, простейший командный интерпретатор (обычно ash), набор команд BusyBox, несколько вспомогательных библиотек и набор модулей ядра (драйверов), предназначенных для работы с различными накопителями и файловыми системами.

Этапы загрузки Linux. Содержимое initramfs.

Смысл существования initramfs в том, чтобы решить проблему курицы и яйца: загрузить драйверы для подключения реальной корневой файловой системы до того, как она будет подключена. Именно это и происходит, когда система запускает скрипт /init. Он определяет установленные в систему накопители, загружает в ядро драйверы для работы с ними, а затем подключает нужный раздел нужного накопителя (о том, какой именно, ядро узнает благодаря переданному при загрузке параметру root) к корню, перекрывая таким образом содержимое initramfs. Затем скрипт запускает /sbin/init, с которого и начинается следующий шаг загрузки ОС.

Загрузка Linux. Скрипт init из initramfs.

3. Первичная инициализация

После того как скрипт /init из initramfs заканчивает свою работу, он запускает утилиту /sbin/init реальной файловой системы. С этого момента начинается инициализация самой ОС: загрузка необходимых драйверов, подключение файловых систем и разделов подкачки, настройка сетевых интерфейсов и запуск системных служб.

Исторически /sbin/init была очень простой утилитой, которая занималась только тем, что передавала управление определенным скриптам в зависимости от переданного ей параметра (скрипты располагались в каталогах /etc/rcX.d/, где X - уровень загрузки). Каждый скрипт отвечал за строго определенную операцию: один подключал перечисленные в файле /etc/fstab файловые системы, другой конфигурировал сетевые интерфейсы, еще один запускал демон cron (он занимается запуском периодических задач), еще один - демон syslog (он отвечает за прием журнальных сообщений и их запись на диск) и так далее. Этот стиль инициализации получил имя SystemV по имени версии UNIX, в которой он появился.

Достоинство стиля инициализации SystemV в его крайней простоте: его легко понять, его легко реализовать, с ним просто работать. Однако он абсолютно не подходит к современным реалиям.

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

Чтобы обойти эти проблемы, разработчики macOS в свое время создали альтернативу /sbin/init под названием launchd. Это без преувеличения гениальная разработка - launchd не только умеет контролировать жизненный цикл служб, но и запускает их лишь тогда, когда эти службы становятся нужны. Причем делает это весьма неординарным образом.

О том, как это происходит, мы еще поговорим. Сейчас в истории с launchd нас интересует другое, а именно то, что под его впечатлением был создан тот самый systemd. Сегодня systemd - часть большинства дистрибутивов Linux. Он гораздо сложнее /sbin/init и даже launchd, а в его конструкции нет и намека на уровни запуска и скрипты. Systemd оперирует понятием юнит (unit), который может олицетворять собой службу, операцию монтирования, операцию настройки сетевого интерфейса и другие.

Загрузка Linux. Конфиг юнита демона Tor.

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

4. Запуск демонов

Запуск служб (демонов) - один из ключевых моментов загрузки Linux. Особое место здесь занимает демон udev, без которого типичный дистрибутив Linux окажется неработоспособен.

Udev занимается управлением содержимым каталога /dev. Как мы все знаем, в Linux-системах этот каталог используется для хранения так называемых файлов устройств - особого типа файлов, олицетворяющих собой те или иные компоненты ПК. Именно с помощью файлов устройств в Linux происходит работа с оборудованием: читаешь файл /dev/sda1 и получаешь содержимое первого раздела первого жесткого диска, записываешь данные в /dev/fb0 и выводишь картинку на экран.

В раннем UNIX каталог /dev был статичен. Он содержал набор файлов на все случаи жизни: даже если в ПК не была установлена звуковая карта, файл /dev/dsp для вывода звука все равно существовал. Когда количество различного оборудования было невелико, а plug’n’play еще не родился, проблем не было: всего лишь десяток-другой файлов. Но со временем он все больше захламлялся и в итоге превратился в помойку.

Первый вариант решения этой проблемы состоял в том, чтобы подключить к /dev виртуальную файловую систему (devfs), содержимым которой управляло бы ядро. Оно находило все установленное оборудование и создавало файлы только для тех устройств, которые реально присутствуют в машине.

Такое решение до сих пор используется в macOS и FreeBSD, но разработчики Linux пошли другим путем. Здесь есть специальная файловая система sysfs, подключенная к каталогу /sys. Это нечто вроде подробной базы данных обо всех устройствах ПК, начиная от процессора и контроллера прерываний и заканчивая мышками и геймпадами.

Загрузка Linux. С помощью /sys можно не только получить информацию об устройствах, но и управлять ими.

С помощью /sys можно не только получить информацию об устройствах, но и управлять ими.

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

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

В среднестатистическом дистрибутиве Linux также есть другие демоны:

  • cron - отвечает за выполнение задач по времени. Может запускать команды через определенные промежутки или в четко заданное время. Простейший вариант использования - создание бэкапа по ночам;
  • cups - демон печати. Следит за очередью отправленных на печать документов и отдает их принтеру;
  • systemd-logind - управляет пользовательскими сессиями, позволяет быстро переключаться между сессиями, дает разрешение на автомонтирование устройств от лица пользователя и выполняет другие задачи;
  • dbus - демон, обслуживающий работу шины данных, позволяющей приложениям обмениваться информацией. В основном используется в средах рабочего стола и графических приложениях;
  • NetworkManager - конфигуратор сетевых интерфейсов. Используется только в десктопных вариантах дистрибутивов и может быть заменен на аналог. Например, wicd.

В большинстве своем демоны обмениваются информацией с приложениями и другими демонами с помощью UNIX-сокетов. Это канал коммуникации, закрепленный за файлом. Например, демон cups создает сокет /var/run/cups/cups.sock (в разных дистрибутивах расположение может отличаться). Записывая в него данные, можно отправлять документы на печать.

Именно эту особенность используют launchd и systemd, чтобы запускать демоны только по мере необходимости. Трюк состоит в том, чтобы заранее создать сокеты для всех системных демонов, а сами демоны запускать только тогда, когда кто-либо запишет данные в сокет; нет смысла запускать cups при загрузке или в любой другой момент, если никто не отправляет задания на печать.

5. X Window System и PAM

Последний этап загрузки - запуск менеджера логина. В консоли функцию менеджера логина выполняет связка утилит getty (обычно используется ее более продвинутый вариант agetty) и login. Getty представляет собой рудимент, оставшийся со времен мейнфреймов и удаленных терминалов (название расшифровывается как get teletype). Он выводит в терминал текстовое сообщение и затем запускает утилиту login, которая спрашивает логин и пароль пользователя. Когда пользователь вводит корректный пароль, login запускает от его имени шелл, указанный в файле /etc/passwd.

Графический менеджер логина называется дисплейный менеджер (Display Manager), и в каждой графической среде он свой. KDE использует менеджер KDM, GNOME - GDM, также есть возможность использовать универсальный дисплейный менеджер, например Slim. В любом случае задача дисплейного менеджера - вывести на экран окно запроса имени пользователя и пароля, а после авторизации либо запустить оконный менеджер напрямую, либо выполнить ряд команд, записанных в пользовательский файл ~/.xinitrc.

Этапы загрузки Linux. Дисплейный менеджер KDM в Debian.

Одновременно с запуском дисплейного менеджера запускается графическая система X Window System, а в современных дистрибутивах - Xorg. Это клиент-серверная система вывода графики на экран, где сервер отвечает за компоновку общей картинки, сформированной различными приложениями-клиентами. X Window System - не графическая среда, а лишь прослойка, позволяющая приложениям отправлять картинку на экран и получать события ввода от пользователя. Чтобы построить на ее основе графический интерфейс, также нужен менеджер окон (window manager), который позволит пользователю управлять окнами приложений.

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

Независимо от того, какой способ входа использует юзер, за контроль доступа всегда отвечает PAM. Это модульная система аутентификации пользователя, которая может проверять его личность самыми разными способами, попутно выполняя ряд проверок. По умолчанию PAM использует аутентификацию исключительно с помощью пароля, но, поменяв конфигурационные файлы /etc/pam.d, порядок аутентификации можно изменить, добавив к нему, например, необходимость приложить палец к сканеру отпечатков, вставить специальную флешку-ключ и даже использовать подтверждение с помощью смартфона. О том, как это сделать, мы уже писали.

Загрузка Linux. Конфигурационный файл PAM утилиты login

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

Вместо заключения

Так выглядит загрузка современного дистрибутива Linux. Некоторые не особо важные и не особо интересные детали я опустил, но попытался рассказать о самом главном. Если вдуматься, это не такой уж и сложный процесс, фактически операционная система готова принимать команды пользователя уже на этапе подключения initramfs, все остальное - запуск окружения, которое необходимо для полноценной работы пользователя.

Новое на сайте

>

Самое популярное