Bios в linux как выглядит

Обновлено: 05.07.2024

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

Раньше для этих целей использовался набор программ BIOS, но этот стандарт сейчас считается устаревшим, а ему на замену пришла технология UEFI, которая поддерживает защищенную загрузку, имеет приятный графический интерфейс настройки и много других преимуществ. Большинство современных материнских плат и ноутбуков выпускаются уже с UEFI. В этой статье мы рассмотрим как выполняется установка Linux на UEFI и с какими проблемами вы можете столкнуться.

Установка Linux на Legasy BIOS

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

Чтобы включить режим Legasy BIOS надо войти в настройки BIOS/UEFI с помощью кнопки F2, Del или Shift+F2 и найти там соответствующий пункт. Например, у меня этот пункт находится на вкладке Boot. Здесь нужно выбрать режим загрузки UEFI или Legasy.


После сохранения настроек вы можете устанавливать свою операционную систему как обычно. Если же вас такой вариант не устраивает, дальше мы рассмотрим как установить Linux именно на UEFI.

Установка Linux на платы с UEFI

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

Шаг 1. Запись Linux на флешку UEFI в Linux

Для записи образа на флешку в Linux лучше использовать утилиту Etcher. Программа запишет носитель, который можно загружать как в UEFI, так и в обычной системе. После запуска программы надо выбрать образ системы:

Затем карту памяти и дождаться завершения записи:

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

Затем распакуйте содержимое установочного образа в корень флешки:

