Глава 2. Множественная загрузка

Разобраться с имеющимися начальным загрузчиком и встроенным программным обеспечением (ПО) сложно. Это не обязательно непросто, но эта тема может становится запутанной. Для более простого усвоения нашим читателям этой книги я буду пользоваться тремя тестовыми системами.

Таблица 2-1. Системы для проверок
Номер системы Название системы Цель

1

BIOS

Для демонстрации BIOS

2

UEFI

Для демонстрации UEFI

3

Jarvis

Для проекта множественной загрузки 100+ ОС

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

[Замечание]Замечание

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

Перечень операционных систем

В своей первой системе BIOS, то есть в системах, имеющих установленным BIOS, мы будем устанавливать следующие операционные системы:

  • Sun OpenSolaris 2009

  • Fedora Linux 15

  • PC-BSD 9.0

  • Windows 7

  • Red Hat Enterprise Linux 6.0

  • Windows Server 2003 (2k3)

  • Windows XP

Я знаю что эти операционные системы достаточно стары, но я выбрал их по некой причине.

Смотрите, BIOS сам по себе является устаревшим встроенным ПО, а потому если вы желаете разобраться с самим BIOS, вам придётся применять только старые операционные системы. Помните, что вы сможете разобраться с UEFI (современным встроенным ПО) только когда вы поймёте BIOS. Это подобно тому что вы будете лучше понимать Java когда вы также достаточно знакомы с С. Кроме того, применение этих древних операционных систем даст мне шанс также затронуть также и начальные загрузчики Windows и Unix. Кроме того, это также представит мне возможность пояснить наследуемый начальный загрузчик GRUB Linux.

Основная мысль состоит в множественной загрузке нашей системы с BIOS для всех упомянутых ранее операционных систем. Для этого нам потребуется следовать правилам и положениям всех операционных систем.

Таблица 2-2. Правила и положения ОС
ОС Правила

Unix

Операционные системы Unix (OpenSolaris и BSD) должны устанавливаться только на первичный раздел.

Linux

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

Windows

Современная операционная система Windows может устанавливаться в любом разделе (первичном или логическом), однако предшественники современного семейства Windows должны быть представленными на самом первом первичном разделе. Это означает, что вы способны установить Windows 7 в неком логическом разделе, однако его предшественник, такой как XP или win2k3, должны быть представленными на самом первом первичном разделе. Кроме того вы не можете ломать последовательность установки операционной системы Windows. Например, невозможно установить сначала Windows 7, а затем более старые win2k3 или XP. Они должны следовать своей последовательности: 98, затем 2000 и потом XP.

Потратьте немного времени и попытайтесь подготовку вашей последовательности установки ОС. Теперь проверьте свою последовательность загрузок.

Окончательная последовательность наших операционных систем выглядит так:

  1. Windows XP

  2. Sun OpenSolaris 2008

  3. PC-BSD 9.0

  4. Windows Server 2003

  5. Windows 7

  6. Red Hat Enterprise Linux 6

  7. Fedora 15

Установка операционной системы

Теперь мы обсудим установку своих операционных систем.

Первичный/ логический разделы

Для системы с BIOS мы можем создать лишь четыре раздела. Но, конечно же, вы видели гораздо большее число разделов нежели это. Итак, позвольте мне видоизменить своё утверждение. В системе на основе BIOS вы можете создать на своём диске только четыре первичных (primary) раздела. Если вы желаете иметь число разделов больше этого, тогда вам требуется превратить свой четвёртый раздел во вторичный (secondary, также имеющего название расширенный - extended) раздел. Этот расширенный раздел будет работать как некий контейнер, а внутри этого контейнера вы можете создавать множество логических (logical) разделов по своему желанию. Почему эти разделы именуются логическими разделами, потому что они не видны для BIOS? Кроме того почему система с BIOS способна делать лишь четыре первичных раздела? На эти вопросы мы ответим при обсуждении Главной загрузочной записи (master boot record).

Разбиение на разделы

Давайте вначале разобьём на разделы жёсткий диск своей системы с BIOS. Для этого мы воспользуемся GParted live CD. GParted это некий инструмент из сообщества GNU. Это свободно распространяемый с открытым исходным кодом live ISO образ на основании Debian Linux. Рисунок 2-1 отображает схему разбиения на разделы нашей системы BIOS.

 

Рисунок 2-1


Схема разбиения на разделы системы BIOS в GParted

Работа с GParted по разбиению на разделы некого жёсткого диска достаточно прямолинейна. Мы создадим на 75 ГБ дискового пространства схему разбиения на разделы, показанную на Рисунке 2-2.

 

Рисунок 2-2


Выполненная GParted схема разбиения на разделы

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

На Рисунке 2-3 вы можете увидеть названия дисков, размеры разделов и связанные с ними флаги (при их наличии).

 

Рисунок 2-3


Выполненная GParted схема файловой системы

Давайте установим свою первую операционную систему в самом первом первичном разделе.

Первая устанавливаемая ОС: XP

На Рисунке 2-4 вы можете увидеть схему разделов, отображаемую установщиком Windows XP.

 

Рисунок 2-4


Отображаемая установщиком XP схема разбиения на разделы

В самом первом первичном разделе мы установили XP. В терминологии Windows это устройство C:, как это показано на Рисунке 2-4. После завершения этой установки и перезагрузки вашей системы мы получаем на своём экране Windows XP (Рисунок 2-5).

 

Рисунок 2-5


XP после успешной установки

Самое время чтобы разобраться как загрузился Windows XP, но перед этим нам требуется понять построение загрузочного сектора. Загрузочный сектор (boot sector) это первый раздел (512 байт) всякого HDD плюс 31 кБ пространства: иначе говоря, это самые первые 63 сектора вашего носителя загрузки (от 0 до 62). Или же вы можете рассматривать в качестве загрузочного сектора зарезервированным некоторое пространство (512 байт + 31 кБ) каждого из разделов под хранение связанной с начальным загрузчиком информации. Это пространство (снова, 512 байт + 31 кБ) не будет отображаться самой ОС для пользователей. Фактическое хранение данных в разделе начинается после этого зарезервированного пространства. Для лучшего понимания этого обратитесь к Рисунку 2-6.

 

Рисунок 2-6


Схема нашего диска в основанной на BIOS системе

Загрузочный сектор

Имеется удивительное высказывание на санскрите, переводимое так: &qout;Существует лишь одна истина, но разные пути её достижения&qout;. Как показано на Рисунке 2-7, загрузочный сектор имеет различные названия, но в конечном итоге само понятие остаётся тем же самым. Люди именуют эту структуру следующими названиями:

  • Главная загрузочная запись (MBR, Master boot record)

  • Pагрузочная запись (boot record)

  • Pзагрузочный сектор (boot sector)

  • Начальный загрузчик (Bootloader)

 

Рисунок 2-7


Загрузочный сектор

В этой книге мы будем придерживаться именования его загрузочным сектором, потому что устройство жёсткого диска (HDD) всегда делится на сектора, а каждый сектор составляет в размере либо 512 байт, либо 4 кБ. Большинство дисков следуют размеру диска в 512 байт.

В основанной на BIOS системе, всякий производитель ОС (не имеет различия будет ли это Windows, Unix или Linux) должны делить свой начальный загрузчик на три части. Часть 1 начального загрузчика будет оставаться в области самораскрутки, составляющей 440 байт. Часть 2 будет оставаться в разделе начального загрузчика, составляющая в размере 31 кБ, а последняя, часть 3, будет оставаться внутри самого реального раздела, в котором устанавливается конкретная ОС. Итак, проще говоря, при каждой установке ОС (в нашем случае это Windows XP), она делит свой загрузчик новой технологии (NTLDR, New Technology Loader) на три части.

Таблица 2-3. Разбиение начального загрузчика NT
Местоположение Размер Часть Сведения

Область самораскрутки

440 байт

NTLDr part-1

Крошечная часть

Начальный загрузчик

31 кБ

NTLDr part-2

По сравнению с частью 1 имеет больший размер

Внутри раздела реальной ОС

Нет ограничения в размере

NTLDr part-3

Самая большая часть

Но зачем начальный загрузчик делится на три части?

Это происходит по историческим причинам. Первые BIOS обладали техническими ограничениями в том, что они не способны были выполнять доступ к более чем 512 байт или не были способны производить считывание вне своего первого сектора. Поэтому, очевидно, после завершения своей задачи BIOS она просто делала безусловный переход к самым первым 512 байтам всего своего HDD, которые просто и запускали эту программу. К счастью, эта программа будет нашей самораскруткой (440 байт). Поскольку область самораскрутки очень мала в размере, она осуществляет лишь одну вещь, которая состоит в безусловном переходе в некое пространство большего размера, которое и составляет часть 2 нашего начального загрузчика. Он составляет в размере 31 кБ. Эти 31 кБ опять же крайне мало и нам приходится искать ещё дополнительный размер. Этот начальный загрузчик выполняет безусловный переход в часть 3, которая находится внутри некого раздела. Эта часть 3 будет на устройстве C: в файле с названием NTLDR. Такой файл части 3 начального загрузчика XP можно обнаружить на Рисунке 2-8.

 

Рисунок 2-8


Файл части 3 начального загрузчика XP

Как вы можете видеть, этот файл намного больше в размере (245 кБ). Этот файл выполнит реальное задание своего начального загрузчика по тяжёлому подъёму, состоящее в копировании собственно ядра Windows XP, вызывая winload.exe (этот файл знает где находится ядро XP), из C:\windows в оперативную память. После того как необходимое ядро скопировано в память, задание нашего начального загрузчика выполнено и он уходит прочь. Помните, OS==kernel==OS. После того как наше ядро в памяти, оно позаботится обо всей остающейся последовательности запуска. На Рисунке 2-9 вы можете видеть последовательность запуска XP.

 

Рисунок 2-9


Последовательность запуска Windows XP

Я знаю, что скорее всего у вас в мозгу имеется множество вопросов. Но продолжайте чтение и все ваши вопросы найдут ответы. Давайте слегка забежим вперёд и обсудим имеющиеся в загрузочном секторе поля, которые я пока не пояснял. Для этого вы можете обратиться к Рисунку 2-10.

 

Рисунок 2-10


Загрузочный сектор

Поле подписи производителя служит для производителя HDD. Упоминающиеся здесь сведения сообщают нам о выпустившем этот HDD производителе, таком как Seagate, Western Digital, Samsung и т.п. Поэтому оно в основном содержит информацию о производителе этого HDD.

NULL имеет только 2 байта пространства. NULL означает NULL. Когда он не NULL, наш BIOS будет рассматривать этот диск как отказавший/ сломавшийся в момент процедуры POST и запуск будет прерван. Поэтому он обязан быть NULL. Всякий раз, когда ваша ОС внезапно перезагружается или когда сами ОС или HDD выявляют отказавший сектор или некий вид существенного разрушения, это поле будет помечено как не NULL.

Поле MBR может оказаться наиболее востребованным разделом из всех этих полей. MBR устанавливается для "master boot record" и имеет в размере 64 байта. Далее MBR делится на четыре части. Каждая из частей обладает 16 байтами в размере, а каждая из частей содержит сведения об одном из разделов.

Таблица 2-4. Главная загрузочная запись
Размер Части Хранит

16 байт

Part 1

Сведения о первом разделе

16 байт

Part 2

Сведения о втором разделе

16 байт

Part 3

Сведения о третьем разделе

16 байт

Part 4

Сведения о четвёртом разделе

Это означает, что 64 байта MBR способны хранить лишь четыре записи своих разделов и это именно та причина, по которой в системе на основе BIOS вы способны сделать лишь четыре первичных раздела.

Подпись fdisk также именуется флагом загрузки; некоторые называют её просто *, или, в стиле Windows, также имеется название флага активный/ пассивный. Флаг fdisk важен в случае множественной загрузки различных операционных систем, о чёи мы не будем говорить сейчас. Теперь я бы хотел чтобы вы запомнили следующие два правила:

  • Логический раздел не может быть активным.

  • Эта ОС не может запускаться из логического раздела.

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

 

Рисунок 2-11


Последовательность загрузки Windows XP

Теперь мы будем устанавливать и запускать некую новую ОС, а именно, OpenSolaris 2008.

OpenSolaris 2008

Рисунок 2-12 отображает экран при загрузке установочного носителя OpenSolaris 2008.

 

Рисунок 2-12


Приветственный экран носителя установки OpenSolaris 2008

Нам требуется установить OpenSolaris во второй раздел. На Рисунке 2-13 вы можете видеть, что мы выбрали именно второй первичный раздел для своей установки.

 

Рисунок 2-13


Схема диска, отображаемая установщиком OpenSolaris 2008

Но как вы можете наблюдать на Рисунке 2-14, эта установка отказала с некоторыми сообщениями об ошибках.

 

Рисунок 2-14


Отказ в установке с некоторыми сообщениями об ошибках

Эти сообщения об ошибках относятся к состоянию файловой системы. Поэтому мы подготовим эту файловую систему вручную при помощи утилиты fdisk; тем не менее, перед этим нам следует узнать какое имя жёсткого диска было выделено со стороны OpenSolaris. Сведения об имени выделенного HDD предоставит нам вывод команды pfexec format (отображаемый на Рисунке 2-15).

 

Рисунок 2-15


Назначаемое OpenSolaris имя HDD

Итак назначенным жёсткому диску имя это c4d1. Нам надлежит передать имя этого устройства в утилиту fdisk. Посмотрите на выполнение этой команды на Рисунке 2-16.

 

Рисунок 2-16


Команда fdisk

