Исследуем процесс загрузки Linux
(C) В.А.Костромин, 2007
(версия файла от 16.12.2007 г.)
Этап 2: Master Boot Record и Boot Record
Итак, BIOS нашел загрузочное устройство и передал управление программе, которая находилась в самом первом секторе этого диска или дискеты (физический адрес: цилиндр 0, головка 0, сектор 1). Теперь эта программа загружена в память и именно она управляет ходом дальнейшей загрузки. Со времен MS-DOS эту программу принято называть загрузочной записью (Boot Record), а первый сектор любого диска или дискеты — загрузочным сектором (Boot Sector).
Примечание: На всех стандартно отформатированных дискетах, даже на тех, которые не являются загрузочными, Boot Sector содержит исполняемый код. Этот код необходим хотя бы для выдачи на экран информационого сообщения. Текст этого сообщения различается в зависимости от того, в какой операционной системе форматировалась дискета. В MS-DOS это было сообщение «Non-system disk or disk error» (вероятно знакомое вам). Жесткий диск, отформатированный в NT (несистемный), сообщал «NTLDR is missing».
Как известно, размер сектора на устройствах долговременного хранения данных для IBM-совместимых компьютеров равен всего-навсего 512 байтам. В принципе существует возможность записать в эти 512 байт программу, обеспечивающую загрузку ядра операционной системы. Как сказано в книге Т.Айвазяна [8], существует три варианта загрузки ядра Linux:
Мы будем далее рассматривать только второй вариант, как наиболее распространенный.
С появлением жестких дисков большого объема, которые стали разбивать на разделы, небольшой загрузчик, размещаемый в загрузочном секторе и загружающий непосредственно ядро, перестал справляться с возросшим объемом задач. Ведь теперь надо было не просто загрузить файл с определенного физического адреса, а вначале найти загрузочный раздел. К тому же часть места, отведенного для загрузочной записи, отняла таблица разделов жесткого диска. Поэтому старая загрузочная запись была перенесена в первый сектор так называемого «активного» раздела, а в самый первый сектор на жестком диске стали записывать другую программу, задачей которой было найти «активный» раздел и загрузить программу из этого раздела. Первый сектор жесткого диска стали называть главным загрузочным сектором (а соответствующую программу — главной загрузочной записью или Master Boot Record, MBR). На жёстком диске MBR находится по тому же физическому адресу, что и BOOT-сектор на дискете (цилиндр 0, сторона 0, сектор 1). Его структура представлена в табл. 1
Таблица 1. Структура главного загрузочного сектора.
Главная загрузочная запись (Master Boot Record)
Таблица разбиения диска
«Магическое число» (0x55AA)
«Магическое число» 0x55AA, как мы уже знаем, является признаком того, что диск является загрузочным. Содержащаяся в MBR такого диска таблица разбиения определяет 4 первичных раздела жесткого диска (подробнее о ее устройстве вы можете прочитать в статье [9]). А первые 446 байт MBR содержат небольшую программу (которая нас в данный момент интересует), а также текст сообщений об ошибках, которые могут возникнуть в ходе ее выполнения.
Основная задача главной загрузочной записи состоит в том, чтобы найти и загрузить в оперативную память собственно загрузчик операционной системы. MBR сканирует таблицу разделов (partition table) в поисках первого (обычно он и единственный) активного раздела (раздела, помеченного как «загрузочный»). Если в таблице разделов активный раздел не обнаружен или хотя бы один раздел содержит неправильную метку, а также если несколько разделов помечены как активные, выдаётся соответствующее сообщение об ошибке. Когда активный раздел найден, программа считывает в оперативную память первый сектор активного раздела.
Примечания: 1. Ход дальнейших действий несколько различается в зависимости от того, с какого устройства считан этот сектор. Мы сейчас будем рассматривать только «основную» ветку — когда первым обнаруженным загрузочным устройством оказался жесткий диск и загрузка производится с него. Варианты загрузки с дискеты, CD-ROM или flash-диска пока не рассмотриваются. Если будет время и желание, я вернусь к этому вопросу позже, в отдельном разделе.
2. Задание таблицы разделов в MBR (как и использование стандартных BIOS) уже давно ограничивает возможности операцтонных систем. Поэтому фирма Intel разработала Extensible Firmware Interface (EFI, Расширяемый Микропрограммный Интерфейс) — стандарт, призванный придти на смену отжившего свой век PC BIOS. Частью этого стандарта является GPT призван стать стандартным форматом размещения таблицы разделов на физическом жестком диске. Частью этого стандарта является GUID Partition Table (GPT) — новый формат таблицы разделов жесткого диска. GPT призван стать стандартным форматом размещения таблицы разделов на физическом жестком диске. Подробнее о GPT читайте в заметке «GUID Partition Table (новая таблица разделов)». Однако в настоящем обзоре EFI не рассматривается, мы будем исследовать традиционный способ загрузки ОС с использованием MBR, который пока что преодладает в реальной жизни.
3. Поскольку загрузочная запись каждого диска содержит исполняемый код, сохраняется возможность заражения загрузочными вирусами компьютера, на котором установлена ОС Linux. Главная загрузочная запись имеет один и тот же формат для всех PC-совместимых компьютеров. И если эта программа содержит код, который считывает самый последний сектор жесткого диска и выполняет содержащийся в нем код, а затем заставляет систему выполнить код из первого сектора активного раздела, вы вряд ли заметите сразу, что что-то идет не так, как надо. Вирусы, которые ведут себя подобным образом, принято называть «загрузочными», именно потому, что они размещаются в загрузочной записи и могут нанести какой-то вред вашей системе только в том, случае, если вы попытаетесь загрузиться с зараженного диска. Этот тип вируса может воздействовать на любой PC-совместимый компьютер. Некоторые типы компьютеров (точнее, некоторые типы BIOS) обеспечивают защиту от данного вида вирусов тем, что запись в загрузочный сектор может быть запрещена. Однако эта мера позволяет защититься только от старых типов загрузочных вирусов, поскольку более новые научились изменять CMOS, разрешая запись в MBR. Что касается Linux-компьютеров, то опасность «подцепить» загрузочный вирус существует только в том случае, если по какой-то причине начинается загрузка с дискеты (скорее всего, случайно оставленной в дисководе). То есть, необходимо быть внимательным и при включении компьютера позаботиться о том, чтоб в дисководе не было дискет.
Практически все загрузчики современных операционных систем состоят из двух частей: загрузчика первого этапа (или первичного загрузчика), который имеет достаточно малый размер, чтобы разместиться в загрузочном секторе, и значительно большего по объему загрузчика 2-го этапа (или вторичного загрузчика), который может храниться уже где угодно на загрузочном носителе, обычно в разделе, содержащем корневую файловую систему. Загрузчик первого этапа может быть размещен как в главном загрузочном секторе диска, так и в загрузочном секторе активного раздела. Если вам приходилось устанавливать Linux, вы знаете, что программа инсталляции предоставляет пользователю такой выбор. Будем пока для определенности считать, что загрузчик 1-го этапа мы поместили в первый сектор активного раздела.
Итак, главная загрузочная запись отыскала активный раздел и загрузила из него в память загрузчик первого этапа, который теперь отвечает за продолжение процесса загрузки. Загрузчик первого этапа имеет такой же небольшой размер, как и код загрузочной записи диска, то есть не более 446 байт. Поэтому и сделать он может не больше, а именно — только загрузить основной загрузчик. Еще более затрудняет ситуацию то, код загрузчика первого этапа пока не имеет доступа к файловой системе и, следовательно, определяет расположение программ на диске, используя только информацию о физических секторах и низкоуровневые вызовы BIOS. Поэтому эта крохотная программа имеет единственной целью своего существования загрузку и запуск на выполнение загрузчика второго этапа.
(Если вы не хотите читать приводимое ниже дополнение про загрузку в NT, то вперед. ).
Дополнение. В случае, когда первичный загрузчик от Linux установлен не в MBR, а в загрузочный сектор одного из разделов, в MBR, скорее всего осталась программа первичной загрузки, создаваемая программой FDISK от Microsoft. Поэтому приведу в качестве дополнения описание того, как работает первичный загрузчик Windows-систем (заимствованное из статьи [5]), которое помогает понять, как происходит процесс загрузки.
Код, содержащийся в главной загрузочной записи, выполняет следующие действия:
- сканирует таблицу разделов (partition table) в поисках первого (обычно он и единственный) активного раздела (раздела, помеченного как «загрузочный»). Если в таблице разделов активный раздел не обнаружен или хотя бы один раздел содержит неправильную метку, а также если несколько разделов помечены как активные, выдаётся соответствующее сообщение об ошибке;
- когда активный раздел найден, программа запоминает его физическое размещение на диске, используя запись в соответствующей строке таблицы разделов диска;
- затем программа первичного загрузчика перемещает свой код по адресам от 0600 до 07FF (если вы помните, первоначально она размещалась по смещению 7C00) и продолжает выполняться оттуда;
- код загрузочного сектора раздела (это уже код загрузчика файловой системы, размещенной в этом разделе) загружается в память по смещению 7C00 (до 7DFF).
- управление передается загрузчику файловой системы (по адресу 7C00).
В MS DOS программа из загрузочного сектора активного раздела просматривает блок параметров BIOS в поисках расположения корневого каталога, а затем копирует из него в память системный файл IO.SYS (который, по сути, является частью DOS) и передаёт ему управление.
В системе Windows NT код из загрузочного сектора активного раздела ищет расположение на диске файла NTLDR, делая это следующим образом:
- Ищет блок параметров BIOS (the BIOS Parameter Block) и расширенный блок параметров BIOS (Extended BIOS Parameter block). Использует эти данные для того, чтобы найти NTLDR на первом («загрузочном») диске.
- Загружает NTLDR в память.
- Запускает его.
Если NTLDR не найден, выдается сообщение «Could not find NTLDR».
Обратите внимание! Местоположение NTLDR ищется на первом диске, даже если код загрузочного сектора хранится на другом диске (что может иметь место в тех случаях, когда используется MBR не от Microsoft). Хотя это выглядит достаточно просто, следствием того факта, что NTLDR ищется на первом диске, является то, что если вы пытаетесь установить NT на второй диск и процедура инсталляции не находит на первом диске свободного места для установки загрузочного сектора, файла NTLDR и других файлов (что может иметь место, если на первом диске уже установлена другая ОС, которую NT не может распознать), будет выдано примерно такое сообщение об ошибке: «xxxx MB disk0 at id0 on bus0 on atapi does not contain a partition suitable for starting Windows NT». (Для SCSI-дисков слова немного отличаются, но суть та же). Это сообщение можно перевести на более понятный язык примерно следующим образом: «Были использованы данные из блока параметров BIOS, но загрузка с того раздела диска, на который указывает ссылка, невозможна».
Источник
Введение в процесс загрузки и запуска Linux
Оригинал: An introduction to the Linux boot and startup processes
Автор: David Both
Дата публикации: 20 февраля 2017 года
Перевод: А. Кривошей
Дата перевода: март 2018 г.
Понимание процессов загрузки и запуска Linux важно для того, чтобы понимать, как правильно настроить систему, или решить проблемы с загрузкой. В этой статье представлен обзор последовательности загрузки системы с использованием загрузчика GRUB2 и последовательности запуска, выполняемой системой инициализации systemd .
На самом деле, есть две последовательности событий, которые необходимы для загрузки Linux-компьютера и делают его пригодным для использования: загрузка и запуск. Последовательность загрузки начинается, когда компьютер включен, и завершается, когда инициализируется ядро и запускается systemd. Затем процесс запуска завершает задачу приведения компьютера Linux в рабочее состояние.
В целом, процесс загрузки и запуска Linux довольно прост для понимания. Он состоит из следующих этапов, которые более подробно будут описаны в следующих разделах.
— BIOS POST;
— загрузчик (GRUB2);
— инициализация ядра;
— запуск systemd, родительского компонента всех процессов.
Обратите внимание, что в этой статье рассматриваются GRUB2 и systemd, поскольку они являются текущим загрузчиком и системой инициализации для большинства главных дистрибутивов. Ранее использовались другие варианты таких программ, и они все еще используются в некоторых дистрибутивах.
Процесс загрузки
Процесс загрузки может быть инициирован одним из нескольких способов. Во-первых, если питание отключено, его включение запустит процесс загрузки. Если компьютер уже запущен, локальный пользователь, включая root или обычного пользователя, может программно инициировать последовательность загрузки с помощью графического интерфейса или командной строки для перезагрузки компьютера. Сначала компьютер будет выключен, а затем перезагружен.
BIOS POST
Первый этап процесса загрузки Linux на самом деле не имеет ничего общего с Linux. Это аппаратная часть процесса загрузки и она одинаковая для любой операционной системы. Когдана компьютер подается питание, он запускает процедуру POST (Power On Self Test), которая является частью BIOS (Basic I/O System).
Когда IBM разработала первый компьютер, еще в 1981 году, для инициализации аппаратных компонентов был разработан BIOS. POST является частью BIOS, задачей которого является обеспечение правильного функционирования оборудования. Если POST не сработал нормально, компьютер может не использоваться, поэтому процесс загрузки не будет продолжен.
BIOS POST проверяет базовую работоспособность аппаратного обеспечения, а затем выдает прерывание BIOS, INT 13H, которое находит загрузочные секторы на всех подключенных загрузочных устройствах. Первый загрузочный сектор с правильной загрузочной записью, который он находит, загружается в ОЗУ, а затем управление передается коду, загруженному из загрузочного сектора.
Загрузочный сектор — это фактичеки первый этап загрузчика. Существует три загрузчика, используемые большинством дистрибутивов Linux: GRUB, GRUB2 и LILO. GRUB2 является самым современным и используется сегодня гораздо чаще, чем более старые варианты.
GRUB2
GRUB2 означает «GRAND Unified Bootloader, версия 2», и сегодня он является основным загрузчиком для большинства дистрибутивов Linux. GRUB2 — это программа, которая делает компьютер достаточно умным, чтобы найти ядро операционной системы и загрузить его в память. Поскольку проще писать и говорить GRUB, чем GRUB2, я буду использовать термин GRUB в этом документе, но при этом буду ссылаться на GRUB2, если не указано иное.
GRUB был разработан для совместимости с спецификацией multiboot, которая позволяет GRUB загружать множество версий Linux и других бесплатных операционных систем; он также может загружать загрузочную запись проприетарных операционных систем.
GRUB также позволяет пользователю выбирать загрузку одного из нескольких разных ядер для любого дистрибутива Linux. Это дает возможность загрузиться с предыдущей версией ядра, если обновленная версия работает некорректно или несовместима с частью программного обеспечения. GRUB можно настроить с помощью файла /boot/grub/grub.conf.
GRUB1 теперь считается устаревшим и был заменен в большинстве современных дистрибутивов на GRUB2, который является переписанным GRUB1. Дистрибутивы на основе Red Hat были обновлены до GRUB2, начиная с Fedora 15 и CentOS/RHEL 7. GRUB2 обеспечивает ту же функциональность, что и GRUB1, но GRUB2 также обеспечивает большую гибкость на этапе предварительной загрузки. GRUB2 настраивается с помощью файла /boot/grub2/grub.cfg.
Основная функция GRUB заключается в том, чтобы загрузить ядро Linux в память и запустить его. Обе версии GRUB работают в целом одинаково и процесс включает те же три этапа, но я буду использовать GRUB2. Настройка GRUB или GRUB2 и использование команд GRUB2 выходит за рамки данной статьи.
Хотя GRUB2 официально не использует нотацию этапов для трех этапов загрузки GRUB2, удобно обращаться к ним таким образом, что я и буду делать в этой статье.
Этап 1
Как упоминалось в разделе POST BIOS, в конце POST BIOS просматривает прикрепленные диски в поиске загрузочной записи, обычно находящейся в главной загрузочной записи (MBR), загружает первую обнаруженную в ОЗУ, а затем начинает выполнение загрузочной записи. Код начальной загрузки, т. е. этап 1 GRUB2, очень мал, поскольку он должен помещаться в первый 512-байтовый сектор на жестком диске вместе с таблицей разделов. Общий объем пространства, выделенного для реального кода начальной загрузки в классическом общем MBR, составляет 446 байтов. Файл размером 446 байт для этапа 1 называется boot.img и не содержит таблицу разделов, которая добавляется в загрузочную запись отдельно.
Поскольку загрузочная запись должна быть такой маленькой, она не очень умна и не понимает структуры файловой системы. Поэтому единственной целью этапа 1 является нахождение и загрузка этапа 1.5. Для этого этап 1.5 GRUB должен быть расположен в пространстве между самой загрузочной записью и первым разделом на диске. После загрузки этапа 1.5 GRUB в ОЗУ, этап 1 передает управление этапу 1.5.
Этап 1.5
Как упоминалось выше, этап 1.5 GRUB должен быть расположен в пространстве между самой загрузочной записью и первым разделом на диске. По техническим причинам исторически это пространство не использовалось. Первый раздел на жестком диске начинается в секторе 63 с MBR в секторе 0, что оставляет 62 512-байтовых секторов — 31 744 байта, в которых хранится файл core.img, который является этапом 1.5 GRUB. Размер файла core.img равен 25389 байт, поэтому между MBR и первым дисковым разделом имеется много свободного места для его хранения.
Из-за большего количества кода, который может быть задействован для этапа 1.5, он может содержать несколько драйверов для распространенных файловых систем, таких как EXT и других файловых систем Linux, FAT и NTFS. GRUB2 core.img гораздо более сложный и интеллектуальный по сравнению с более старым этапом 1.5 GRUB1. Это означает, что этап 2 GRUB2 может быть расположен на стандартной файловой системе EXT, но не может быть расположен на логическом томе. Таким образом, стандартное расположение файлов этапа 2 — файловая система /boot, а именно /boot/grub2.
Обратите внимание, что каталог /boot должен находиться в файловой системе, поддерживаемой GRUB. Не все файловые системы подходят для него. Функция этапа 1.5 — загрузить драйвера файловой системы, необходимыми для поиска файлов этапа 2 в файловой системе /boot и загрузки необходимых драйверов.
Этап 2
Все файлы этапа 2 GRUB находятся в каталоге /boot/grub2 и нескольких его подкаталогах. GRUB2 не имеет файла образа, как этапы 1 и 2. Вместо этого он состоит в основном из модулей ядра, которые загружаются по мере необходимости из каталога /boot /grub2/ i386-pc.
Функция этапа 2 GRUB2 состоит в том, чтобы найти и загрузить ядро Linux в оперативную память и переключить управление компьютером на ядро. Ядро и связанные с ним файлы находятся в каталоге /boot. Файлы ядра могут быть идентифицированы, поскольку все их имена начинаются с vmlinuz. Вы можете просмотреть содержимое каталога /boot, чтобы увидеть установленные в вашей системе ядра.
GRUB2, как и GRUB1, поддерживает загрузку из одного из ядер Linux. Менеджер пакетов Red Hat, DNF, поддерживает сохранение нескольких версий ядра, поэтому, если возникает проблема с самой новой версией, можно загрузить более старую версию ядра. По умолчанию GRUB предоставляет предварительное загрузочное меню установленных ядер, включая вариант безопасной загрузки и, если он настроен, вариант восстановления.
Этап 2 GRUB2 загружает выбранное ядро в память и передает управление компьютером ядру системы.
Все ядра хранятся в формате самораспаковывающегося архива для экономии места. Ядра расположены в каталоге /boot вместе с исходным образом RAM-диска и картами устройств жестких дисков.
После того, как выбранное ядро загрузится в память и начнет выполнение, оно должно сначала извлечь себя из архива, прежде чем сможет выполнить любую полезную работу. После того, как ядро извлекло себя, оно загружает systemd, заменившую старую программу SysV init, и переключает управление на нее.
Это конец процесса загрузки. К этому моменту ядро Linux и systemd работают, но не могут выполнять какие-либо продуктивные задачи для конечного пользователя, потому что ничего не работает.
Процесс запуска
Процесс запуска следует за процессом загрузки и приводит компьютер Linux в рабочее состояние, в котором он может использоваться для продуктивной работы.
systemd
systemd является матерью всех процессов, и она отвечает за то, чтобы привести систему Linux в состояние, в котором на ней можно работать. Некоторые из ее функций, которые намного шире, чем у старой программы init, предназначены для управления различными аспектами работающей системы Linux, включая создание файловых систем, а также запуск и управление системными службами, необходимыми для повседневной работы Linux. Любая из задач systemd, не относящихся к последовательности запуска, выходит за рамки этой статьи.
Во-первых, systemd монтирует файловые системы, заданные в /etc/fstab, включая любые файлы или разделы подкачки. На этом этапе она может получить доступ к конфигурационным файлам , расположенным в /etc, включая ее собственный. Она использует свой конфигурационный файл , /etc/systemd/system/default.target, для определения состояния (цели), в которые он должен загружать систему. Файл default.target является только символической ссылкой на настоящий целевой файл. Для рабочей станции или настольных компьютеров это обычно будет graphical.target, что эквивалентно уровню запуска 5 в старой системе инициализации SystemV. Для сервера по умолчанию, скорее всего, это будет multi-user.target, который похож на уровень запуска 3 в SystemV. Emergency.target похож на однопользовательский режим.
Обратите внимание, что цели и службы являются единицами systemd.
В таблице 1 ниже представлено сравнение целей systemd со старыми уровнями запуска SystemV. Алиасы целей предоставляются systemd для обратной совместимости. Алиасы целей позволяют сценариям и многим системным администраторам, таким как я, использовать команды SystemV, такие как init 3, для изменения уровней запуска. Конечно, команды SystemV для интерпретации и выполнения пересылаются в systemd.
Уровень SystemV | Цели target | Алиасы целей systemd | Описание |
---|---|---|---|
— | halt.target | — | Выключает систему без выключения питания. |
0 | poweroff.target | runlevel0.target | Выключает систему с выключением питания. |
S | emergency.target | — | Однопользовательский режим. Службы не работают; файловые системы не смонтированы. Это базовый уровень работы с только аварийной оболочкой, запущенной на главной консоли, чтобы пользователь мог взаимодействовать с системой. |
1 | rescue.target | runlevel1.target | Базовая система, включающая смонтированные файловые системы только с основными запущенными службами и аварийной оболочкой на главной консоли. |
2 | — | runlevel2.target | Многопользовательский режим без NFS, но с запущенными остальными консольными службами |
3 | multi-user.target | runlevel3.target | Все службы работают, но доступен только интерфейс командной строки. |
4 | — | runlevel4.target | Не используется |
5 | graphical.target | runlevel5.target | Многопользовательский режим с графическим интерфейсом |
6 | reboot.target | runlevel6.target | Перезагрузка |
— | default.target | — | Эта цель всегда является символической ссылкой на multi-user.target или graphical.target. system всегда использует default.target для запуска системы. default.никогда не должна ссылаться на halt.target, poweroff.target или reboot.target. |
Таблица 1: Сравнение уровней запуска SystemV с целями systemd.
Каждая цель имеет набор зависимостей, описанных в конфигурационном файле. systemd запускает необходимые зависимости. Эти зависимости — службы, необходимые для запуска хоста Linux на определенном уровне функциональности. Когда все зависимости, перечисленные в целевых конфигурационных файлах, загружаются и запускаются, система работает на этом целевом уровне.
systemd также просматривает устаревшие каталоги инициализации SystemV, чтобы узнать, имеются ли там файлы запуска. Если они есть, systemd использует их в качестве конфигурационных файлов для запуска служб, описанных в этих файлах. Устаревшая сетевая служба является хорошим примером одного из тех случаев, когда в Fedora все еще используются файлы запуска SystemV.
Рисунок 1, ниже, скопирован непосредственно с man-страницы bootup. Он показывает общую последовательность событий во время запуска systemd и основные требования к их порядку для обеспечения успешного запуска.
Цели sysinit.target и basic.target можно рассматривать как контрольные точки в процессе запуска. Хотя одной из целей разработки systemd было обеспечение одновременного запуска системных служб, все еще есть определенные службы и функциональные цели, которые необходимо запустить, прежде чем можно будет запустить другие службы и цели. Эти контрольные точки не могут быть пройдены до тех пор, пока не будут выполнены все требуемые службы и цели.
Таким образом, sysinit.target достигается, когда завершены все компоненты, от которых он зависит. Монтирование файловых систем, настройка файлов подкачки, запуск udev, установка генератора случайных чисел, запуск низкоуровневых служб и настройка криптографических служб, если одна или несколько файловых систем зашифрованы, должны быть завершены, но внутри sysinit.target эти задачи могут выполняться параллельно.
Sysinit.target запускает все низкоуровневые службы и компоненты, необходимые для минимальной функциональности системы, и которые будут необходимы для перехода на basic.target.
Рисунок 1: Карта запуска systemd.
После того, как будет выполнен sysinit.target, systemd запустит basic.target, запуская все компоненты, необходимые для его выполнения. basic.target обеспечивает некоторую дополнительную функциональность, запуская компоненты, которые необходимы для следующей цели. Они включают настройку таких аспектов, как пути к различным исполняемым каталогам, коммуникационные сокеты и таймеры.
Наконец, могут быть инициализированы цели пользовательского уровня, multi-user.target или graphical.target. Обратите внимание, что многопользовательский режим должен быть достигнут до того, как будут выполнены графические зависимости.
Подчеркнутые цели на рисунке 1 являются обычными целями запуска. Когда достигнута одна из этих целей, запуск завершен. Если значением по умолчанию является параметр multi-user.target, вы должны увидеть логин в текстовом режиме на консоли. Если значением по умолчанию является graphical.target, вы должны увидеть графический экран входа в систему; конкретный экран входа, который вы видите, будет зависеть от используемого по умолчанию диспетчера сеансов.
Проблемы
Недавно мне пришлось менять ядро по умолчанию на компьютере под Linux, использующем GRUB2. Я обнаружил, что некоторые из команд, похоже, не работают должным образом, или может быть я использовал их неправильно. Я еще не уверен в причинах, нужно сделать еще несколько тестов.
Команда grub2-set-default неправильно настроила индекс ядра по умолчанию в файле /etc/ default/grub, поэтому нужное мне альтернативное ядро не загрузилось. Далее я вручную изменил /etc/default/grub GRUB_DEFAULT=saved на GRUB_DEFAULT=2, где 2 — индекс установленного ядра, которое я хотел загрузить. Затем я запустил команду grub2-mkconfig> /boot/grub2/grub.cfg, чтобы создать новый конфигурационный файл grub. Этот обходной метод сработал так, как я ожидал, и загрузил альтернативное ядро.
Заключение
GRUB2 и система systemd являются ключевыми компонентами на этапах загрузки и запуска большинства современных дистрибутивов Linux. Эти два компонента работают вместе, чтобы сначала загрузить ядро, а затем запустить все системные службы, необходимые для создания полнофункциональной системы Linux.
Источник