sudo mount /путь/к/образу.iso /mnt
sudo mount /dev/sdb1 /media/flash/
sudo cp -r /mnt/* /media/flash

Здесь /dev/sdb1 - имя раздела вашей флешки. Вы можете выполнить все эти действия в файловой менеджере. Не обязательно использовать команды. Далее нужно установить на раздел флешки, куда вы распаковали свои файлы два флага - boot и lba. Это можно сделать с помощью Gparted. Просто запустите программу, выберите в списке дисков свою флешку:

Нажмите правой кнопкой по разделу, выберите Управление флагами и установите галочки на против флагов boot и lba.

Каким бы способом вы не пользовались, ваша флешка готова и вы можете с нее загружаться. Большинство образов Linux уже содержат загрузчик EFI и прошивка компьютера его найдет при следующей перезагрузке.

Шаг 1 (альтернатива). Запись Linux на флешку UEFI в Windows

Если вы решили записать Linux в Windows, то лучше использовать утилиту Rufus. В ней необходимо выставить такие параметры:

  • Схема раздела и тип системного интерфейса: GPT для компьютеров с UEFI;
  • Файловая система: FAT32.

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

Шаг 2. Выбор порядка загрузки

Для того чтобы ваша система смогла загрузиться с только что записанной флешки нужно отключить UEFI Secure Boot. Этот режим позволяет загружаться только подписанным операционным системам, а подписанными являются только ОС от Microsoft. Поэтому для Linux этот режим надо отключать. У меня эта настройка тоже есть на вкладке Boot:


Кроме того, надо установить на первое место флешку:


После этого можно перезагружать компьютер и приступать к установке. Если у вас появилось вот такое окно, значит все хорошо. Здесь надо выбрать "Try Ubuntu without installing", это обязательное условие:

Я не буду описывать все шаги установки, которые надо выполнить, они ничем не отличаются от установки обычной ОС, отличие только в установке загрузчика и разметке диска. На нем и остановимся далее.

Шаг 3. Разметка диска для UEFI

У UEFI в этом плане есть несколько отличий от BIOS. Во первых, это использование таблицы разделов диска GPT. Это новая технология, которая имеет массу преимуществ над MBR, среди которых очень большое количество первичных разделов (в MBR только четыре), восстановление при повреждениях, и многое другое. Подробнее о том чем GPT отличается от MBR читайте в отдельной статье. Второе отличие в том, что файлы загрузчика операционной системы больше не хранятся в первых 512 байтах жесткого диска. Все они хранятся на отдельном разделе, который называется ESP.

Перед тем, как нажать "Install Ubuntu" желательно подготовить диск с помощью Gparted. Откройте утилиту из главного меню образа. Затем выберите Device -> Create Partition Table:


В списке выберите таблицу разделов GPT:


Дальше переходим к созданию разделов.

Шаг 4. Создание раздела ESP

В Gparted нам необходимо создать только раздел ESP для UEFI. Для этого выберите "Незамеченно", а затем нажмите по нему правой кнопкой и выберите "New":


В качестве файловой системы для раздела надо выбрать FAT32, размер - 100 мегабайт. Далее нажмите кнопку "Apply" для применения изменений.

Затем нажмите "Manage Flags" и установите галочки напротив флагов "boot" и "efi".


Далее переходим к установщику Ubuntu.

Шаг 5. Вариант разметки дисков

Когда система предложит выбрать способ разметки можно позволить системе все разметить автоматически. Но это только в том случае, если вы у вас уже не установлена какая-либо операционная система. Иначе выбираем "Свой вариант":


Шаг 6. Назначение разделов

Если вы выбрали другой вариант разметки, то перед вами откроется меню со списком всех разделов. Найдите внизу окна "Устройство для установки загрузчика" и выберите в списке раздел для EFI.


Затем кликните по разделу для EFI в списке и выберите "Системный раздел EFI":


Далее можно продолжить установку как обычно. Вам надо создать корневой раздел, и по желанию вы можете создать раздел для загрузчика, подкачки и домашний раздел. Подробнее про установку Ubuntu 18.04 вы можете прочитать по ссылке.

Шаг 7. Завершение установки

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


Но давайте еще рассмотрим управление пунктами меню и загрузчиками EFI.

Управление загрузчиком UEFI с помощью eifbootmgr

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


Рассмотрим подробнее что означает каждый из параметров:

  • BootCurrent - загрузчик, который был использован для запуска этой операционной системы;
  • BootOrder - порядок загрузчиков, в котором менеджер загрузки будет их перебирать во время старта системы. Если первый загрузчик не сработал, то будет использован второй и так далее;
  • BootNext - загрузчик, который будет запущен при следующей загрузке;
  • Timeout - таймаут на протяжении которого будет показываться меню выбора загрузчика, перед тем, как он будет выбран автоматически;
  • Пункты 0000 - 0004 - загрузчики которые можно использовать.

Вы можете изменить порядок загрузки с помощью опции -o, например, сделаем так чтобы первым загружалась ОС из оптического диска:

sudo efibootmgr -o 0,1,2,3

И вернем обратно на первое место Ubuntu:

sudo efibootmgr -o 3,0,1,2


Можно изменить таймаут, чтобы отображалось меню выбора системы:

sudo efibootmgr -t 20


Здесь мы установили таймаут в 20 секунд.

Выводы

В этой статье мы рассмотрели как установить Linux на UEFI, а также как управлять порядком загрузки в установленной системе. Теперь, если у вас возникнет желание установить эту операционную систему на свой новый ноутбук с EFI, то вы уже знаете как это сделать. Если у вас остались вопросы, спрашивайте в комментариях!

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Этот раздел расскажет про аппаратное обеспечение, для которого требуется настройка перед установкой Debian. Обычно, для этого производится проверка и возможно, изменение настроек микропрограммы вашей системы. « Микропрограмма (firmware) » — это программное обеспечение используемое аппаратным обеспечением; она почти всегда вызывается во время загрузки машины (после подачи питания). Здесь также описаны известные проблемы аппаратного обеспечения, которые влияют на надёжность Debian GNU/Linux.

3.6.1. Вызов меню настройки BIOS

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

Клавиша Delete во время POST (power on self test, самотестирование при включении питания)

Клавиши Ctrl + Alt + Esc или Delete во время POST

Клавиша Esc во время POST

Ctrl + Alt + Insert после Ctrl + Alt + Delete

Ctrl + Alt + Esc или Ctrl + Alt + S или F1

3.6.2. Выбор загрузочного устройства

Многие меню настройки BIOS позволяют выбрать устройство, с которого будет загружаться система. Настройте этот параметр так, чтобы сначала операционная система пыталась загрузиться с A: (первый дисковод гибких дисков), затем, необязательно, с привода CD-ROM (вероятно, называется D: или E: ) и затем с C: (первый жёсткий диск). Такая настройка позволит вам загрузиться, или с дискеты или с CD-ROM, которые являются двумя наиболее распространёнными загрузочными устройствами, используемыми для установки Debian.

Если у вас новый SCSI-контроллер и к нему подключён привод CD-ROM, то обычно, возможна загрузка с этого CD-ROM. Всё, что нужно сделать, это разрешить загрузку с CD-ROM в BIOS SCSI-контроллера.

Другой популярный параметр — загрузка с накопителя USB (также называемого как карта памяти USB или ключ USB). Некоторые BIOS могут загружать систему непосредственно с накопителя USB, а некоторые нет. Чтобы загрузиться с USB устройства вам может потребоваться настроить BIOS на загрузку с « Removable drive » или даже с « USB-ZIP ».

Вот некоторые подробности о настройке порядка загрузки. Не забудьте изменить порядок после установки Linux на загрузку с жёсткого диска.

3.6.2.1. Изменение порядка загрузки на компьютерах с IDE

Как только компьютер начнёт загружаться, нажмите клавишу для входа в BIOS. Часто это клавиша Delete . Однако, посмотрите в документации на компьютер, какие клавиши предназначены для этого.

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

Распространённые поля на машинах с IDE: C, A, cdrom или A, C, cdrom.

C — это жёсткий диск, а A — дисковод гибких дисков.

Измените порядок загрузки так, чтобы первой стояла загрузка с CD-ROM или дискет. Обычно, для этого используются клавиши Page Up или Page Down , которые по циклу перебирают возможные значения.

Сохраните изменения. Как это сделать написано в подсказке на экране.

3.6.2.2. Изменение порядка загрузки на компьютерах со SCSI

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

Вы можете войти в меню настройки SCSI после проверки памяти, а о том как это сделать, появляется подсказка на экране.

Нужная комбинация клавиш зависит от контроллера. Часто, это Ctrl + F2 . Однако, нужную комбинацию посмотрите в документации на аппаратуру.

Найдите пункт изменения порядка загрузки.

Настройте так, что SCSI ID привода компакт дисков был первым в списке.

Сохраните изменения. Как это сделать написано в подсказке на экране. Обычно, вы должны нажать F10 .

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

Я предлагаю вам познакомиться со следующими уровнями типичной загрузки Linux:

1. BIOS

  • BIOS отвечает за базовый ввод/вывод данных с устройств/на устройства.
  • Делает некоторые проверки целостности устройств. К тому же, за тестирование работоспособности электроники отвечает POST (Power-on self-test, он же «тест на адекватность себя самого», выполняющийся как этап пре-загрузки), который управляется BIOS
  • Ищет, загружает и выполняет программу-загрузчик ОС
  • Берет загрузчик из флопика, сидюка или жесткого диска. Во время загрузки BIOS'а вы можете нажать на кнопку (обычно это F12 или F2 или Del, зависит от платформы), если вам требуется внести некоторые изменения касательно настройки железа.
  • Как только загрузчик был обнаружен и загружен в память, BIOS передает управление ему.
  • Короче говоря, BIOS загружает и выполняет загрузочную запись (MBR).

2. MBR

  • MBR — это главная загрузочная запись, хранящаяся на жестком диске
  • Она размещена в 1-м секторе загрузочного диска, например /dev/hda или /dev/sda
  • MBR занимает меньше, чем 512 байтов. Она состоит из трех компонентов: 1) главная загрузочная информация, «живущая» в первых 446 байтах; 2) информация о таблице разделов — в следующих 64 байтах; 3) и последние 2 байта нужны для проверки корректности mbr.
  • Она содержит информацию о GRUB'е (или LILO).
  • Простыми словами — MBR загружает и выполняет загрузчик GRUB.

3. GRUB

  • GRUB — Grand Unified Bootloader.
  • Если в вашей системе установлено более, чем одно ядро, у вас есть возможность выбирать, которое из них должен выполняться
  • GRUB отображает красивую анимацию plymouth заставку, и, подождав несколько секунд интерактивного воздействия пользователя, если он не нажал ни одной клавиши, он загружает ядро, установленное по умолчанию в файле конфигурации grub.
  • GRUB понимает, что такое файловая система (древние загрузчики Linux'а, например, LILO этого не понимают).
  • Конфигурационный файл Grub обычно лежит по пути /boot/grub/grub.conf (так же /etc/grub.conf может быть символьной ссылкой на него). Вот пример файла конфигурации для CentOS:

4. Ядро или Kernel

  • Ядро монтирует файловую систему в соответствии с настройкой «root=» в фале grub.conf
  • Выполняет программу /sbin/init
  • Поскольку init — это первый процесс, запущенный ядром Linux, поэтому она имеет идентификатор процесса (PID) №1. Можете выполнить «ps -ef | grep init» и убедиться в этом.
  • initrd — это Initial RAM Disk, он же временный диск в оперативной памяти
  • initrd используется самим ядром в качестве временной корневой файловой системы, пока kernel не загрузится в реальную примонтированную файловую систему. Этот временный диск также содержит необходимые для загрузки драйверы, позволяющие получить доступ к разделам дисков и другому оборудованию

5. Init

  • Смотрит в файл /etc/inittab для того, чтобы определить уровень выполнения (run level).
  • Есть следующие уровни выполнения:
    • 0 – прервать выполнение
    • 1 – Однопользовательский режим, так называемый «Single user mode», или иными словами, консоль восстановления
    • 2 – Многопользовательский режим без поддержки NFS
    • 3 – Полноценный многопользовательский режим
    • 4 – не используется
    • 5 – X11
    • 6 – перезагрузка

    6. Уровень выполнения программ (Runlevel)

    Вот и все. Возможно, некоторым из вас это не ново и особого интереса не было при чтении статью, поскольку она более ориентирована на начально-средний уровень знакомства з Линуксом.
    В таком случае могу лишь сказать, что «повторение — мать учения» (с).

    Дополнения, исправления, уточнения

      : «Ну скажем прямо — так грузятся далеко не все дистры». С ним согласилось большинство, отмечая и bsd-style init, u-boot, и хоть initrd в статье пропущен, стоить заметить, что он нужен ядру не во всех дистрибутивах. Также отмечено, что в slackware поддержка rc.d осуществляется только в качестве совместимости, а встраиваемые системы грузятся иначе. На декстопах иногда бывает EFI, а кроме того Linux популярен в мире embedded и там ещё куча разных платформ. Линукс в телефоне вообще иначе грузится. , ссылая на википедию: Еще хочется сделать замечание по поводу MBR, первого сектора и пр. Все несколько усложнилось за последние годы. Сейчас уместней говорить о EFI.

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

    В этом руководстве мы выделим различные шаги, предпринятые ОС Linux с момента включения до момента входа в систему. Обратите внимание, что это руководство сфокусировано на загрузчике GRUB2 и systemd init, поскольку они используются в настоящее время подавляющим большинством современных дистрибутивов Linux. Но существуют и другие загрузчики, например, дистрибутивы на основе Arch Linux используют systemd-boot.


    Процесс загрузки состоит из следующих 4 шагов, которые мы обсудим более подробно:

    1. Инициализация системы: UEFI или BIOS (POST)
    2. Запуск загрузчика (GRUB2 или systemd-boot)
    3. Инициализация ядра
    4. Запуск systemd, родителя всех процессов

    1. Инициализация системы: UEFI или BIOS

    Инициализация системы под UEFI

    1. Система включена, выполняется самотестирование при включении (POST).
    2. После POST UEFI инициализирует оборудование, необходимое для загрузки (диск, контроллеры клавиатуры и т. д.).
    3. Прошивка считывает загрузочные записи в NVRAM, чтобы определить, какое приложение EFI запускать и откуда (например, с какого диска и раздела).
    • Загрузочной записью может быть просто диск. В этом случае микропрограмма ищет системный раздел EFI на этом диске и пытается найти приложение EFI в резервном загрузочном пути \EFI\BOOT\BOOTX64.EFI (BOOTIA32.EFI в системах с IA32 (32-разрядным) UEFI). Так работают загрузочные съёмные носители UEFI.
    1. Прошивка запускает приложение EFI.
    • Это может быть загрузчик или само ядро Arch, использующее EFISTUB.
    • Это может быть какое-то другое приложение EFI, такое как оболочка UEFI, или менеджер загрузки, например systemd-boot или rEFInd.

    Если включена безопасная загрузка, процесс загрузки будет проверять подлинность двоичного файла EFI по подписи.

    Инициализация системы под BIOS

    1. Система включена, выполняется самотестирование при включении (POST).
    2. После POST BIOS инициализирует оборудование, необходимое для загрузки (диск, контроллеры клавиатуры и т. д.).
    3. BIOS запускает первые 440 байтов (область кода начальной загрузки основной загрузочной записи) первого диска в порядке дисков BIOS.
    4. Затем первый этап загрузчика в загрузочном коде MBR запускает свой второй этап (если есть) из одного из следующих источников:
    • следующие секторы диска после MBR, то есть так называемый промежуток после MBR (только в таблице разделов MBR).
    • загрузочная запись тома раздела или диска без разделов (VBR).
    • загрузочный раздел BIOS (только GRUB в BIOS/GPT).
    1. Запускается фактический загрузчик.
    2. Затем загрузчик загружает операционную систему путём последовательной или прямой загрузки ядра операционной системы.

    Проверка целостности BIOS (POST)

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

    Когда система Linux включается, включается BIOS (базовая система ввода-вывода) и выполняет самотестирование при включении (POST). Это проверка целостности, которая выполняет множество диагностических проверок.

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

    2. Загрузчик (GRUB2 или systemd-boot)


    Если компьютер запускает UEFI, то обычно она запускает приложение EFI, обычно располагающееся по пути \EFI\BOOT\BOOTX64.EFI (/boot/EFI/BOOT/BOOTX64.EFI) на загрузочном диске.

    Если это BIOS, то после завершения POST, BIOS проверяет MBR (главную загрузочную запись) на предмет загрузчика и информации о разделах диска.

    MBR — это 512-байтовый код, расположенный в первом секторе жёсткого диска, обычно это /dev/sda или /dev/hda, в зависимости от архитектуры вашего жёсткого диска. Обратите внимание, однако, что иногда MBR может находиться на Live USB или DVD-диске Linux.

    В Linux существует 2 основных типа загрузчиков: GRUB2 и systemd-boot. Загрузчик GRUB2 — распространён в дистрибутивах на основе Debian. Загрузчик systemd-boot применяется в Arch Linux и основанных на этой ОС дистрибутивах.

    Загрузчик GRUB2


    GRUB2 означает GRand Unified Bootloader version 2. Как только BIOS обнаруживает загрузчик grub2, он запускается и загружает его в основную память (RAM).

    Современный GRUB2 может работать и с UEFI (с помощью efibootmgr). В Arch Linux поддержка BIOS и UEFI собрана в один пакет grub. В Debian и производных дистрибутивах GRUB представлен двумя версиями:

    Меню grub2 позволяет вам делать несколько вещей. Оно позволяет вам выбрать версию ядра Linux, которую вы хотите использовать. Если вы несколько раз обновляли свою систему, вы можете увидеть в списке разные версии ядра. Кроме того, он даёт вам возможность редактировать некоторые параметры ядра, нажимая комбинацию клавиш клавиатуры.

    Кроме того, в настройке с двойной загрузкой, когда у вас есть несколько установок ОС, меню grub позволяет вам выбрать, в какую ОС загружаться. Файл конфигурации grub2 — это файл /boot/grub2/grub2.cfg. Основная цель GRUB — загрузить ядро Linux в основную память.

    Загрузчик systemd-boot

    systemd-boot (сокращенно sd-boot) — простой менеджер загрузки UEFI. Он предоставляет графическое меню для выбора записи для загрузки и редактор командной строки ядра. Systemd-boot поддерживает системы только с прошивкой UEFI.

    systemd-boot загружает информацию о загрузочной записи из системного раздела EFI (ESP), обычно монтируемого в /efi/, /boot/ или /boot/efi/ во время запуска ОС, а также из расширенного раздел загрузчика, если он существует (обычно монтируется в /boot/). Фрагменты файла конфигурации, ядра, initrds и другие образы EFI для загрузки обычно должны находиться на ESP или разделе расширенного загрузчика. Ядра Linux должны быть собраны с CONFIG_EFI_STUB, чтобы их можно было напрямую запускать как образ EFI. Во время загрузки systemd-boot автоматически собирает список загрузочных записей из следующих источников:

    • Загрузочные записи, определённые с помощью файлов описания спецификации загрузчика, расположенных в /loader/entries/ на ESP и в разделе расширенного загрузчика. Обычно они описывают образы ядра Linux со связанными образами initrd, но также могут описывать произвольные другие исполняемые файлы EFI.
    • Унифицированные образы ядра в соответствии со спецификацией загрузчика в виде исполняемых двоичных файлов EFI в /EFI/Linux/ на ESP и в разделе расширенного загрузчика.
    • Диспетчер загрузки Microsoft Windows EFI, если он установлен.
    • Диспетчер загрузки Apple MacOS X, если он установлен.
    • Бинарный файл EFI Shell, если он установлен
    • Перезагрузка в опцию настройки прошивки UEFI, если она поддерживается.

    systemd-boot поддерживает следующие функции:

    3. Инициализация ядра

    Ядро — это основа любой системы Linux. Он связывает оборудование ПК с базовыми процессами. Ядро контролирует все процессы в вашей системе Linux. После того как выбранное ядро Linux загружено загрузчиком, оно должно самораспаковаться из сжатой версии перед выполнением любой задачи. После самораспаковывания выбранное ядро монтирует корневую файловую систему и инициализирует программу /sbin/init, обычно называемую init.


    Init всегда запускается первой программой, и ей назначается ID процесса или PID 1. Это процесс init, который порождает различных демонов и монтирует все разделы файловых систем, указанные в файле /etc/fstab.

    Затем ядро монтирует начальный RAM-диск (initrd), который является временной корневой файловой системой, пока не будет смонтирована настоящая корневая файловая система. Все ядра находятся в каталоге /boot вместе с начальным образом RAM-диска.

    4. запуск Systemd

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

    Systemd использует файл /usr/lib/systemd/system/default.target для определения состояния или цели, в которую должна загружаться система Linux.

    • Для настольной рабочей станции (с графическим интерфейсом пользователя) целевое значение по умолчанию graphical.target.
    • Для сервера целью по умолчанию является multi-user.target.

    Вот виды целей systemd:

    • poweroff.target: выключение системы.
    • rescue.target: запускает сеанс спасательной оболочки.
    • multi-user.target: настраивает систему на неграфическую (консольную) многопользовательскую систему.
    • graphical.target: настройка системы на использование графического многопользовательского интерфейса с сетевыми службами.
    • reboot.target: перезагружает систему.

    Чтобы проверить текущую цель в вашей системе, выполните команду:


    Вы можете переключаться с одной цели на другую, выполнив на терминале следующую команду:

    Эта команда переводит систему в неграфическое состояние (после перезагрузки).

    А эта команда возвращает в загрузку в графический интерфейс:

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

    После включения компьютера блок питания проверяет все необходимые уровни напряжений. Если все уровни напряжений соответствуют номинальным, то на материнскую плату поступит сигнал PowerGood. До появления этого сигнала на вход процессора подается сигнал RESET, который удерживает процессор в сброшенном состоянии. Но после получения сигнала PowerGood от блока питания сигнал RESET будет снят и процессор начнет выполнять свои первые инструкции. При этом процессор стартует от вполне известного состояния: командный регистр CS содержит 0xFFFF, указатель команд (региcтр IP) содержит 0, сегментные регистры данных и стека содержат 0. Таким образом, после снятия RESET процессор в реальном режиме выполняет инструкции, размещающиеся в области ROM BIOS, начинающейся с адреса FFFF:0000 (физический адрес, соответственно, - 0xFFFF0). Размер этой области, очевидно, составляет 16 байт, вплоть до конца максимально адресуемого адресного пространства в реальном режиме - 0xFFFFF. По этому адресу располагается инструкция перехода на реально исполняемый код BIOS.

    По соображениям снижения стоимости код BIOS в современных материнских платах хранится в постоянной памяти (ПЗУ) в сжатом виде. Только небольшая его часть, используемая на самых первых этапах загрузки, является непосредственно исполняемой. Поэтому первая задача, которая решается сразу после включения питания, заключается в том, чтобы инициализировать контроллер DRAM, декомпрессировать основной код BIOS и загрузить его в ту область оперативной памяти (RAM), которую именуют "теневой" (shadow RAM). Эта область затем защищается от записи и управление передается на записанный в нее исполняемый код BIOS. Теневая память в ходе дальнейшей работы отдана в полное владение чипсета материнской платы; операционная система к ней доступа не имеет. Но аппаратными средствами обеспечивается отображение теневой памяти на те области, которые в реальном режиме работы доступны для старых операционных систем типа MS-DOS, так что последние обнаруживают код BIOS именно там, где ожидают его найти.

    Можно еще отметить, что некоторые типы периферийных устройств могут содержать расширения BIOS в собственных ПЗУ. В таком случае устанавливаются соответствующие ссылки на эти расширения. Основная причина, по которой это необходимо, заключается в том, что по историческим причинам размер первичного загрузчика (загрузчика первого этапа, как мы его будем дальше называть) на персональных компьютерах ограничен величиной 446 байт. Этого явно недостаточно для того, чтобы включить в этот загрузчик драйверы всех периферийных устройств (например, дисплея и устройств хранения данных), которые могут понадобиться на этапе начальной загрузки системы. Тем более, что драйверы могут различаться для однотипных устройств от разных производителей. Поэтому функция загрузки некоторых драйверов возлагается на BIOS.

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

    После завершения процедуры самотестирования та часть кода BIOS, которая реализует процедуры самотестирования (POST), удаляется из оперативной памяти за ненадобностью. Оставшаяся часть BIOS, реализующая функции BIOS (runtime services), остается в ОП. Она будет доступна в последующем для загруженной операционой системы.

    Первой задачей той части BIOS, которая осталась в ОП, является поиск активного загрузочного устройства. Список устройств, которые могут являться загрузочными, хранится в энергонезависимой памяти компьютера (CMOS), а порядок просмотра этого списка является одним из настраиваемых параметров BIOS. Загрузочным устройством может быть дискета, CD-ROM, раздел жесткого диска, сетевое устройство или даже USB-устройство (флеш-диск). Поиск загрузочного устройства осуществляется путем вызова прерывания INT19h BIOS.

    Процедура обработки прерывания INT19h состоит в том, что считывается сектор с координатами Cylinder:0 Head:0 Sector:1 на очередном устройстве, его содержимое помещается в ОП по адресу 0000:7С00h, после чего осуществляется проверка, является ли этот сектор загрузочным, то есть содержит ли он код первичного загрузчика. Загрузочные сектора помечаются "волшебным" числом 0x55AA в позиции 0x1FE = 510. Это последние два байта сектора. Наличие (или отсутствие) такого кода в последних байтах сектора позволяет программе BIOS решить, является ли данное устройство загрузочным.

    Как только программа обработки прерывания обнаружит, что загруженный в память сектор содержит это самое "магическое число" 0x55AA , управление передается на начало этого сектора (по абсолютному адресу 0000:7С00h). Дальнейшие события зависят от того, где обнаружен загрузочный сектор - на жестком диске или на одном из других устройств: дискете, CD или flash-диске (на всех этих устройствах обычно создается образ загрузочной дискеты).

    Если при проверке загрузочный сектор не обнаружен ни на одном устройстве, вызывается прерывание INT18h. Когда-то (в первых персональных компьютерах, производимых компанией IBM) это прерывание служило для вызова интерпретатора ROM-BASIC, который дальше управлял работой компьютера. Клоны IBM-PC не имеют BASIC в ROM-памяти и теперь это прерывание используют для организации загрузки по сети. Но мы не будем рассматривать эту ветку развития событий и вернемся к тому случаю, когда прерывание INT19h обнаружило загрузочный диск и передало управление находящейся в нем программе.

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

    Читайте также: