Опубликован: 18.04.2021 | Доступ: свободный | Студентов: 904 / 425 | Длительность: 04:36:00
Лекция 2:

Linux

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
BIOS or UEFI

В зависимости от использования системой BIOS или UEFI - различаются и процедуры запуска системы.

BIOS или Basic Input / Output System - это микрокод, хранящийся в энергонезависимой памяти на материнской плате, он выполняется каждый раз при включении компьютера. В процессе загрузки BIOS предполагает, что первые 440 байт в первом хранилище дисковой подсистемы - следуя порядку, находящемуся в настройках BIOS (автоматически определяется по очерёдности разъёмов подключения на плате) - являются первым этапом загрузчика. Первые 512 байт хранилища называются главной загрузочной записью MBR (Master Boot Record). Master Boot Record использует стандартную схему разделов DOS и дополняет первый этап загрузчика таблицей разделов файловой системы.

Итак, основные шаги загрузки системы с BIOS:

  1. Процесс POST (power-on self-test) выполняется для выявления простых отказов оборудования сразу после включения системы.
  2. BIOS подключает базовые компоненты системы для загрузки - видеовывод, клавиатура и дисковые носители.
  3. BIOS передает управление загрузчику находящемуся в MBR (первые 440 байт на первом носителе).
  4. Первый этап загрузчика вызывает вторую ступень, отвечающую за представление параметров загрузки ядру и его вызов.

UEFI или Unified Extensible Firmware Interface - имеет отличия от BIOS в некоторых ключевых моментах. Как и BIOS, UEFI также является микрокодом (firmware) и находится на материнской плате. Однако он может идентифицировать разделы и умеет работать с многими файловыми системами. UEFI не работает напрямую с MBR, а использует только настройки находящиеся в его энергонезависимой памяти (NVRAM). Хранимые настройки указывают на расположение UEFI-совместимых программ, называемых EFI-applications, которые будут выполняться автоматически или вызываться из меню загрузки. Приложения EFI могут быть загрузчиками, средствами выбора операционной системы, инструментами для диагностики и восстановления системы и так далее. Они должны находиться на обычном разделе устройства хранения и в совместимой файловой системе. Стандартные совместимые файловые системы - это FAT12, FAT16, FAT32 и вроде с недавнего времени exFAT(fat64) для блочных устройств и ISO-9660 для оптических носителей. Всё это в совокупности позволяет значительно проще использовать более сложные инструменты диагностики, так как не надо писать новый загрузчик для того чтобы, к примеру, протестировать оперативную память.

Раздел, содержащий приложения EFI, называется системным разделом EFI или просто ESP (efi system partition). Этот раздел не должен использоваться совместно с другими системными файловыми системами. Каталог EFI в разделе ESP содержит приложения, на которые указывают записи, сохраненные в NVRAM.

Основные шаги для загрузки системы с UEFI:

  1. POST (самотестирование при включении) процесс выполняется для выявления простых отказов оборудования сразу после включения машины.
  2. UEFI подключает базовые компоненты системы для загрузки - видеовывод, клавиатура и дисковые носители.
  3. UEFI считывает определения, хранящиеся в NVRAM, чтобы выполнить предопределенное приложения EFI, хранящегося в файловой системе раздела ESP. Обычно предопределенное приложение EFI является загрузчиком.
  4. Если предопределенное приложение EFI является загрузчиком, он загружает ядро для запуска операционной системы.

Стандарт UEFI также поддерживает функцию Secure Boot, которая позволяет выполнять только лицензированные приложения, то есть приложения EFI, авторизованные производителем оборудования. Эта функция повышает защиту от вредоносного программного обеспечения, но может затруднить установку операционных систем, на которые не распространяется гарантия производителя.

The Bootloader

Самый популярный загрузчик для Linux на архитектуре x86 - GRUB (Grand Unified Bootloader). Как только он вызывается BIOSом или UEFI, GRUB отображает список операционных систем, доступных для загрузки. Если список не выводится автоматически, то его можно вызвать, нажав Shift, во время вызова BIOSом GRUB. Если система использует UEFI то для вызова списка операционных системы можно использовать Esc.

В меню GRUB можно выбрать, какое из установленных ядер должно быть загружено, и передать ему новые параметры. Большинство параметров ядра это key/value значения. Пример нескольких параметров ядра.

acpi - Включает / отключает поддержку ACPI. acpi=off отключит поддержку ACPI.