Наше название указывает на контроллер номер 4, диск номер 1 и раздел номер 0. Через свою утилиту fdisk мы вначале удалим свой второй раздел (который был родным ext3/Linux) и создадим новый раздел с файловой системой Splaris2. Этот новый раздел станет разделом с номером 4. К тому же он автоматически превратится в активный раздел (обратите внимание на Рисунок 2-17). Мы пока не обсуждали часть "подписи активного или fdisk", но вскорости мы вернёмся к этому.

 

Рисунок 2-17


Выполняемые командой fdisk изменения

Возвращаясь к своей установке, давайте перезапустим эту установку и, как вы можете видеть на Рисунке 2-18, на этот раз мы выбираем файловую систему OpenSolaris - форматированный раздел для установки OpenSolaris 2008.

 

Рисунок 2-18


Установка OpenSolaris в разделе файловой системы OpenSolaris

На этот раз наша установка не испытывает отказа (обратите внимание на Рисунок 2-19), и OpenSolaris 2008 будет установлен.

 

Рисунок 2-19


Установщик не столкнётся с отказом

После этой установки мы перезагрузим свою систему с BIOS. Какая ОС, как вы полагаете, запустится?

  • Windows XP?

  • OpenSolaris?

  • Windows XP и OpenSolaris вместе?

  • никакая?

Задержитесь и подумайте прежде чем продолжить...

Рисунок 2-20 отражает что мы получим на экране после перезагрузки.

 

Рисунок 2-20


Экран приветствия после перезагрузки

Итак, загружаемой здесь ОС выступает OpenSolaris и у нас имеется возможность также загрузить и XP. Давайте прольём немного света на то что произошло в фоновом режиме. OpenSolaris обнаружил, что он был установлен в своём собственном разделе (во втором разделе), однако существует и другая ОС, доступная в первом разделе, которой является Windows (или по крайней мере "non-Unix OS").

Но как OpenSolaris узнал что существует другая ОС, установленная в самом первом первичном разделе?

При установке OpenSolaris в его собственный раздел, он обнаружил что подпись fdisk была установлена на самый первый первичный раздел. (И опять, такая подпись fdisk также носит название активного флага или просто флага *.) Как мы уже наблюдали в своей схеме спецификации загрузочного сектора (Рисунок 2-21), каждый раздел обладает 512 байтами + 31 кБ пространства зарезервированными для целей запуска и это пространство скрыто от своего пользователя.

 

Рисунок 2-21


Загрузочный сектор

Иными словами, при создании некой схемы разделов через GParted, этот инструмент для каждого из разделов выполняет следующие отделения:

  1. Самораскрутку (Bootstrap)

  2. Подпись производителя (Vendor signature)

  3. NULL

  4. MBR

  5. Подпись fdisk

  6. Начальный загрузчик

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

  • Начало и конец первого первичного раздела

  • Начало и конец второго первичного раздела

  • Начало и конец третьего первичного раздела

  • Начало и конец четвёртого первичного раздела

Обычно будет иметься четыре записи, причём каждая запись будет потреблять 16 байт. Помимо имеющихся подписи производителя и MBR все прочие поля будут пустыми. Кроме того, обратите, пожалуйста, внимание, что GParted подготовит все необходимые отделения (512 байт + 31 кБ), но заполнит лишь поля подписи производителя и MBR для самого первого первичного раздела.

Возвращаясь обратно к полю подписи fdisk, при установке Windows XP было выставлено следующее:

  • Часть 1 NTLDR в области самораскрутки

  • Часть 2 NTLDR в начальном загрузчике

  • Часть 3 NTLDR внутри самого первого первичного раздела

Затем была установлена подпись fdisk в его собственном разделе (2 байта).

Итак, общая схема диска будет примерно как показанная на Рисунке 2-22.

 

Рисунок 2-22


Схема диска после установки XP

OpenSolaris обнаруживает эту схему диска. После завершения установки OpenSolaris и когда он намерено установить свой начальный загрузчик (GRUB), он обнаруживает звёздочку (*) в первом первичном разделе и именно тут он осознаёт, что уже имеется установленной ОС Windows. Теперь GRUB (начальный загрузчик OpenSolaris) имеет два варианта:

  • Установить Часть 1 (самораскрутку) и Часть 2 (начальный загрузчик) своего GRUB (Grand Unified Bootloader) в самом первом первичном разделе и установить Часть 3 GRUB в своём собственном разделе (во втором разделе, в котором был установлен OpenSolaris).

  • Либо установить Часть 1 (самораскрутку) в 512 байтах своего собственного раздела, Часть 2 в 31 кБ своего собственного раздела, а Часть 3 также в своём собственном разделе; затем поместить * в своём собственном втором разделе (как на Рисунке 2-23).

     

    Рисунок 2-23


    Схема диска в GParted после установки OpenSolaris

Обратите, пожалуйста, внимание, что флаг запуска вернулся обратно в раздел OpenSolaris. Кроме того, GParted не понимает раздел Solaris2; следовательно, в качестве названия файловой системы он показывает ext3.

Если OpenSolaris выбирает первый вариант, тогда OpenSolaris должен вычистить Часть 1 и Часть 2 начального загрузчика Windows XP. Это также означает, что будет загружаться лишь OpenSolaris, а Windows XP никогда не будет способен выполнить запуск. Таким образом, OpenSolaris выбирает второй вариант, предоставляя равные возможности для загрузки Windows XP. OpenSolaris также выполняет запись для Windows XP в своих собственных файлах (мы обсудим этот файл позднее в данной главе). Всякий раз когда OpenSolaris приступает к запуску, GRUB справляется со сведениями в этом файле и, если он обнаруживает в нём запись Windows, она будет отражена на экране. Рисунок 2-24 показывает окно приветствия OpenSolaris.

 

Рисунок 2-24


Приветственное окно OpenSolaris

Итак, полная последовательность запуска OpenSolaris такова:

  1. Включается электропитание системы.

  2. ЦПУ выполняет безусловный переход в BIOS.

  3. Установленный BIOS выполняет свою процедуру POST.

  4. Мы возвращаемся обратно в BIOS.

  5. BIOS достаточно туп; он проверит установленный пользователем приоритет запуска.

    • Когда я произношу приоритет запуска, я имею ввиду то устройство, с которого система будет запускаться.

    • Это могут быть CDROM, USB, HDD, PXE и т.п.

  6. BIOS выполняет безусловный переход к самым первым 512 байтам всего диска или к самому первому сектора своего устройства запуска.

    • Устройством запуска может быть что угодно, но в данный момент мы рассматриваем некий HDD.

  7. BIOS передаст управление тому исполняемому коду, который представлен в его области самораскрутки.

    • Как вы думаете, кто здесь находится? Начальный загрузчик Windows (NTLDR) или OpenSolaris (GRUB)? Обдумайте это слегка прежде чем продолжить.

    • Тот загрузочный сектор, который сохранён в самых первых 512 байтах, это NTLDR для Windows XP.

    • Вы должны обратить внимание на то, что 440 байт в пространстве самораскрутки это очень мало и никакой код не способен загрузить из них ОС. Следовательно, Часть 1 NTLDR (область самораскрутки) просто выполняет безусловный переход в пространство большего размера, которым выступает Часть 2 (начальный загрузчик/ 31кБ/ запись виртуального запуска). Часть 2 проверяет значение MBR (63 байта) и обнаруживает в ней 4 записи. Это означает, что данный диск обладает четырьмя первичными разделами. Но здесь имеется некая проблема: какой из четырёх первичных разделов какой раздел обладает ОС? Вы можете сказать, конечно это первый и второй разделы, но как наш начальный загрузчик узнает где расположена его ОС? И какую именно надлежит запускать? Это и в самом деле вопрос, и именно для его решения и было создано поле подписи fdisk. Какой из разделов будет обладать заполненными или установленными этими двумя байтами, тот раздел получил ОС. Поэтому, при установке Windows XP или OpenSolaris в обязанности этой ОС входит заполнение соответствующих 2 байт надлежащего поля подписи fdisk или установки * в его собственном разделе с тем, чтобы их начальный загрузчик знал какой из разделов обладает его ОС. В нашем случае * имеется в его втором разделе (OpenSolaris оставляет её после своей установки). Именно таким образом Часть 2 NTLDR узнаёт что ей следует выполнить безусловный переход во второй раздел.

  8. Часть 2 NTLDR выполняет безусловный переход в свой второй раздел, что означает что это просто безусловный переход к Части 1 начального загрузчика GRUB во втором разделе (его самораскрутка).

  9. Часть 1 GRUB (области самораскрутки/ 440 байт) снова слишком крошечная, поэтому она снова выполняет безусловный переход в пространство большего размера, коим является Часть 2 GRUB (начальный загрузчик).

  10. Часть 2 знает где искать Часть 3. Местоположение Части 3 жёстко закодировано в Чсти 2, а потому она просто осуществляет безусловный переход в Часть 3. Часть 3 считает необходимый текстовый файл /rpool/boot/grub/menu.lst (см. Рисунок 2-25); именно этот файл был создан при обнаружении OpenSolaris XP в самом первом первичном разделе.

     

    Рисунок 2-25


    Файл menu.lst OpenSolaris

  11. Часть 3 GRUB считает этот текстовый файл и выведет на печать нечто, что записано после значения переменной 'title и именно так мы достигаем того экрана, который отображён на Рисунке 2-26.

     

    Рисунок 2-26


    Приветственное окно OpenSolaris

Рисунок 2-27 отображает всю последовательность запуска OpenSolaris целиком.

 

Рисунок 2-27


Последовательность запуска OpenSolaris

Когда пользователь выбирает вариант загрузки OpenSolaris, тогда Часть 3 GRUB OpenSolaris знает где расположено ядро OpenSolaris, которое присутствует в каталоге /boot. GRUB скопирует необходимое ядро из /boot в оперативную память и передаст управление этому ядру. Именно так завершается задача начального загрузчика GRUB и он покидает сцену. Теперь само ядро OpenSolaris будет заботиться обо всей остающейся последовательности загрузки. Мы обсудим собственно ядро в Главе 4.

Если пользователь выбирает вариант запуска Windows XP, тогда Часть 3 GRUB OpenSolaris выполнит безусловный переход обратно к Части 1 NTLDR (области самораскрутки). Часть 1 NTLDR осуществит безусловный переход к Части 2 NTLDR. Часть 2 выполнит переход к Части 3. Часть 3 NTLDR загрузит winload.exe в оперативную память. Этот файл winload.exe знает где расположено ядро XP. Оно в конечном счёте будет скопировано или загружено в память посредством NTLDR. После того как ядро XP находится в памяти, задание NTLDR выполнено (помните, kernel=OS=kernel). Так как ядро XP в памяти, именно оно заботится обо всей остающейся последовательности запуска.

PC-BSD 9.0

Наша * или флаг запуска находится в разделе OpenSolaris и мы теперь будем устанавливать PC-BSD 9.0. На Рисунке 2-28 установщик PC-BSD отображает общее число разделов в которых может быть установлена PC-BSD 9.0.

 

Рисунок 2-28


Общее число разделов

Как вы можете видеть, имеющиеся соглашения об именовании жёстких дисков в BSD отличается от предыдущих ОС. Нам требуется установить BSD в третьем разделе, которым является ada0s2. Это сокращение для "“Adapter number zero and slice number 2". Это сечение (slice) может рассматриваться как некий раздел. Рисунок 2-29 отображает установленную схему диска и соглашения об именовании диска.

 

Рисунок 2-29


Схема диска и соглашения об именовании дисков

Назначаем это пространство ada0s2 для / (корня файловой системы). Рисунок 2-30 отображает схему раздела PC BSD 9.0 Вы также можете обратить внимание на то, что значением файловой системы является UFS, что является Unix File System.

 

Рисунок 2-30


Схема раздела PC-BSD 9.0

После выполнения установки данная система перезапустится. Теперь потратьте некое время на размышления относительно того, какая именно ОС запустится.

Что из ниже перечисленного произойдёт?

  • OpenSolaris, которая предоставит некую возможность для запуска Windows и BSD?

  • Будет ли это PC-BSD, которая предоставит возможность для запуска прочих двух ОС?

  • Будет ли это одна PC-BSD?

  • Будет ли это только Windows XP?

  • Будет ли это лишь OpenSolaris?

  • Или же ни одна из ОС не запустится?

Обратитесь, пожалуйста, к блок- схемам рассмотренных ранее операционных систем и попробуйте выдвинуть свою собственную последовательность запуска.

Как вы можете обнаружить на Рисунке 2-31, загружаемой ОС будет OpenSolaris, которая создаст возможность запуска лишь для Windows.

 

Рисунок 2-31


PC-BSD не запускается

PC-BSD не запускается. Прежде чем мы пройдём дальше, снова задумайтесь над тем что же произошло.

Вы правы - имеется возможность что PC-BSD могла не оставить * / флаг запуска / подпись fdusk в своём собственном разделе. Давайте проверим что именно это и произошло. Теперь мы загрузимся с GParted (Рисунок 2-32) и проверим свою теорию.

 

Рисунок 2-32


Окно приветствия GParted

Как вы можете обнаружить на Рисунке 2-33, PC-BSD не обладает установленной * в своём собственном разделе.

 

Рисунок 2-33


Схема диска в GParted

Итак, последовательность запуска выглядит как это показано на Рисунке 2-34.

 

Рисунок 2-34


Последовательность запуска и почему PC-BSD не способна запускаться

Это означает, что OpenSolaris не знает об установке BSD в своём третьем разделе. Следовательно, надлежащая запись PC-BSD отсутствует в OpenSolaris. Что если мы оставим соответствующий флаг запуска в разделе BSD? Загрузится ли она? Но как нам оставить флаг запуска в своём третьем разделе? Это просто - GParted предоставляет нам такую возможность. Кликните правой кнопкой по своему третьему разделу и выберите необходимый флаг запуска, как это показано на Рисунке 2-35.

 

Рисунок 2-35


Установка флага запуска в PC-BSD

Рисунок 2-36 отображает как наша схема диска выглядит после установки флага запуска для третьего раздела BSD.

 

Рисунок 2-36


Схема диска

Теперь, как вы думаете, какая из ОС запустится?

    PC-BSD в одиночку?

  • PC-BSD, которая предоставит возможность для запуска всех прочих ОС?

  • Снова OpenSolaris, которая создаст возможность для запуска Windows?

  • OpenSolaris в одиночку?

  • Одна Windows XP?

Рисунок 2-37 показывает ответ; после перезапуска загружается лишь PC-BSD, причём она не даёт никаких вариантов запуска каких бы то ни было прочих ОС.

 

Рисунок 2-37


Приветственное окно PC-BSD

Давайте представим себе как PC BSD управляет запуском.

  1. Включается электропитание.

  2. Наш BIOS выполняет процедуру POST. POST осуществляет проверку жизнеспособности всех аппаратных средств и выдаёт звуковой сигнал жизнеспособности когда всё хорошо и возвращается обратно в BIOS.

  3. BIOS достаточно тупой и он просто выполняет безусловный переход в самый первый сектор всего HDD, который является областью начальной раскрутки Windows XP.

  4. Часть 1 XP (NTLDR) выполняет безусловный переход в большее пространство, коим выступает Часть 2 NTLDR (начальный загрузчик). Этот начальный загрузчик проверяет свою MBR и определяет наличие четырёх первичных разделов, Но какой из них активен? Для проверки этого наш начальный загрузчик проверяет подпись fdisk самого первого первичного раздела, который не установлен, поэтому он проверяет флаг запуска второго раздела, который также не взведён. Следовательно, он выполняет безусловный переход в свой третий раздел, где он находит установленным соответствующий флаг запуска. Этот начальный загрузчик (Часть 2) NTLDR выполняет безусловный переход в раздел BSD и запускает самораскрутку начального загрузчика BSD. Загрузчиком BSD является BTX, что является сокращением для Boot Extended.BTX осуществляет безусловный переход в свою вторую Часть и в конечном итоге в третью Часть. Эта третья Часть знает где находится её ядро BSD. Часть 4 BTX копирует образ этого ядра и отображает нам экран приветствия. Рисунок 2-38 показывает блок-схему последовательности запуска PC-BSD.

     

    Рисунок 2-38


    Последовательность запуска PC-BSD

Занимательная часть запуска BSD состоит в том, что после установки PC-BSD он обнаруживает флаг запуска в своём втором разделе, который выступает разделом OpenSolaris. Теперь у BSD имеются три варианта.

  1. Оставить флаг запуска установленным в его собственном третьем разделе.

  2. Оставить флаг запуска установленным в его собственном третьем разделе и сделать некую запись для OpenSolaris в каком- то из своих файлов.

  3. Оставить этот флаг запуска как он и был в своём втором разделе.

Если BSD выбирает первый вариант (a), тогда способной запускаться будет лишь BSD и это будет несправедливым для прочих установленных операционных систем. Мы бы хотели чтобы BSD выбрал второй вариант (b), так как он установит справедливость для запуска всех прочих ОС, однако BTX является старым начальным загрузчиком и он не обладает возможностью множественного запуска прочих операционных систем. Следовательно, BSD выбирает третий вариант (c). Следовательно именно OpenSolaris и запускается, причём он предоставляет возможность запуска XP. Как вы помните, XP не загружается. Загружается именно OpenSolaris и он считывает свой файл menu.lst и он предоставляет возможность запуска XP. Это также означает, что BSD сам по себе не выбран для запуска.

Что если мы вернёмся обратно и оставим флаг запуска для самого первого раздела Windows XP? Тогда какая ОС запустится? На Рисунке 2-39 мы добиваемся этого.

 

Рисунок 2-39


Последовательность запуска PC-BSD

Именно Windows XP запускается в одиночестве и последовательность запуска проста. Рисунок 2-40 поясняет как Windows XP получает возможность запуска.

 

Рисунок 2-40


Последовательность запуска Windows XP

Перед установкой своей новой ОС нам надлежит переместить значение флага запуска с третьего раздела BSD на второй раздел OpenSolaris. Рисунок 2-41 Отражает это изменение флага запуска с раздела XP на раздел OpenSolaris.

 

Рисунок 2-41


Схема диска из GParted

При данном изменении OpenSolaris приступит к запуску и наряду с ним будет запускаемым также и Windows XP, но BSD не будет иметь возможности загрузки. Итак, означает ли это, что всякий раз,когда мы запускаем BSD нам придётся возвращать флаг запуска обратно в раздел BSD? На данный момент да, но мы автоматизируем всё это при помощи начальных загрузчиков.

Windows Server 2003

Как вы можете наблюдать на Рисунке 2-42, мы будем устанавливать Windows Server 2003 (win2k3) в самом первом логическом разделе. Для win2k3 это будет устройство D:.

 

Рисунок 2-42


Схема диска, показанная установщиком win2k3

Как вы думаете какая ОС запустится после установки?

  • Одна win2k3?

  • Предоставит ли win2k3 некий вариант запуска прочих ОС?

  • win2k3 и OpenStack совместно?

  • PC-BSD?

  • XP в одиночку?

  • win2k3 и XP?

Прежде чем продолжить, задумайтесь на на минутку и дайте свой собственный ответ. Как вы можете видеть на Рисунке 2-43, загружающейся ОС будет win2k3.

 

Рисунок 2-43


Приветственное окно win2k3 после перезагрузки

При этом win2k3 предоставит вариант запуска Windows XP. Это означает что запускается лишь семейство операционных систем Windows. Кроме того вот некоторые подлежащие рассмотрению вопросы:

  • Где теперь находится флаг запуска?

  • Какая ОС будет загружаться если мы оставим флаг запуска на втором разделе?

  • Какая ОС будет загружаться если мы оставим флаг запуска на третьем разделе?

  • Какая ОС будет загружаться если мы оставим флаг запуска на логическом разделе (разделе win2k3)?

  • Существует ли какой- то способ запускать только Windows XP?

В последующем обсуждении вы получите все необходимые ответы на эти вопросы.

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

После установки win2k3, она обнаружила что она была установлена в неком логическом устройства и что установленный флаг доступа находится в разделе OpenSolaris (согласно Рисунку 2-44).

 

Рисунок 2-44


Схема диска после установки win2k3

Чтобы запуститься, win2k3 помещает необходимый флаг запуска в своём собственном разделе при установке частей 1 и 2 своего начального загрузчика (снова, NTLDR) в своих собственных 512 байтах + 31 кБ. Но тут имеется некая проблема. Помните ли вы те правила, которые мы наблюдали в момент установки Windows XP?

  • Этот логический раздел не может быть активным.

  • Эта ОС не способна запускаться из своего логического раздела.

По причинам этих двух правил, win2k3 не способна оставлять необходимый флаг запуска в своём разделе и в конечном итоге она не способна запускаться из логического раздела. Рисунок 2-45 отображает почему текущая последовательность запуска, почему win2k3 не способен запуститься с логического раздела. Но в чём причина этих правил?

 

Рисунок 2-45


Схема диска после установки win2k3

Это просто: MBR имеет только четыре записи, которые таковы:

  • Первая первичная = sda1

  • Вторая первичная = sda2

  • Третья первичная = sda3

  • Четвёртая первичная = расширенный раздел (не логический раздел) = sda4

Разделом win2k3 является sda5. Иными словами, это диск SATA a (первый) и раздел номер 5. Поскольку наша MBR не обладает записью для логического раздела, часть 2 NTLDR не знает чо существует доступным пятый раздел. Поэтому, даже если win2k3 оставляет необходимый флаг в своём собственном разделе, NTLDR XP не способен его видеть. Следовательно, win2k3 никогда не запустится. Теперь, почему имеющаяся MBR не способна обладать более чем 5 записей? Это по причине того, что 64 байта не способны содержать лишь 4 записи. Почему бы не увеличить имеющийся размер MBR: Действительно, даже если бы разработчики пожелали бы увеличить имеющийся размер установленной MBR, они просто не могут этого. Вы поймёте эту причину когда мы будем обсуждать позднее в этой главе встроенное ПО UEFI.

Теперь когда мы получили для win2k3 проблему курицы и яйца. Она желает запуститься, но для этого ему придётся оставить флаг запуска в своём собственном разделе, но если он это и сделает, то BIOS не сможет обнаружить этот раздел. Как мы разрешим эту проблему?

Какие- то удивительные разработчики разрешили эту задачу и, тот кто придумал это, просто легенда. win2k3 передаёт свой загрузчик NTLDR в самый первый раздел, а именно в Часть 1, Часть 2 и Часть 3. Это также подразумевает, что win2k3 удалит части NTLDR XP, поскольку имеющееся пространство (512 байт + 31 кБ) слишком маленькое и оба начальных загрузчика не смогут там разместиться. (Здесь существует одно сладкое пятно, которое имеет название VBR, что выходит за пределы этой книги.) Тем не менее, при удалении начального загрузчика XP win3k2 делает записи XP в своём текстовом файле и оставляет её в этом самом первом первичном разделе. Этот файл именуется boot.ini, как это отражено на Рисунке 2-46.

 

Рисунок 2-46


Файл boot.ini

При выполнении этого win2k3 оставляет свой флаг запуска только в самом первом первичном разделе. Итак, вот как win2k3 запускается:

  1. Включается электропитание.

  2. ЦПУ переходит к BIOS. BIOS запускает POST.

  3. POST выполняет проверку и имеющееся оборудование выдаёт звуковой сигнал жизнеспособности и переходит обратно к своему BIOS.

  4. BIOS выполняет безусловный переход к первым 512 байтам самого первого первичного раздела.

  5. Запускается начальная самораскрутка, которая является Частью 1 NTLDR win3k2.

  6. Часть 1 отыскивает Часть 2 NTLDR.

  7. Часть 2 проверяет установленную MBR и устанавливает подпись fdisk.

  8. Имеющаяся подпись fdisk установлена в первом первичном, что означает, что Часть 2 выполнит безусловный переход внутри первого первичного раздела XP и запустит Часть 3 NTLDR win3k2. Чтобы просто дать вам представление, Часть 3 является новым, а не старым NTLDR в XP. Здесь я предоставляю два образа.

    • Обратите внимание на размер NTLDR (Часть 3) на Рисунке 2-47 Это именно тот, когда мы установили Windows XP.

       

      Рисунок 2-47


      Размер файла Часть 3 для Windows XP

    • На Рисунке 2-48 обратите внимание на значение размера NTLDR (Часть 3) после установки win32k.

       

      Рисунок 2-48


      Размер файла Часть 3 для win2k3

      Как вы можете видеть, Часть 3 NTLDR Windows XP составляла 245 кБ, но теперь, при win2k3 это уже 291 кБ.

  9. Часть 3 NTLDR (win2k3) считает файл boot.ini из того же самого раздела (самого первого первичного) и выдаст на печать всё что записано в кавычках. Рисунок 2-49 отображает что будет выведено на печать на этом экране.

     

    Рисунок 2-49


    Показываемое win2k3 окно приветствия

  10. Пользователь выбирает вариант Windows Server 2003, Enterprise, далее Часть 3 NTLDR win2k3 знает где располагается необходимое ядро win2k3. Оно пребывает в пятом разделе, котором был установлен win2k3. Он копирует это ядро в память и NTLDR win2k3 уходит прочь.

  11. Если пользователь выбирает вариант с Microsoft Windows XP Professional, тогда Часть 3 NTLDR также знает где находится ядро Windows XP. Оно обретается в самом первом первичном разделе. Вначале он запускает winload.exe; в конечном счёте winload.exe копирует ядро XP в память и NTLDR уходит прочь. Рисунок 2-50 отображает полную последовательность запуска Windows XP.

     

    Рисунок 2-50


    Последовательность запуска Windows XP

Итак, именно таким образом Windows XP и win2k3 способны запускаться. Давайте вернёмся к нашему обсуждению подписей fdisk; загружается лишь win2k3, а прочие ОС не имеют возможности запуска, у меня есть несколько вопросов для ответа:

  • Можем ли мы запускать только Windows XP?

  • Что если мы оставим свой флаг запуска в OpenSolaris?

  • Что если мы оставим свой флаг запуска в PC-BSD?

  • Что если мы не оставим свой флаг запуска нигде?

Задумайтесь на мгновение, повторно рассмотрите блок- схемы и придите к своему ответу.

Готовы? У нас нет возможности загружать только Windows XP. Это невозможно, поскольку в самом Windows XP все части начальных загрузчиков были заменены на NTLDR win2k3. К тому же, win2k3теперь знает где расположен XP и только win2k3 и способен запускать Windows XP. Это также означает, что если Часть 1 начального загрузчика win2k3испорчена или разрушена, мы утратим XP окончательно. Но если мы оставим флаг запуска в PC- BSD, тогда она загрузится как обычно. Рисунок 2-51 отображает последовательность запуска PC-BSD.

 

Рисунок 2-51


Последовательность запуска PC-BSD

Если мы не оставим флаг запуска ни в одном из разделов, загрузка просто не произойдёт. Это походе на ту ситуацию, которую мы обсуждали при рассмотрении того, что произойдёт если в логическом разделе был установлен флаг запуска. Рисунок 2-52 отображает имеющуюся последовательность запуска для пояснения того почему ни одна из ОС не способна запускаться.

 

Рисунок 2-52


Имеющаяся последовательность запуска, показывающая почему ни одна из ОС не способна запускаться

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

Теперь, основной вопрос состоит в том, что если мы оставим флаг запуска в разделе OpenSolaris? Запуск OpenSolaris завершится неудачно. Начальный загрузчик OpenSolaris, коим выступает GRUB, выдвинет то сообщение об ошибке, которое отображено на Рисунке 2-53.

 

Рисунок 2-53


Упавший в строку приглашения на ввод GRUB

Но почему? Он же должен запускаться, не правда ли? В OpenSolaris (512 байт + 31 кБ) ничто не изменено. Просто win2k3 переместил флаг запуска с раздела OpenSolaris на первый первичный. А потому в идеале он должен запускаться, но он не желает этого делать и основная причина состоит в поведении win2k3. Когда win2k3 устанавливался, он столкнулся с ситуацией, аналогичной с той, с которой сталкивались OpenSolaris и PC-BSD. Иными словами, установленный флаг начального запуска находится в ином разделе, а этот раздел обладает иной ОС. Что если OpenSolaris пребывает в той ситуации, когда флаг запуска был перемещён из раздела XP в его собственный раздел, но поскольку это превратит XP в не загружаемую, он щедро делает некую запись для XP в своём собственном файле (menu.lst) OpenSolaris считывает это файл всякий раз и даёт некие равные возможности для запуска XP.

В случае PC-BSD тот выявляет что флаг запуска находится в OpenSolaris и когда он перемещается в его собственный раздел, это сделает OpenSolaris не запускаемым. Следовательно, BSD щедро выбирает не помещать устанавливаемый флаг запуска в его собственном разделе с тем, чтобы другая ОС не превратилась в не загружаемую. Однако win2k3 не обладает такой щедростью. После того, как win2k3 был установлен, он обнаруживает, флаг запуска установлен в ОС не на основе Windows. Поэтому он перемещает флаг запуска в OpenSolaris, но поскольку это не ОС на основе Windows, он не создаёт никакой записи в boot.ini. Продвигаясь далее, win2k3 даже повредил/ удалил Часть 1 GRUB OpenSolaris. Следовательно OpenSolaris не способен теперь запускаться.

Позднее win2k3 прошёл дальше и вычистим начальный загрузчик XP, но он сделал для XP запись в boot.ini, поскольку это операционная система Windows. Именно по этой причине я и сказал, что win2k3 не обладает некой щедростью, которую выказывают OpenSolaris и PC-BSD. Но мы исправим OpenSolaris в разделе Главе 2, этой главы

Windows 7

Как вы можете видеть на Рисунке 2-54 мы устанавливаем в Windows 7 в своём пятом разделе.

 

Рисунок 2-54


Схема диска, отображаемая установщиком Windows 7

Windows не отображает расширенный раздел чтобы на путать обычных пользователей настольных компьютеров.


1st  = XP     2nd = Solaris    3rd  = PC-BSD      4th  = win2k3      5th  = 7
		

Как вы думаете, какая ОС запустится после установки? Как обычно, подумайте какое- то время и предложите свой ответ, прежде чем продолжить с Рисунком 2-55.

 

Рисунок 2-55


Показываемое Windows 7 окно приветствия

Вы верно угадали: Windows 7. Ниже приводится полная последовательность запуска Windows 7:

  1. Включается электропитание.

  2. ЦПУ выполнит безусловный переход в свой BIOS.

  3. После процедуры POST, BIOS выполнит безусловный переход в самый первый сектор всего своего HDD.

  4. При установке Windows 7 метка * была в самом первом первичном и Windows 7 был установлен в неком логическом разделе. Поэтому Windows 7 столкнулся с той же самой задачей, с которой встретился win2k3.

  5. Чтобы сделать себя загружаемым,Windows 7 проследовал тем же самым путём, что и win2k3. Windows 7 установит свои Часть 1, Часть 2 и Часть 3 в самом первом первичном разделе. Часть 3 не нуждается в установке в самом первом первичном, ибо в Части 2 жёстко кодируется местоположение для Части 3, но семейство Windows работает именно таким образом.

  6. При установке Частей 1 и 2 Windows 7 в самом первом первичном разделе, очевидно, Windows 7 придётся удалить NTLDR (Части 1 и 2) win2k3, однако при удалении этих файлов Windows 7 распознаёт что win2k3 относится к семейству ОС Windows; следовательно, вызываемый начальным загрузчиком Windows 7 BCD (Boot Configuration Data, данные настройки запуска) делают запись для win2k3 в своём собственном файле, который можно наблюдать в bcdedit.exe. Проверьте Рисунок 2-56 чтобы увидеть вывод bcdedit.exe.

    “Windows Legacy OS Loader” (Загрузчик наследуемой ОС Windows) на Рисунке 2-56 означает win2k3.

     

    Рисунок 2-56


    Показываемое Windows 7 окно приветствия

  7. Итак, вернёмся к последовательности запуска, она выглядит так: BIOS ➤ POST ➤ BIOS ➤ первый сектор HDD.

  8. Самые первые 440 байт области саморакрутки это Часть 1 начального загрузчика BCD Windows 7. Он отыскивает пространство большего размера, которое составляет Часть 2 BCD.

  9. Часть 2 BCD считает имеющуюся MBR и узнает что на этом диске существуют четыре первичных раздела, однако для проверки того какой из них активный, он начнёт поиск подписи fdisk во всех разделах, но обнаружит активной сам самый первый первичный раздел.

  10. Часть 2 выполнит безусловный переход внутри самого первого первичного раздела, в котором хранится Часть 3 начального загрузчика BCD Windows 7. Часть 3 посредством bcdedit.exe считает файл настроек начального загрузчика и перечислит все записи, которые упоминаются перед переменной description. Рисунок 2-57 отображает то что появится на экране.

     

    Рисунок 2-57


    Показываемое Windows 7 окно приветствия

  11. Если пользователь выбирает Windows 7, тогда, как вы можете видеть в bcdedit.exe, Часть 3 BCD вызовет winload.exe из C:\windows\systemd32. Помните, здесь C: означает раздел Windows 7, которым является шестой логический раздел.

  12. Наш файл winload.exe знает значение местоположения ядра Windows 7. Он запустит загрузку этого ядра в свою оперативную память и по её выполнению уже ядро Windows 7 позаботится обо всей остающейся последовательности запуска. Вы можете видеть отображаемую Windows 7 анимацию когда он стартует последовательность запуска на Рисунке 2-58.

     

    Рисунок 2-58


    Анимация, показываемая Windows 7 в последовательности запуска

    Рисунок 2-59 отображает всю полную болк- схему последовательности запуска Windows 7.

     

    Рисунок 2-59


    Последовательность запуска Windows 7

  13. Когда наш пользователь выбирает Earlier Version of Windows (более раннюю версию Windows), тогда Часть 3 BCD вызовет Часть 3 NTLDR которая расположена только в самом первом первичном разделе и, как мы обнаружим, наша последовательность запуска продолжится с win2k3. Рисунок 2-60 поясняет последовательность запуска win2k3 и XP.

     

    Рисунок 2-60


    Последовательность запуска win2k3 и XP

RHEL 6

Установщик RHEL носит название Anaconda. Установщик Anaconda применяется во всех дистрибутивах на основе Fedora. На Рисунке 2-61 мы запустили установку RHEL 6.

 

Рисунок 2-61


Приветственное окно носителя запуска RHEL 6

Рисунок 2-62 отображает текущую схему разделов.

 

Рисунок 2-62


Схема разделов, показываемая установщиком Anaconda

Как показано на Рисунке 2-63, нам требуется назначить корень (/) разделу sda7 и переформатировать его ч ext4, которая является файловой системой по выбору RHEL 6.

 

Рисунок 2-63


Реализуемая Anaconda схема разделов

Как видно из Рисунка 2-64, RHEL 6 (или Anaconda) определила некоторые ОС и она пытается предоставить равные возможности всем прочим ОС (определяемым как Other). Имеется два варианта для записей ОС, которые начальный загрузчик RHEL6 (GRUB) будет показывать в момент запуска.

 

Рисунок 2-64


Anaconda определяет другую ОС

Что касается RHEL 6, другая ОС будет запускаться с sda5. Это означает следующее:


sda1 = XP
sda2 = Solaris
sda3 = PC BSD
sda4 = Extended partition
sda5 = Win win2k3    <<<-----------
 	   

В момент запуска, если пользователь выбирает вариант Other, предполагается запуск win1k3. Какая ОС запускается после выбора варианта Other? Подумайте немного и приведите собственную последовательность запуска.

Давайте перезапустим эту систему и посмотрим какая ОС запускается. Как показано на Рисунке 2-65, это RHEL 6, которая запускается и предоставляет возможность запуска иной ОС.

 

Рисунок 2-65


Приветственное окно RHEL 6

Вот как запускается RHEL 6:

  1. При включении данной системы она входит в BIOS, затем из BIOS в POST, а из POST обратно в BIOS.

  2. BIOS в конечном счёте запускает первый сектор всего своего HDD и выполняет самораскрутку.

  3. Когда устанавливался RHEL 6, подпись * была на самом первом первичном разделе.

  4. Та проблема, с которой столкнулись win2k3 и Windows 7 возникает и перед RHEL 6. RHEL 6 устанавливается в неком логическом разделе который не может достигать или обнаруживать BIOS. Следовательно, для улаживания этой проблемы RHEL 6 должен сдвинуть свои Часть 1 и Часть 2 начального загрузчика (GRUB) в самый первый первичный раздел. Помните, что Windows также сдвигал и Часть 3 в этот первый первичный раздел, но RHEL (и в целом все ОС LINUX) будут сдвигать лишь первые две части в этот первый первичный раздел, а Часть 3 GRUB будет оставаться в его собственном разделе; в нашем случае в sda7.

  5. При замене своими Частями 1 и 2 RHEL обнаруживает, что уже имеются установленными некие иные ОС и для предоставления им равных вариантов загрузки он делает некую запись для них в файле настроек с названием /boot/grub/grub.conf в своём собственном разделе. Рисунок 2-66 отображает этот файл grub.conf.

     

    Рисунок 2-66


    Файл grub.conf

    Как вы можете видеть, то что записано после переменной title будет выведено на печать на вашем экране.

  6. Возвращаясь к нашей последовательности запуска, та самораскрутка, которая представлена в самом первом первичном разделе взята из RHEL.

  7. Часть 1 GRUB RHEL выполняет безусловный переход к Части 2.

  8. Часть 2 GRUB обладает жёстко кодированным местоположением для Части 3 GRUB. Часть 3 GRUB расположена в разделе RHEL, которым является sda7.

  9. Часть 3 GRUB считывает свой файл grub.conf из каталога /boot/grub и всё что записано после переменной title будет выведено на экран. Рисунок 2-67 отображает это.

     

    Рисунок 2-67


    Приветственное окно, показываемое GRUB RHEL 6

  10. Если пользователь выбирает первый вариант, которым является Red Hat Enterprise Linux 6, тогда Часть 3 GRUB знает где расположено ядро RHEL. Рисунок 2-68 отображает файл grub.conf.

     

    Рисунок 2-68


    grub.conf файл в RHEL 6

  11. Исполняемый двоичный файл ядра будет в /boot/vmlinuz. (Обратите внимание на значение переменной kernel с Рисунка 2-68). Обычно тот же самый файл grub.conf сообщает значение местоположения для Части 3 GRUB. Он скопирует само ядро (vmlinuz) в оперативную память и задание начального загрузчика GRUB выполнено. Ядро RHEL позаботится об остатке последовательности запуска. Тем временем, пока данная система запускается, на вашем экране появится привлекательная анимация, которая отражена на Рисунке 2-69.

     

    Рисунок 2-69


    Анимация для сокрытия сложностей регистрационных сообщений

  12. Рисунок 2-70 отображает блок- схему полной последовательности запуска RHEL 6.

     

    Рисунок 2-70


    Последовательность запуска RHEL 6

  13. Если пользователь выбирает вариант Other, тогда он вызовет нечто, представленное в разделе sda5. Как вы можете увидеть на Рисунке 2-71, sda5 является разделом win2k3.

     

    Рисунок 2-71


    Другая ОС в разделе 5

  14. При установке win2k3 он сдвигал все свои Части начального загрузчика в самый первый первичный раздел. Это означает, что раздел win2k3 не обладает каким бы то ни было представленным начальным загрузчиком, а потому, естественно, никакая ОС не запустится. Рисунок 2-72 показывает то сообщение об ошибке, которое выведется на экран если вы попытаетесь запустить эту иную ОС.

     

    Рисунок 2-72


    Сообщение об ошибке

Теперь у меня имеется пара вопросов, требующих ответа:

  • Где теперь *?

  • Если оставить * во втором разделе, какая ОС запустится?

  • Если оставить * в третьем разделе, какая ОС запустится?

  • Если оставить * в пятом (логическом) разделе, какая ОС запустится?

  • Если не оставлять * ни в одном из разделов, какая ОС запустится?

Для всех этих сценариев будет запускаться лишь одна ОС, и это будет RHEL 6 (Рисунок 2-73).

 

Рисунок 2-73


Экран рабочего стола RHEL