init - Изменяет точку входа в систему. К примеру вы можете выставить init=/bin/bash установит оболочку Bash в качестве точки входа. полезно для ремонта системы.

systemd.unit - Устанавливает цель systemd для активации. Например, systemd.unit=graphical.target. Systemd также принимает числовые уровни запуска, определенные для инициализации в стиле SysV. Например, чтобы активировать уровень выполнения 1, необходимо включить только цифру 1 или букву S (сокращение от "single") в качестве параметра ядра.

mem - Устанавливает объем доступной оперативной памяти для системы. Этот параметр полезен для виртуальных машин, для ограничения оперативной памяти гостевым системам.

maxcpus - Ограничивает количество процессоров (или ядер процессора), видимых системе.

quiet - ****Скрывает большинство загрузочных сообщений.

vga - Выбирает режим видео. Параметр vga=ask покажет список доступных режимов на выбор.

root - Устанавливает корневой раздел, отличный от предварительно настроенного в загрузчике. Например, root=/dev/sda3.

rootflags - Mount параметры для корневой файловой системы.

ro - Выполняет первоначальное монтирование корневой файловой системы доступным только для чтения.

rw - Разрешает запись в корневую файловую систему во время первоначального монтирования.

Изменение параметров ядра обычно не требуется, но может быть полезно для обнаружения и решения проблем, связанных с операционной системой. Параметры ядра необходимо добавить в файл /etc/default/grub в строке GRUB_CMDLINE_LINUX, чтобы сделать их постоянными при перезагрузках. Новый файл конфигурации для загрузчика должен создаваться каждый раз при изменении /etc/default/grub, что выполняется командой grub-mkconfig -o /boot/grub/grub.cfg. После запуска операционной системы параметры ядра, используемые для загрузки текущего сеанса, доступны для чтения в файле /proc/cmdline.

System Initialization

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

Исторически сложилось, что существует множество способов запуска скриптов и демонов, вследствие чего появилось несколько способов инициализации системы. Хотя в принципе в текущий момент всё свелось к единому systemd.

Инициализация операционной системы начинается, когда загрузчик загружает ядро в ОЗУ. Затем ядро берет на себя управление и начинает конфигурировать основные части операционной системы, такие как базовая конфигурация оборудования и адресация памяти.

Далее ядро монтирует initramfs. Initramfs - это временная файловая система используемая для загрузки операционной системы. В initramfs содержится минимально необходимые модули чтобы ядро могло получить доступ к корневой файловой системе и продолжить загрузку оттуда.

Как только будет доступна корневая файловая система, ядро смонтирует все точки монтирования в файловой системе, которые оно возьмёт из файла /etc/fstab, а затем передаст управление системе указанной как точка входа, стандартной - утилите с именем init. Программа init отвечает за запуск всех сценариев инициализации и системных демонов. Существуют различные реализации таких системных инициаторов, помимо традиционного init, такие как systemd и Upstart (на самом деле всё кроме systemd безнадежно устарело). После загрузки программы init файл initramfs удаляется из ОЗУ.

Коротко рассмотрим основные стили инициализации:

  • SysV standard - менеджер служб, основанный на стандарте SysVinit, контролирует, какие демоны и ресурсы будут доступны используя концепцию уровней запуска. Уровни выполнения пронумерованы от 0 до 6 и разработаны разработчиками дистрибутива для выполнения определенных целей. Единственные определения уровней выполнения, общие для всех дистрибутивов, - это уровни выполнения 0, 1 и 6.
  • systemd ****- это современный менеджер систем и служб с уровнем совместимости для команд и уровней запуска SysV. Менеджер systemd имеет параллельную структуру, использует сокеты и D-Bus (система межпроцессного взаимодействия) для активации служб, выполнения демона по требованию, мониторинга процессов с помощью cgroups, поддержки snapshot'ов, восстановления системной сессии, управления точкой монтирования и управления службами на основе зависимостей. В текущее время практически все дистрибутивы имеют systemd в качестве основного системного менеджера.
  • Upstart - Как и systemd, Upstart заменяет init. Цель применения Upstart - ускорить процесс загрузки за счет распараллеливания процесса загрузки системных служб. Upstart использовался в дистрибутивах на основе Ubuntu в прошлых выпусках, но сегодня уступил место ystemd.
< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Рустам Тагаев
Рустам Тагаев

Очень много ошибок в тестах. Другие люди их тоже нашли. Но прошло очень много времени и похоже что ошибки не собираются исправлять. Очень обидно что на такой большой платформе такая медленная реакция.