Не имеет значения где вы оставили * или даже когла вы не оставили * ни в одном из разделов, во всех этих случаях будет запускаться только RHEL. Причина этого проста, однако она совсем меняет всю последовательность запуска. Начальный загрузчик Red Hat Enterprise Linux, которым является GRUB, не следует установке * и не проверяет какой из разделов активен перед вызовом Части 3 своего начального загрузчика. На самом деле ни одна из ОС Linux не беспокоится о проверке наличия активного раздела. Они просто пропускают этот шаг. А потому последовательность запуска превращается в такую:

  1. Прежде всего система переходит в BIOS, затем в POST и потом снова в свой BIOS, и, наконец, к саморускрутке из самого первого первичного раздела.

  2. Часть 1 GRUB RHEL выполняет безусловный переход к Части 2 GRUB, которая (после пропуска части поиска подписи fdisk) осуществляет безусловный переход к Части 3 GRUB.

  3. Часть 3 GRUB проходит к /boot/grub/grub.conf для вывода на печать записей ОС.

  4. Когда пользователь выбирает RHEL, тогда необходимое ядро загружается из /boot/vmlinuz в оперативную память.

  5. Это ядро заботится обо всём остатке запуска своей ОС, что будет подробно описано в оставшейся части этой книги.

Это также означает, что в настоящее время запускается лишь одна ОС и это RHEL 6. Это плохо! Следовательно, нам требуется подкрутить GRUB для запуска остальных имеющихся операционных систем.

Регулировки GRUB

Наилучшее свойство GRUB состоит в том, что он способен запускать любую прочую операционную систему вне зависимости от того основана она на Linux или нет. Тот трюк, который применяет GRUB для запуска другой ОС прост, но поразителен. Для того чтобы всякий начальный загрузчик загрузил ОС вам не надо ничего иного кроме как загрузить ядро этой соответствующей ОС в память. GRUB знает где располагается ядро ос Linux (/boot/vmlinuz). Однако GRUB не представляет где находится ядро Windows или PC-BSD. Его уловка состоит в том, что начальные загрузчики этих соответствующих операционных систем знают значение местоположения относящихся к ним ядер. А потому GRUB просто вызывает их надлежащие начальные загрузчики; к примеру, если GRUB желает загрузить BSD, он пребывает в третьем первичном разделе. Обратимся к Рисунку 2-74, который отображает схему разделов чтобы получше разобраться в этом.

 

Рисунок 2-74


Схема разделов BIOS

BSD установил свой начальный загрузчик в зарезервированных 512 байт + 31 кБ своего собственного раздела. Поэтому GRUB вызовет Часть 1 BTX. Это носит название цепочной загрузки (chainloading). Часть 3 начального загрузчика GRUB цепочно загрузит Часть 1 BTX, Часть 1 BTX знает что делать далее, а именно отыскать Часть 2. Часть 2 осуществит безусловный переход к Части 3, а она и запустит ядро BSD в оперативной памяти, а потому BSD начнёт запускаться. Для достижения такой цепочной загрузки нам требуется сообщить GRUB местоположение Части 2 BTX через его файл grub.conf. Этим местоположением будет жёсткий диск номер 1 и раздел номер 3, однако GRUB начинает свой отсчёт с 0, а потому для него местоположением будет жёсткий диск номер 0 и раздел номер 2. Соответствующая запись в /boot/grub.conf выглядит следующим образом:


              title pc-bsd               <<<---- Заголовок записи данной ОС
              rootnoverify (hd0,2)       <<<---- местоположение BTX
              chainloader +1             <<<---- grub будет цепочно запускать BTX
 	   

Как вы можете видеть на Рисунке 2-75, записи всех прочих операционных систем аналогичны BSD; будет изменяться лишь номер соответствующего раздела.

 

Рисунок 2-75


Отрегулированный файл grub.conf RHEL 6

После перезапуска GRUB отобразит записи со значениями title. Обратите внимание на Рисунок 2-76.

 

Рисунок 2-76


Приветственное окно GRUB отображаемое RHEL 6

Когда пользователь выбирает Windows, он вызовет часть 2 BCD, которым выступает пространство в 31 кБ из самого первого первичного раздела. Это пространство в 31 кБ также имеет название VBR (volume boot record, загрузочной записи тома). Я умышленно опустил объяснение VBR, так как это приводит к излишней путанице. Поэтому, в случае цепочного запуска Windows просто зарубите себе на носу что вместо Части 1 будет вызываться Часть 2. Для тех, кому требуется слегка больше сведений относительно VBR, MBR это главная загрузочная запись для всего жёсткого диска, размещающаяся в самом первом секторе своего жёсткого диска. Каждый том (представляйте его себе как раздел) обладает своей собственной записью запуска, именуемой VBR в качестве самого первого сектора своего раздела. Два названия для двух схожих вещей.

Итак, Часть 2 BCD вызывает Часть 3 BCD, которая расположена в самом первом первичном разделе. Она считает имеющиеся записи BCD ОС (bcdedit.exe), как это отражено на Рисунке 2-77 и выведет их на печать в своём экране.

 

Рисунок 2-77


Записи ОС отображаемые начальным загрузчиком BCD

Если пользователь выберет Earlier Version of Windows (более ранние версии Windows), как мы это наблюдали ранее (в процессе последовательности запуска Windows 7), он запустит Часть 3 NTLDR, которая опять же расположена в этом первом первичном разделе. Как показано на Рисунке 2-78, NTLDR считает необходимый файл boot.ini со своего устройства C и выведет на печать имеющиеся записи ОС.

 

Рисунок 2-78


Записи ОС отображаемые NTLDR win2k3

Когда пользователь выбирает XP, Часть 3 NTLDR знает где расположено необходимое ядро XP. Если вместо этого этот пользователь выбирает win2k3, тогда тот же самый NTLDR загрузит необходимое ядро win2k3 в оперативную память.

Обратите внимание на Рисунок 2-79, который является основным загрузочным экраном, предоставляемым RHEL когда этот пользователь выбирает OpenSolaris.

 

Рисунок 2-79


Отображаемые RHEL записи ОС

Ниже приводятся те инструкции, которым будет следовать GRUB:


title Solaris
      rootnoverify (hd0,1)
      chainloader  +1
 	   

Таким образом, Часть 3 GRUB передаст управление области самораскрутки своего второго первичного раздела, но вы помните, что win2k3 вычистил Часть 1 GRUB OpenSolaris. Следовательно, как это видно из Рисунка 2-80, в запуске будет отказано.

 

Рисунок 2-80


Отказ в запуске OpenSolaris

Это подразумевает, что нам надлежит в первую очередь исправить начальный загрузчик OpenSolaris. Для такого исправления нам следует загрузиться с образа live CD OpenSolaris, который мы применяли для установки OpenSolaris и после его загрузки установить Части 1 и 2 (Часть 2 этого не требует, но переустановка не испортит нашего предприятия) GRUB с этого live CD в зарезервированные 512 байт + 31 кБ OpenSolaris. Мы применим для этого команду installgrub. Как и предполагает её название, эта команда скопирует Часть 1 (stage1) и Часть 2 (stage2) GRUB со своего live образа и поместит их пространство 512 байт + 31 кБ раздела OpenSolaris. Рисунок 2-81 отображает эту команду в действии.

 

Рисунок 2-81


Команда installgrab

После очередной перезагрузки RHEL снова отобразит те же самые записи ОС (Рисунок 2-82), так как для RHEL ничего не изменилось.

 

Рисунок 2-82


Показываемые RHEL записи ОС

Когда на это раз мы выбираем OpenSolaris, тогда Часть 3 GRUB RHEL цепочно загрузит Часть 1 GRUB OpenSolaris из своего второго раздела. Часть 1 вызовет Часть 2 и в конце концов та вызовет Часть 3 из реального раздела OpenSolaris. Часть 3 GRUB OpenSolaris считает /rpool/boot/grub/menu.lst и, как это показано на Рисунке 2-83 отобразит на печать на его экране соответствующих заголовков.

 

Рисунок 2-83


Отображаемые OpenSolaris записи ОС

Если пользователь выбирает OpenSolaris, тогда Часть 3 GRUB OpenSolaris запустит своё ядро из /boot. Когда пользователь выбирает Windows, тогда Часть 3 GRUB OpenSolaris будет следовать инструкциям из /rpool/boot/grub/menu.lst:


title Solaris
      rootnoverify (hd0,1)
      chainloader  +1
 	   

Теперь мы уже знаем что должно появиться на экране (обратите внимание на Рисунок 2-84).

 

Рисунок 2-84


Отображаемые BSD записи ОС

Наше повествование продолжится если пользователь выберет Earlier Version of Windows, что мы, впрочем, уже обсуждали. Вернёмся обратно к изначальному списку ОС, Рисунок 2-85 отображает что представлено GRUB RHEL.

 

Рисунок 2-85


Показываемые RHEL записи ОС

Когда пользователь выбирает запуск BCD вы в точности знаете что должно произойти. Часть 3 GRUB RHEL цепочно загрузит Часть 1 BTX из своего третьего первичного раздела. Часть 1 BTX вызовет Часть 2, а Часть 2 вызовет Часть 3 BTX. Часть 3 BTX покажет окно приветствия как это отображает Рисунок 2-86.

 

Рисунок 2-86


Приветственное окно PC-BSD

Когда выбран запуск, Часть 3 BTX загрузит необходимое ядро Unix BCD в оперативную память. Итак, теперь способны запускаться все те операционные системы, которые мы установили на данный момент, причём совершенно не имеет значения какой из разделов является активным. Но можем ли мы взламывать начальные загрузчики Windows и принуждать их к запуску операционных систем Linux и Unix из нашего собственного перечня? Да, это возможно, и именно этим мы сейчас и займёмся.

Взламываем начальный загрузчик Windows

На само деле достаточно просто перехитрить начальные загрузчики Windows. Как мы уже видели ранее, начальные загрузчики выполняют цепочные загрузки; например, Часть 1 вызывает Часть 2 своего начального загрузчика и так далее. Чтобы понять нашу хитрость, давайте выберем в качестве примера BSD. Часть 1 BCD вызывает свою Часть 2 BCD, однако если мы укажем Части 1 BCD цепочно вызвать Часть 1 RHEL, тогда запустится Часть 1 RHEL и она в конечном счёте будет следовать своей собственной последовательности запуска. Часть 1 GRUB (RHEL) вызовет Часть 2 GRUB и в конце концов цепочно запустит Часть 3 GRUB, так как адрес блока Части 3 жёстко закодирован в Части 2. Это означает, что после того как запускается Часть 1 любого начального загрузчика, она далее следует запуску собственной последовательности загрузки, а мы извлекаем преимущества из такого поведения.

Для достижения этого нам требуется получить Части 1 всех не Windows начальных загрузчиков и поместить их в файловую систему самой Windows. По этой причине файловая система может быть FAT32 или NTFS. Очевидно, что размещение Первой части каждого основанного на не Windows начального загрузчика в самом первом первичном разделе имеет наибольшими преимуществами, ибо все операционные системы Windows устанавливают свои соответствующие начальные загрузчики в самом первом первичном разделе. Итак, посредством команды dd мы скопируем самые первые 512 байт (достаточно даже самых первых 440 байт) все основанных не на Windows ОС и поместим их враздел XP. Давайте выполним монтирование самого первого первичного раздела как это отражено на Рисунке 2-87.

 

Рисунок 2-87


Команда монтирования

Давайте скопируем самые первые 512 байт и поместим их в своём разделе sda1. Для этого отсылаем вас к Рисунку 2-88.

 

Рисунок 2-88


Передача первых 512 байт в самый первый первичный раздел

Теперь мы снова выполним запуск XP и, как это показано на Рисунке 2-89, добавим соответствующие файлы записей Частей 1 в свой файл boot.ini. Этот файл boot.ini считывается обоими начальными загрузчиками Windows, и BCD, и NTLDR win2k3.

 

Рисунок 2-89


Добавление записей в файл boot.ini

Ниже приводятся добавленные нами записи:


c:\RHEL.out=&qout;RHEL&qout;
c:\SOLARIS.out = &qout;SOLARIS&qout;
c:\BSD.out=&qout;BSD&qout;
 	   

В точности как и файл grub.conf, всё что записанов двойных кавычках в boot.ini будет рассматриваться как заголовок соответствующей точки ОС. Теперь давайте перезапустим систему и выберем запись ОС из списка ОС RHEL (обратите внимание на Рисунок 2-90).

 

Рисунок 2-90


Отображаемый RHEL список ОС

Как мы достигли этого экрана понять не сложно.

  1. Наша система сначала зашла в BIOS, далее в POST и затем в BIOS, а после этого в самые первые 512 байт и следом в область самораскрутки (Часть 1) RHEL (GRUB).

  2. Затем вступает в дело Часть 1 GRUB, которая выполняет безусловный переход в Часть 2 GRUB, которая осуществляет безусловный переход в Часть 3 GRUB, а тот в свою очередь следует в /boot/grub.conf, который и выводит на печать заголовки ОС.

  3. Наш пользователь выбирает Windows, поэтому следующей вступает в действие Часть 1 BCD из самого первого первичного раздела, а следом и Часть 2 BCD.

  4. Наконец, дело доходит до Части 3, затем bcd.exe, а он считает файл boot.ini и всё что заключено в двойных кавычках будет выведено на печать на экране.

Этот перечень ОС можно увидеть на Рисунке 2-91.

 

Рисунок 2-91


Отображаемые Windows 7 записи ОС

Когда пользователь выбирает Earlier Version of Windows, тогда Часть 3 BCD вызовет Часть 3 NTLDR win2k3. NTLDR снова считает этот файл boot.ini и выведет на печать свой перечень ОС, как это показано на Рисунке 2-92.

 

Рисунок 2-92


Отображаемые NTLDR win2k3 записи ОС

Если пользователь выбирает OpenSolaris, тогда Часть 3 NTLDR считает файл Solaris.out с C: (самого первого первичного раздела). Этот файл Solaris.out ни что иное как Часть 1 начального загрузчика OpenSolaris из нашего второго раздела. Часть 1 начального загрузчика OpenSolaris вызывает Часть 2 и в конечном счёте Часть 3 GRUB. Та считывает соответствующий файл menu.lst и выводит на печать свой перечень ОС (Рисунок 2-93).

 

Рисунок 2-93


Отображаемые GRUB OpenSolaris записи ОС

Если пользователь снова выбирает Windows, тогда Часть 3 OpenSolaris вызовет Часть 2 BCD из самого первого первичного раздела (rootnoverify (hd0,0)). (Часть 2 BCD будет пребывать в соответствующем разделе VBR нашего первого первичного раздела. Мы не обсуждаем в этой книге VBR.) Часть 2 BCD вызывает Часть 3 BCD. Она считывает имеющиеся записи ОС через bcdedit.exe и из boot.ini и выводит на печать эти записи ОС. Такие выведенные на печать на экран записи ОС видны на Рисунке 2-94.

 

Рисунок 2-94


Отображаемые Windows 7 (BCD) записи ОС

Именнно так мы и создали некий цикл начальных загрузчиков (смотрите на Рисунок 2-95 и Рисунок 2-96).

 

Рисунок 2-95


Выбранная для запуска запись RHEL

 

Рисунок 2-96


Отображаемые GRUB RHEL записи ОС

Как вы можете видеть, Linux запускает Windows, Linux запускает Unix, Unix запускает Windows, Windows запускает Windows и Windows запускает Linux. Однако один момент всё ещё упущен и это Linux, запускающий Linux. Для этого мы установим последнюю ОС из нашего перечня, и это Fedora 15.

Fedora 15

Как показано на Рисунке 2-97, мы устанавливаем Fedora 15 в sda8.

 

Рисунок 2-97


Установщик Fedora

По умолчанию Fedora попытается установить свой начальный загрузчик в самом первом первичном разделе, однако, если допустим это, тогда снова нам потребуется добавлять необходимые записи всех прочих ОС в его grub.conf. Вместо этого мы будем придерживаться иного подхода. Мы установим собственный начальный загрузчик Fedora (GRUB) в его собственном разделе (sda8) вместо sda1. Обратите внимание на Рисунок 2-98.

 

Рисунок 2-98


Выбор устройства начального загрузчика

Это означает, что после перезапуска Fedora никогда не будет способна запуститься, поскольку GRUB RHEL не осведомлён об этой новой ОС, поэтому нам потребуется добавить запись Fedora в grub.conf RHEL. Для этого давайте смонтируем sda8, как это отображено на Рисунке 2-99.

 

Рисунок 2-99


Монтирование раздела Fedora

Скопируем записи Fedora (смотрите на Рисунке 2-100) из файла настроек grub.conf GRUB Fedora: /mnt/boot/grub.conf.

 

Рисунок 2-100


Файл grub.conf Fedora

Эти записи просты. При каждом вызове Части 3 Fedora она будет запускать необходимое ядро Fedora из /boot/vmlinuz-2.6.38.6-26.rc1.fc15.x86_64 в свою оперативную память. После этого она загрузит initramfs из /boot/initramfs-2.6.38.6-26.rc1.fc15.x86_64.img в свою оперативную память.

Рисунок 2-101 отображает /etc/grub.conf файл RHEL после копирования необходимой записи Fedora bp /mnt/etc/grub.conf.

 

Рисунок 2-101


Файл grub.conf RHEL

После перезагрузки мы получаем нужную запись Fedora (Рисунок 2-102).

 

Рисунок 2-102


Отображаемые RHEL записи ОС

Когда наш пользователь выбирает для запуска Fedora в качестве записи из файла grub.conf RHEL, Часть 3 GRUB RHEL загрузит соответствующее ядро из своего восьмого раздела (sda8 Fedora) и мы также загрузим initramfs из того же самого места (initramfs мы обсудим в Главе 5), а наш начальный загрузчик уйдёт прочь.

Полная блок- схема

Рисунок 2-103 отображает законченную блок- схему всех ОС, которые мы установили на данный момент.

 

Рисунок 2-103


Полная блок- схема всех имеющихся операционных систем

Я надеюсь, теперь вы разбираетесь в том способе, которым начальные загрузчики запускают свои операционные системы в основанных на BIOS системах. Теперь пришло время разобраться с новым встроенным ПО, которым является UEFI (Unified Extensible Firmware Interface, Универсальный интерфейс расширяемого встроенного программного обеспечения).

UEFI

Вот некоторые ограничения рассматривавшегося нами до сих пор BIOS:

  • Вы можете иметь лишь четыре первичных раздела.

  • BIOS не способен считывать свои логические разделы.

  • Сам BIOS до некоторой степени туп; он всего лишь выполняет безусловный переход в самый первый сектор вашего HDD.

  • Максимальный размер раздела основанных на BIOS систем составляет 2.2 ТБ.

Почему он обладает такими ограничениями? Встроенное ПО BIOS было разработано в 1982 году для IBM PC-5150 (Рисунок 2-104), который обладал такой конфигурацией:


CPU       = 8088 - 16bit x86 processor
Memory    = upto 256KB max
OS        = MS-DOS
 	   
 

Рисунок 2-104


IBM PC-5150

Как вы можете видеть, этот BIOS был спроектирован для такого ПК 38 лет назад. За эти три десятилетия операционные системы выросли с гибких дисков до дисков NVMe и от текстового режима до сиятельных GUI. Сами аппаратные устройства прошли путь от обычных устройств до подключаемых (plug and play), однако BIOS оставался всё тем же самым, который изначально обладал неким набором 16- битных инструкций, а на последующих этапах начал использовать 43- битный набор инструкций. В наши дни мы обладаем 74- битными ЦПУ, однако сам BIOS всё ещё выполнен на 32- битных инструкциях. Основная причина, по которой мы не обновили свой BIOS до 64- битного обусловлена историческими обстоятельствами. Когла всё работает зачем переписывать чтот- то? Эта та философия, к которой адаптируется вычислительная индустрия в любом случае. Когда наши ЦПУ прошли от 18- битных (8088) до 64- битных (i9), их BIOS оставался 16- битным или 32- битным, ибо на момент самых ранних этапов запуска не было потребности обладать 64- битным ЦПУ и именно по этой причине мы обладаем режимами ЦПУ (real - реальный, protected - защищённый и long - длинный).

В реальном режиме наш ЦПУ будет ограничен 16 битами. В этом режиме будут оаботать такие программы, как старый BIOS, обладающие 16- битными инструкциями. Эти программы не способны запускаться ни в одном ином режиме. Позднее наш ЦПУ будет переключён с реального режима на защищённый режим. Этот защищённый режим является 32- битным и программы этих дней, такие как наш BIOS, которые обладают набором 32- битных инструкций будут запускаться в этом режиме, а позднее наш ЦПУ будет помещён в длинный режим, который является 64- битным. Помните, эти режимы не реализуются самим ЦПУ; вместо этого они реализуются встроенным ПО подобным BIOS. Это означает, что мы перемещаем тот же самый ЦПУ из системы с включённым реальным режимом и помещаем его в систему, которая не обладает реальным режимом, далее тот же самый ЦПУ напрямую запустится в защищённом режиме. Мы снова обсудим эти режимы в Главе 4.

Поскольку BIOS запускается в защищённом режиме, то адресное пространство, которое доступно BIOS составляет лишь 4 ГБ. Если система обладает 20 ГБ памяти, наш BIOS будет способен к адресации до 4 ГБ. Хотя наша система обладает 64- битным процессором i9, её BIOS всё ещё будет способен использовать только его 32- бита. По причине этих аппаратных проблем наш BIOS обладал ограничениями.

Ограничения BIOS

Вот некоторые ограничения BIOS:

  • BIOS будет обладать способностью безусловного перехода лишь к самому первому сектору, который составляет 512 байт.

    • MBR, который составляет в размере 64 байта, является частью этого самого первого сектора. Если мы увеличим установленный размер MBR, он выйдет за пределы 512 байт; следовательно, у нас нет возможности увеличения размера MBR и именно по этой причине BIOS способен предоставлять лишь 4 первичных раздела.

  • BIOS не способен вырабатывать приличной графики/ GUI.

    • Теперь это общий постулат и он используется при сопоставлении с UEFI. Некоторые поставщики BIOS реализовали веб браузеры вне конкретной ОС, но такие реализации редко можно обнаружить в обычном настольном железе.

    • Кроме этого, в Phoenix, некоторые реализации BIOS обладают драйвером FAT32, с помощью которого ему удается отображать иконки в настройках.

  • Вы не можете пользоваться мышью в BIOS.

    • Существует множество производителей BIOS, обладающих поддержкой мыши, но снова это редко можно найти в обычных настольных системах.

  • Максимальный размер раздела составляет 2.2 ТБ.

    • Имеющийся BIOS использует и поддерживает таблицу разделов MS DOS, которая достаточно старая и обладает своими собственными недостатками, такими как максимальный размер раздела в 2.2 ТБ.

  • BIOS не достаточно умён, так как он не понимает необходимых начальных загрузчиков или их ОС.

  • Он медленный по причине своих аппаратных ограничений.

    • В терминах скорости запуска BIOS являетс медленным поскольку ему требуется время для инициализации своего оборудования.

    • BIOS требуется почти 30 секунд для старта реального запуска уровня ОС.

  • Он из последних сил пытается выполнять инициализацию аппаратных устройств нового поколения.

  • BIOS обладает ограничениям в инструментах перед загрузкой.

    • По сравнению со встроенным ПО UEFI BIOS обладает очень небольшим числом предваряющих загрузку инструментов, таких как диагностики удалённых аппаратных средств и т.п.

Итак, чтобы преодолеть все эти ограничения BIOS, Intel в 1998 году выступила с инициативой Intel Boot Initiative (IBI); позже это превратилось в Расширяемый Интерфейс Прошивки (EFI, Extensible Firmware Interface ). К Intel присоединились все рочие возможные поставщики ОС и оборудования (HP / Apple / Dell / Microsoft / IBM / Asus / AMD / American Megatrends / Phoenix Technologies). Они создали форум открытого исходного кода для данного проекта, и, наконец, он стал Unified Extensible Interface (UEFI).

Этот код с открытыми исходниками подписывается по лицензтт BSD, однако базовый код Intel всё ещё частный. UEFI в целом некая платформа с открытым исходным кодом и производители выстраивают собственные решения поверх него, основываясь на спецификации, производимой UEFI.org. Например, American Megatrends собирает APTIO, Phoenix Technologies выстраивает своё встроенное ПО SecureCore UEFI. Apple была первой, кто осмелился запустить системы с прошивкой UEFI. Все недостатки, которыми обладал BIOS проистекали из его 16- битного набора инструкций. Так как этот набор инструкций ограничивал аппаратные средства BIOS использованием адресного пространства до 1 МБ, UEFI нацелился на это ограничение и разрешил его.

Преимущества UEFI

UEFI поддерживает 64- разрядные процессоры; следовательно, он не сталкивается ни с какими аппаратными ограничениями, с которыми сталкивается BIOS.

  • UEFI способен пользоваться ЦПУ полностью. В отличии от BIOS (который заперт в 16 битах процессора), UEFI способен осуществлять доступ до 64 бит {адресации}.

  • UEFI способен применять модуль ОЗУ целиком. В отличии от 1 МБ адресного пространства BIOS UEFI может поддерживать и применять терабайты ОЗУ.

  • Вместо 64 байт крошечного MBR UEFI использует тблицу разделов GPT (GUID), которая предоставляет неограниченное число разделов и все они будут первичными разделами. На самом деле просто не существует понятий первичных и логических разделов.

  • Максимальный размер раздела составляет 8 Зеттабайт.

  • UEFI обладает инструментарием управления корпоративного уровня.

    1. Вы будете способны вносить исправления в компьютер удалённо.

    2. Вы будете обладать возможностьб просмотра Интернета изнутри встроенного ПО UEFI.

    3. Вы будете обладать возможностью изменения поведения/ настроек своего встроенного ПО UEFI из ОС.

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

  • UEFI это небольшая ОС.

    1. Вы обладаете полным доступом к аудио и видео устройствам.

    2. Вы будете обладать возможностью подключения через WiFi.

    3. Вы способны применять мышь.

    4. В терминах GUI UEFI будет предоставлять богатый графический интерфейс.

    5. UEFI будет обладать своим собственным хранилищем прикладных приложений в точности как мы обладаем таковым для телефонов Android и Apple.

    6. Вы будете обладать возможностями выгрузки и использования таких приложений из хранилища прикладных приложений UEFI, в точности как и для телефонов Andeoid и Apple. Доступны сотни прикладных приложений, таких как календари, клиенты электронной почты, браузеры, игры, оболочки и т.п.

    7. UEFI способен запускать исполняемые файлы которые обладают исполняемым форматом EFI.

    8. Он безопасно запускает операционные системы с применением функциональности Безопасного запуска. В этой книге мы обсудим подробнее функциональность Безопасного запуска.

    9. UEFI обладает обратной совместимостью, что подразумевает, что он будет поддерживать "путь BIOS" для запуска. Иначе говоря, не обладающие поддержкой UEFI операционные системы также будут иметь возможность запуска в UEFI.

GUI UEFI

Рисунок 2-105 отображает реализацию GUI от ASUS.

 

Рисунок 2-105


Реализация UEFI от ASUS

Вот некоторые моменты на заметку:

  • Богатый GUI

  • Указатель мыши

  • Иконки, кнопки, опции прокрутки, анимации, графики, варианты ниспадающих иллюстраций и т.п.

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

Реализация UEFI

Форум UEFI выпустил свою спецификацию UEFI. Текущей спецификацией UEFI на момент написания данной книги была https://uefi.org/specifications. Эта текущая спецификация обладает 2 551 страницей и все производители (материнских плат, ОС, разработчики UEFI и т.п.) эта спецификация принуждает к соблюдению положений которым обязан следовать каждый производитель. Ниже приводятся некоторые основные положения UEFI.

Системный раздел EFI

Всякий производитель ОС обязан создавать один раздел ESP (EFI System Partition, Системный разде EFI) и его начальный загрузчик должен устанавливаться только в этом разделе. Нет необходимости в создании ESP в качестве первого раздела: он может быть создан где угодно, однако ESP обязан обладать файловой системой FAT16/ 32 (предпочтительно FAT32). Рекомендованный размер ESP минимально составляет 256 МБ. Каждый производитель ОС обязан создавать в ESP приводимую ниже структуру каталога:


EFI System Partition
      ├── EFI
      │     ├── <OS_vendor_name>
      │     │         ├── <boot_loader_files> 
		

После создания такой структуры, эта ОС обязана устанавливать свой начальный загрузчик исключительно внутри местоположения /EFI/<OS_vendor_name>/. Рисунок 2-106 показывает вам структуру UEFI.

 

Рисунок 2-106


Структура UEFI

Это выглядит как зарезервированное под начальные загрузчики пространство 512 байт + 31 кБ, в то же самое время мы обладаем минимально 256 МБ выделенного пространства для начальных загрузчиков в UEFI. Этот раздел ESP будет смонтирован в Linux в точке монтирования /boot/efi.

EFI

Всякий производитель ОС обязан писать файлы загрузчика в исполняемом формате EFI. Также файлы должны обладать расширение .efi.

Безопасная загрузка

Одной из наилучших предоставляемых UEDI функциональных возможностей является Безопасный запуск (Secure Boot). Это свойство было предложено Mirosoft и позднее было добавлено в имеющуюся спецификацию UEFI. Microsoft впервые применил безопасный запуск в Windows 8. Мы обсудим подробнее Безопасный запуск после того как ознакомимся с тем как рабтает UEFI.

Таблица разделов

Рекомендуемой таблицей разделов является GPT, которая является GUID partition table (Таблицей разделов GUID), в то время как BIOS применяет таблицу разделов MS-DOS.

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

Перечень операционных систем

Как вы знаете, UEFI применяет таблицу разделов GPT; следовательно, не существует понятия никаких первичных или вторичных/ логических разделов. Это также подразумевает что не существует никакого определённого приоритета для вашей установки операционных систем. Вы можете устанавливать операционные системы любым способом, каким пожелаете. {Прим. пер.: На самом деле это уже не совсем так по причине ограничений Безопасного запуска Windows.} Мы установим их в следующем порядке:

  • Ubuntu 18

  • Windows 10

  • Fedora 31

Ubuntu 18.04 LTS

У нас имеется почти 64.4 ГБ HDD. Для создания аналогичной применявшейся нами в системе BIOS схемы разделов нет нужды использовать инструментарий, аналогичный GParted. Вместо этого мы воспользуемся предоставляемой по умолчанию Ubuntu утилитой диска. Ваше внимание на Рисунок 2-107.

 

Рисунок 2-107


Схема диска, предоставляемая Ubuntu

Как это отображено на Рисунке 2-109, вначале мф создаём 3 ГБ раздел ESP.

 

Рисунок 2-108


Создание раздела ESP

После создания ESP мы сделаем ещё один дополнительный раздел для (10 ГБ) для файловой системы корня Ubuntu. Рисунок 2-109 показывает окончательную схему разделов Ubuntu.

 

Рисунок 2-109


Схема раздела Ubuntu

После установки мы можем наблюдать на Рисунке 2-110 что ESP смонтирована в /boot/efi, а наша корневая файловая система смонтирована в sda2.

 

Рисунок 2-110


Точки монтирования

Помимо этого, в соответствии со спецификацией UEFI Ubuntu создал некую структуру каталога /EFI/ubuntu в точке монтирования /boot/efi (sda1) и установил в нём необходимый начальный загрузчик GRUB. Обратите внимание на Рисунок 2-111.

 

Рисунок 2-111


Каталог EFI в Ubuntu

Кроме того, заметьте расширения .efi для файлов этого начального загрузчика. Ниже приводится вся последовательность запуска Ubuntu в системе UEFI:

  1. Подаётся электропитание данной системы.

  2. Она переходит к своему встроенному ПО UEFI. UEFI запускает POST.

  3. POST проверяет имеющееся оборудование и выдаёт звуковой сигнал жизнеспособности когда всё хорошо.

  4. POST возвращется обратно в UEFI.

  5. UEFI интеллектуально; вместо того чтобы выполнять безусловный переход в самые первые 512 байт, UEFI находит необходимый раздел ESP.

  6. Оно выполняет безусловный переход вовнутрь ESP. Снова, UEFI умно и разбирается с установленным начальным загрузчиком. Оно перечисляет на экране имеющееся название начального загрузчика. В случае Ubuntu оно обнаруживает файл grubx64.efi; следовательно оно перечисляет в своём приоритете запуска UEFI установленное название Ubuntu. Обратитесь, пожалуйста к Рисунку 2-112, на котором вы можете наблюдать соответствующую запись ubuntu внутри меню приоритета запуска UEFI.

     

    Рисунок 2-112


    Окно приоритета запуска UEFI

  7. Помните, что этот начальный загрузчик ещё пока не вызывался и не запускался UEFI. Наш BIOS применется для отображения только доступных названий загрузочных устройств, таких как CD-ROM, HDD и PXE, в то время как UEFI входит в само устройство чтобы проверить наличие раздела ESP и напрямую отображает название ОС.

  8. В тот момент, когда наш пользователь выбирает вариант Ubuntu, UEFI запустит Code grubx64.efi из соответствующего раздела ESP. Значением абсолютного пути будет /boot/efi/EFI/ubuntu/grubx64.efi. Затем grubx64.efi считает grubx.cfg, который представлен в том же самом каталоге и, как это отражено на Рисунке 2-113, выведет на печать все записи заголовков.

     

    Рисунок 2-113


    Приветственное окно Ubuntu

В случае с BIOS использовались безусловные переходы подобные следующим:

  1. Перейти к установленной подписи fdisk, проследовать к Части 1 нчального загрузчика и далее к Части 2 этого начального загрузчика.

  2. Перейти к Части 3 необходимого начального загрузчика и затем проследовать к файлу настроек своего начального загрузчика, такому как menu.lst или grub.cfg.

  3. Вывести на печать имеющиеся заголовки.

При применении UEFI безусловный переход (a) пропускается. UEFI напрямую выполняет безусловный переход к (b). Используемому BIOS приходится обладать поделённым на три части начальным загрузчиком по причине ограничений в пространстве, однако UEFI не обладает никакими пространственными ограничениями. Следовательно, весь начальный загрузчик целиком доступен в одном отдельном исполняемом файле. Например, в случае Ubuntu, grubx64.efi имеет все части один, два и три добавленными в единственный исполняемый файл, которым и выступает grubx64.efi.

Этот файл grubx64.efi в конечном счёте загрузит необходимое ядро (vmlinuz) из /boot в свою оперативную память, причём далее задание начальных загрузчиков GRUB Ubuntu выполнено. Рисунок 2-114 отображает полную блок- схему последовательности запуска Ubuntu.

 

Рисунок 2-114


Последовательность запуска Ubuntu

Windows 10

Как вы можете наблюдать на Рисунке 2-115, разделом й выступает ESP, а разделом 2 является корень (/) Ubuntu.

 

Рисунок 2-115


Отображаемая Windows схема разделов

Теперь мы создадим некий новый раздел для Windows. При создании какого- то нового раздела Windows зарезервирует некое пространство для инструмента восстановления Windows с наименованием MSR (Microsoft Recovery, раздел 4). Обратите внимание на Рисунок 2-116.

 

Рисунок 2-116


Резервирование пространства MSR

Как показано на Рисунке 2-117, в соответствующем вновь создвнном разделе 4 мы установим Windows 10.

 

Рисунок 2-117


Установка Windows в разделе 4

Windows по умолчанию обнаружит установленный раздел ESP и, следуя спецификации UEFI, он создаст каталог с наименованием Microsoft и установит в нём свой начальный загрузчик (BCD). Если Windows не обнаружит ESP, тогда он создаст его для нас. Поскольку Windows в основном предназначен для пользователей настольных систем, он не будет отображать раздел ESP (обратитесь к Рисунку 2-118) тем способом, которым показывает его Ubuntu.

 

Рисунок 2-118


ESP скрыта

Вот как Windows 10 будет запущен в системе на основе UEFI:

  1. Включается питание этой системы: вначале UEFI, затем POST и далее UEFI.

  2. Как это видно на Рисунке 2-119, на печать выдаются записи ОС в соответствии с обнаруженными в ESP каталогами (/boot/efi/EFI).

     

    Рисунок 2-119


    Записи ОС внутри UEFI

  3. В тот момент как наш пользователь выбирает Диспетчер запуска Windows (Windows Boot Manager), UEFI запустит файл bootmgfw.efi из установленного каталога EFI/Microsoft. В некой системе на основе Linux абсолютным путём к тому же самому файлу будет /boot/efi/EFI/Microsoft/bootmgfw.efi.

  4. bootmgfw.efi в конце концов загрузит необходимое ядро Windows из C:\windows\system32\.

  5. Это ядро Windows позаботится обо всём остатке своего запуска и при выполнении этого пользователям, как это показано на Рисунке 2-120, будет представлена знаменитая анимация.

     

    Рисунок 2-120


    Знаменитый экран загрузки Windows

  6. Как вы можете наблюдать на Рисунке 2-121, на данный момент запускается лишь одна ОС, и это Windows 10. Однако не волнуйтесь, поскольку Windows 10 ограничена следованием спецификации UEFI, она не будет касаться каталога Ubuntu и, конечно же, не добавит запись Ubuntu в свой собственный файл начального запуска.

     

    Рисунок 2-121


    Последовательность запуска Windows 10

Fedora 31

Последней устанавливаемой нами ОС является Fedora 31. Как показано на Рисунке 2-122, мы снова создадим некий стандартный раздел, которым выступает sda5 и мы смонтируем /dev/sda1 (ESP) в /boot/efi.

 

Рисунок 2-122


Установка Fedora

Помните, нельзя форматировать sda1, коим является ESP. Утрата ESP означает утрату установленных начальных загрузчиков Windows и Ubuntu. После установки нам будет представлен GRUB Fedora с имеющимся списком ОС (Рисунок 2-123).

 

Рисунок 2-123


Отображаемые Fedora записи ОС

При установке GRUB, установщик Fedora Anaconda определяет в ESP прочие операционные системы. Чтобы предоставить им равные возможности запуска, Fedora добавляет записи Ubuntu и Windows в grub.cfg. Ниже приводится вся последовательность запуска Fedora:

  1. Включается питание этой системы: вначале UEFI, затем POST и далее UEFI.

  2. UEFI осуществляет безусловный переход внутри ESP.

  3. Оно проходит внутри каталога ESP и выбирает имеющиеся ОС для запуска проверяя установленный приоритет запуска. На текущий момент основной приоритет запуска установлен для Fedora. Сверьтесь с Рисунком 2-124.

     

    Рисунок 2-124


    Запись Fedora внутри UEFI

  4. Поскольку основной приоритет запуска установлен для Fedora, UEFI проследует вовнутрь соответствующего каталога boot/efi/EFI/fedora (обратите внимание на Рисунок 2-125) и запустит соответствующий файл grubx64.efi.

     

    Рисунок 2-125


    Каталог UEFI Fedora

  5. grubx64.efi считает свой grubx.cfg и выведет на печать экрана имеющиеся записи ОС. Рисунок 2-126 отображает это.

     

    Рисунок 2-126


    Отображаемые Fedora записи ОС

  6. Как только наш пользователь выбирает Fedora, тот же самый grubx64.efi загрузит vmlinuz и initramfs из /boot (sda4) в оперативную память. Это ядро Fedora возьмёт на себя весь остаток необходимой последовательности запуска. Сверьтесь с Рисунком 2-127 на предмет полной блок- схемы. Те шаги, которые предпринимаются самим ядром более подробно будут обсуждаться в Главе 4.

     

    Рисунок 2-127


    Отображаемые Fedora записи ОС

Оболочка UEFI

UEFI это небольшая операционная система. Как и обычные операционные системы, UEFI предоставляет для запуска своих приложений некую необходимую среду. Естественно, UEFI не будет способна запускать все исполняемые файлы, однако те исполняемые файлы, которые собраны в исполняемом формате EFI будут запросто запускаться. Одним из самых наилучших прикладных приложений UEFI является её оболочка. Как показано на Рисунке 2-128, вы можете обнаружить её главным образом в настройках приоритета запуска UEFI.

 

Рисунок 2-128


Встроенная оболочка UEFI

Если ваша реализация UEFI не предоставляет своей оболочки, тогда вы можете выгрузить необходимое прикладное приложение оболочки с сайта проекта TianoCore со страницы GitHub EDK-II:

https://www.tianocore.org/

https://github.com/tianocore/edk2/blob/UDK2018/ShellBinPkg/UefiShell/X64/Shell.efi

Отформатируйте своё устройство USB под файловую систему FAT32 и поместите там свой выгруженный файл Shell.efi. Снова загрузитесь с тем же самым USB устройством и UEFI предоставит вам в своём окне приоритета запуска оболочку UEFI. Обратите внимание на Рисунок 2-129.

 

Рисунок 2-129


Загружаемая с USB оболочка UEFI

Здесь стоит отметить удивительный момент, состоящий в том, что UEFI не отображает факт, что ваша система обладает неким подключённым устройством. Вместо этого UEFI проходит вовнутрь этого устройства USB и обнаруживает известную ему файловую систему FAT32. Оно видит соответствующий файл Shell.efi и осознаёт, что это не обычное прикладное приложение; вместо этого оно будет представлять свою оболочку соответствующему пользователю. Если бы имелся BIOS, он бы отобразил лишь то, что система обладает подключённым диском USB, но в нашем случае UEFI отображает некую оболочку внутри какого- то подключённого USB диска.

В тот момент когда вы выберете вариант Launch EFI Shell from USB drives (Запуск оболочки с USB устройства), будет выполнен файл Shell.efi и вам будет представлена некая оболочка (Рисунок 2-130) и при этом не представлена некая ОС. Это поразительно.

 

Рисунок 2-130


Оболочка UEFI

Записи blk* являются названиями имеющихся устройств, в то время как fs* это соглашение о присвоении имён файловым системам. Так как эта оболочка UEFI способна считывать файловую систему FAT32 (раздел ESP), мы способны просматривать каталог ESP, как это показано на Рисунке 2-131.

 

Рисунок 2-131


Просмотр каталога UEFI

fs0 это сокращение для файловой системы с номером 0. Это внутренняя команда оболочки, которую мы можем применять для изменения своего раздела. Как вы можете видеть из Рисунка 2-132 и Рисунка 2-133, fs2 это наш ESP.

 

Рисунок 2-132


Просмотр каталога UEFI

 

Рисунок 2-133


Каталог начального загрузчика Ubuntu

Мы можем просто запускать свой файл grubx64.efi из нашей оболочки и на экране появится GRUB. Посмотрите на Рисунок 2-134.

 

Рисунок 2-134


Запуск начального загрузчика Windows из оболочки UEFI

Для оболочки UEFI grubx64.efi это просто прикладное приложение. Аналогичным образом, как это показано на Рисунке 2-135 мы можем запускать также и начальный загрузчик Windows. Обратите также внимание на Рисунок 2-136.

 

Рисунок 2-135


Запуск начального загрузчика Windows из оболочки UEFI

 

Рисунок 2-136


Знаменитая анимация Windows

Наша оболочка может оказаться полезной в разрешении ситуаций "can’t boot". Рассмотрим ситуацию, отображаемую на Рисунке 2-137, при которой наша система выдаёт некую ошибку в строке приглашения GRUB.

 

Рисунок 2-137


Система не способна запускаться

Воспользовавшись некой оболочкой UEFI мы получаем возможность проверки будут ли присутствовать относящиеся к GRUB файлы или нет.

Недоразумения относительно UEFI

Далее приводятся некоторые неверные представления об UEFI.

Недоразумение 1: UEFI это некий новый BIOS или UEFI и есть BIOS

Люди продолжают говорить что UEFI это новый BIOS. Действительно, когда вы заходите вовнутрь встроенного программного обеспечения (ПО) UEFI, это встроенное ПО само по себе сообщает что оно является UEFI BIOS. Подтверждением является Рисунок 2-138.

 

Рисунок 2-138


UEFI это не BIOS

Нет, UEFI это и не BIOS, и не новый BIOS. UEFI здесь для замены BIOS. UEFI это совершенно новое встроенное ПО и вы не можете обладать в одной и той же системе BIOS и UEFI. Вы имеете либо UEFI, либо BIOS.

Достаточно просто выяснить обладаете ли вы BIOS или UEFI. Если вы способны применять мышь как устройство ввода внутри своего встроенного ПО, тогда вы имеете UEFI и когда вы обладаете богатым GUI, тогда у вас присутствует UEFI. Самый правильный способ для проверки состоит в применении подобия команды efibootmgr:


# efibootmgr -v

Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.
		

Когда вы получаете в системе Linux из команды efibootmgr вывод, подобный отображённому, тогда вы обладаете BIOS. В случае когда вы имеете UEFI вы получите нечто подобное следующему:


# efibootmgr -v

BootCurrent: 0005
Timeout: 2 seconds
BootOrder: 0005,0004,0003,0000,0001,0002,0006,0007,000A
Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0)
      PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)/SCSI(0,0)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)
      PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x4,0x0)/Sata(1,0,0)
		

Именно это самый верный способ выявления какое именно встроенное ПО имеет ваша система. Возвращаясь к нашему обсуждению UEFI BIOS, применяющие это производители используют совместно термины UEFI и BIOS потому что большинство пользователей не понимают термин UEFI. Например, некая статья, сообщающая "измените параметры в вашем UEFI" может оказаться обескураживающим для большинства пользователей, однако сказав "измените параметры в вашем BIOS", вы сделаете это хорошо понятным всякому. Таким образом, производители применяют такой термин UEFI/ BIOS ради понимания, однако помните, что в некий момент времени вы обладаете только одним встроенным ПО, а не обоими.

Недоразумение 2: Microsoft это зло

Как мы уже видели, UEFI - это собрание, в котором участвуют поставщики операционных систем, включая Microsoft. Для осуществления более безопасной загрузки Microsoft предложила в UEFI функцию Безопасной загрузки (Secure Boot). Безопасная загрузка остановит выполнение несанкционированных или скомпрометированных исполняемых файлов во время загрузки. Это решает следующие три задачи:

  • Это обеспечивает что готовый к запуску grubx64.efi представляет собой настоящий источник.

  • Он обеспечивает отсутствие негласных входов для BCD в нём.

  • Это предотвращает выполнения кода кому бы то ни было когда он не имеет авторизации.

Вот как работает Безопасная загрузка:

  1. Microsoft будет вырабатывать некую пару ключей (общедоступный и частный ключи).

  2. Microsoft будет цифровым образом подписывать свой начальный загрузчик или его файлы своим частным ключом.

  3. Значение общедоступного ключа Microsoft будет оставаться внутри самого встроенного ПО UEFI.

  4. Значение цифровой подписи, которая была выработана на шаге 2 будет восстановлено значением общедоступного ключа Microsoft внутри самого UEFI.

  5. Когда имеется соответствие цифровой подписи, только тогда UEFI будет дозволено выполнение файлов *.efi.

  6. Ксли нет соответствия цифровой подписи, тогда UEFI будет рассматриваться как вредоносная программа или же, по крайней мере,не выпускаемая из Microsoft, причём UEFI прервёт данное выполнение. {Прим. пер.: подробнее в нашем переводе отдельных глав книги Алекса Матросова,Евгения Родионова и Сергея Братуса Руткиты и буткиты. Противодействие современному вредоносному ПО и угрозам следующего поколения.}

Достаточно клёвая реализация Microsoft, не так ли? Да, несомненно. Однако когда свойство Безопасной загрузки включено, а вы выбираете для загрузки Linux, возникнет ещё одна проблема. UEFI будет получать общедоступный ключ Microsoft и вырабатывать значение цифровой подписи для grubx64.efi. Такая выработанная цифровая подпись, естественно, не будет соответствовать файлам начальной загрузки Microsoft. Иначе говоря, Linux или любая отличная от Windows ОС никогда не будет способна загружаться. Поэтому, в чём состоит решение? Самое простое? UEFI обязан предоставлять некий вариант для отмены того свойства Безопасной загрузки которое он применяет. Обратите внимание на Рисунок 2-139. На самом деле вариант отключения свойства Безопасной загрузки должен быть представлена во встроенном ПО UEFI. Именно это выставляется в требованиях спецификации UEFI.

 

Рисунок 2-139


Отключение функциональности Безопасной загрузки

Однако Microsoft ясно заявила, что сертифицированными будут лишь те системы, у которых включена Безопасная загрузка. Это означает, что если вы поставщик оборудования и желаете чтобы ваша система была сертифицирована для Windows, тогда для неё обязательно должна быть включена Безопасная загрузка. Некоторые лидеры в отрасли сочли этот шаг "злом", поскольку отличные от Windows операционные системы не будут иметь возможности запуска на этом оборудовании. Мы вернёмся к обсуждению является Microsoft злом или нет, но вначале давайте рассмотрим какие возможности имеются у отличных от Windows ОС.

Производители Linux должны выпускать свою собственную пару ключей

Да, всякий производитель ОС Linux обязан делать свою собственную пару ключей и затем подписывать свои начальные загрузчики собственным частным ключрм и оставлять свой общедоступный ключ во встроенном ПО UEFI. Всякий раз, когда пользователь выбирает для загрузки Windows, UEFI будет применять имеющийся общедоступный ключ Windows, а если этот пользователь выбирает для загрузки Linux, UEFI будет применять общедоступный ключ этого Linux для восстановления значения цифровой подписи файлов начального загрузчика своего Linux. Кажется что это будет неким простым решением, но это не сработает. На современном рынке присутствует почти 200 с лишком активных дистрибутивов Linux и они имеют новые версии, выпускаемые каждые шесть месяцев. Это означает, что почти каждые шесть месяцев вы будете иметь более новые версии дистрибутива Linux на устоявшемся рынке. Грубо говоря, это подразумевает, что производители Linux будут иметь почти 400 ключей в год, а потому очевидно, что вы не сможете поместить такое большое число ключей в UEFI. Даже если бы вы и могли, это будет препятствовать одному из основных лозунгов UEFI - быстрой загрузке. Короче говоря, это не может быть решением.

Все производители Linux обязаны выпускать лишь единственную пару ключей

Это также не может быть решением. Имеется 200+ активных дистрибутивов Linux, а их офисы разбросагы по всему миру. Если бы все производители Linux собрались вместе и сделали бы лишь одну пару ключей, тогда эту пару следовало бы отгружать через Интернет имеющимся разработчикам по всему миру. Это стало бы ночным кошмаром безопасности. Поэтому, если кратко, это было бы сложным для сопровождения; следовательно это не является решением.

Отключение свойства безопасной загрузки UEFI

Это выглядит как единственный рабочих подход. UEFI предоставляет некую возможность отключения функциональности Безопасного запуска, а Microsoft не имеет никаких причин для протеста против этой возможности. Например, сажем, у вас имеется система с дуальной загрузкой, в которой установлены Windows 10 и Fedora 31. Когда вы желаете загружать Windows, тогда Безопасная загрузка включается в UEFI, а если в следующий раз вы пожелаете загружать Linux, тогда вам придётся пройти вовнутрь UEFI и изменить такую включённую Безопасную загрузку в сотсояние отключённой. Вы можете рассмотреть такой окольный путь, но он не практичен; следовательно, он не может рассматриваться в качестве некого решения.

Итак, как Linux способен воспользоваться преимуществом Безопасной загрузки? Имеется лишь одно решение и оно состоит в применении частного ключа Microsoft для цифровой подписи соответствующих файлов начальной загрузки Linux и предвкушая это Microsoft согласился на это. Итак, на данном этапе Linux имеет возможность Безопасной загрузки при помощи пары ключей Microsoft, а следовательно Microsoft определённо не выступает злом. Они просто хотели бы сделать свою последовательность загрузки безопасной.

Однако при таком урегулировании имеется одна проблема; разработка GRUB будет зависеть от пары ключей Microsoft. Когда в GRUB фиксируется новое изменение, нам требуется его повторная подпись при помощи ключа Microsoft. Ubunru разрешил эту проблемы введя начальный загрузчик меньшего размера с названием Прокладка (shim). Предполагается, что этот начальный загрузчик подписан ключом Microsoft, а затем задание этого начального загрузчика состоит в вызове реального начального загрузчика, коим и является GRUB. При таком подходе мир Linux разрывает зависимость от подписи Microsoft. Поскольку Прокладка никогда не изменяется (по крайней мере это не должно происходить часто), разработчики GRUB продолжают имеющийся у них способ развития.

Итак, когда Безопасная загрузка включена, тогда необходимая последовательность загрузки Linux такова:

  1. Данная система включается: первым UEFI, далее POST и затем UEFI.

  2. ESP перечисляет имеющиеся операционные системы и доступные загрузочные устройства.

  3. Если пользователь системы выбирает Linux, данный процесс запуска восстанавливает цифровую подпись файла shim.efi при помощи общедоступного ключа Microsoft.

  4. При наличии соответствия цифровой подписи разрешается исполнение shim.efi.

  5. shim.efi вызовет свой оригинальный начальный загрузчик, grubx64.efi.

  6. grubx64.efi считает необходимый файл grub.cfg из ESP и представит весь доступный перечень ОС.

  7. Когда этот пользователь снова выбирает Linux, тогда тот же самый файл grubx64.efi приступит к загрузке необходимых ядра и initramfs в память.

Чтобы увидеть весь список вовлечённых в данную последовательность запуска файлов отсылаем вас к Рисунку 2-140.

 

Рисунок 2-140


Все вовлечённые в описанную нами последовательность запуска файлы

Недоразумение 3: Отключаем UEFI

Одним из самых больших неверных представлений является то, что вы имеете возможность отключить UEFI и запустить BIOS. Нет, вы не способны запрещать имеющееся встроенное ПО своей системы; также вы не можете обладать двумя встроенными ПО в одной системе. У вас есть либо UEFI, либо BIOS. Когда люди произносят "отключаем BIOS", это означает, что они хотели бы сказать пусть UEFI загрузится с BIOS или неким совместимым образом. Одной из самых крупных функциональностей UEFI является её обратная совместимость, что подразумевает что она действительно понимает способ загрузки BIOS, который заключается в подходе 512 байт + 31 кБ. Поэтому, когда вы изменяете настройки со способа UEFI на наследуемый порядок, это всего лишь означает, что UEFI не будет следовать предписываемому ESP способу запуска. Вместо этого, имеющееся встроенное ПО будет следовать способу запуска BIOS, однако это не означает что вы отключаете само встроенное ПО UEFI. Когда вы запускаете свою систему способом BIOS, тогда вы теряете все те функциональные возможности, которые предоставляет UEFI.

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