Загрузочный диск что это

от admin

Что такое загрузочный диск?

Многие люди задаются этим вопросом. А еще эти люди задаются вопросом: «Как сделать загрузочный диск?» Но обо всем по порядку. В этой статье пойдет речь о том, что же такое загрузочный диск.

Ну, наверное, тут нужно начать издалека. Дело в том, что само понятие «загрузочный диск» происходит (ИМХО: Имею Мнение Хочу Озвучить) из архитектуры компьютера, если можно так сказать. Давайте разбираться. Тут нужно понимать работу компьютера. Вы никогда не задумывались, что происходит с компьютером после того как Вы нажали на кнопку питания на системном блоке. Ведь какое-то время после нажатия этой кнопки, Вам остается только ждать, пока компьютер загрузится. То есть, все это время, он живет какой-то своей жизнью, Вам не доступной. А там происходит очень много всего интересного.

Я не буду вдаваться в подробности описания того, что происходит с отдельными частями системного блока во время загрузки компьютера (процессор, память, жесткий диск и т. д.). Я не являюсь профессионалом в этой области. Это чисто мое мнение, как пользователя компьютера, как я это понимаю. Это статья никоим образом не является догмой, раз и навсегда данностью, которая не должна подвергаться критике. Если кому-то покажется, что я где-то не прав, всегда можно поправить меня в комментариях к этой статье. Цель этой статьи заинтересовать пользователя компьютера, человека, задуматься о том, о чем в свое время, задумался я.

Итак, при нажатии на кнопку включения питания на вашем системном блоке, компьютер начинает загружаться. Процессор загружает информацию из BIOS в оперативную память. Что такое BIOS? Это Basic Input Output System – основная система ввода вывода. Другими словами на каждом компьютере, или ноутбуке, есть микросхема (или микросхемы), в которую зашиты команды о том, как нужно действовать компьютеру после включения питания. Почему зашиты? Потому что программа записана в энергонезависимую память компьютера, которая не стирается после выключения питания. Была такая аббревиатура при Советском Союзе, называлась ПЗУ (Постоянное Запоминающее Устройство). Это микросхема, или несколько микросхем, в которые заносилась программа с помощью специальных устройств – программаторов. То есть происходила прошивка этих микросхем.

После того как в микросхему была занесена программа, её впаивали в устройство, в данном случае в материнскую плату компьютера или ноутбука. Программа, «зашитая» в BIOS, «хотела» только одного: начать загрузку операционной системы, после тестирования всего компьютера, конечно. Ведь цель этой программы как раз и заключалась в тестировании компьютера на начальном этапе загрузки, и, если все нормально, передать дальнейшие действия операционной системе. Ну, может не совсем «операционной системе». Наверно, правильней будет сказать, найти загрузочные устройства и продолжить загрузку уже с них…

А вот тут, мы уже вплотную подошли к понятию «загрузочный диск». Наверно многие из вас заходили в BIOS своего компьютера. Это сделать несложно, достаточно при загрузке компьютера нажать клавишу DEL или F2, например. После нажатия Вы попадете в специализированную программу управления Вашим компьютером, ну или, материнской платой Вашего компьютера. Там то и можно выбрать, с какого устройства продолжать загрузку компьютера. Как Вы поняли, их может быть несколько. Это и жесткий диск, компакт-диск, флешка, дискета (это если компьютер очень старый) или сеть, в конце концов.

Устройств много, но их объединяет одно – у всех должен быть загрузочный сектор. Например, представьте такую ситуацию: Вам нужно переставить операционную систему Вашего компьютера. Причин сделать это – море. Пускай это будет то, что Ваша операционка перестала загружаться. Ваша задача найти компакт-диск с дистрибутивом той Windows, которую Вы хотите установить, загрузиться с него и установить Windows. Важно одно: У компакт-диска должен быть загрузочный сектор. Иначе, даже если вы правильно укажете в BIOS порядок загрузки с компакт-диска, компьютер все равно с него загружаться не будет, так как не найдет на нем загрузочный сектор.

Можно найти, а можно самому сделать такой диск. Насчет «найти» все понятно, можно найти образы таких дисков в интернете. Главное помнить, что файл должен быть в формате *.iso. В этом формате сохраняется информация о загрузочном секторе компакт-диска. Ну, и конечно, можно сделать загрузочный диск самому. Как это сделать? — это уже материал для другой статьи.

Итак, загрузочный диск — это такой диск, у которого есть загрузочный сектор. С него можно загрузиться, указав в BIOSe соответствующий порядок загрузки. Загрузочные устройства могут быть разных типов, от дискеты до сети. На этом пока все.

И напоследок. Если вам понравилась эта статья и вы почерпнули из нее что-то новое для себя, то вы всегда можете выразить свою благодарность в денежном выражении. Сумма может быть любой. Это вас ни к чему не обязывает, все добровольно. Если вы всё же решили поддержать мой сайт, то нажмите на кнопку «Поблагодарить», которую вы можете видеть ниже. Вы будете перенаправлены на страницу моего сайта, где можно будет перечислить любую денежную сумму мне на кошелек. В этом случае вас ждет подарок. После успешного перевода денег, вы сможете его скачать.

10 лучших программ для создания загрузочной флешки

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

2. Etcher

  • Цена: бесплатно.
  • Платформы: Windows, macOS, Linux.

Кросс‑платформенное приложение с простым и удобным интерфейсом, которое поможет развернуть установочный образ на карту памяти или USB‑флешку. Всё, что нужно сделать, — это выбрать файл образа, целевой диск и нажать кнопку Flash. После записи Etcher может проверить чтение диска и автоматически отмонтировать его.

3. Windows USB/DVD Download Tool

  • Цена: бесплатно.
  • Платформа: Windows.

Фирменная утилита Microsoft, которая изначально была предназначена для записи образов Windows 7. Тем не менее она также поддерживает более новые версии этой операционной системы и по‑прежнему актуальна. Благодаря аскетичному интерфейсу допустить какую‑нибудь ошибку в процессе работы просто нереально.

4. WinToUSB

  • Цена: бесплатно / 29,95 доллара.
  • Платформа: Windows.

В отличие от предыдущих, эта программа предназначена для создания дисков, с которых ОС будет загружаться и работать без установки. Источниками могут выступать образы в различных форматах, DVD‑диски или инсталлированная на компьютере Windows.

5. Win32 Disk Imager

  • Цена: бесплатно.
  • Платформа: Windows.

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

6. Universal USB Installer

  • Цена: бесплатно.
  • Платформа: Windows.

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

7. WinSetupFromUSB

  • Цена: бесплатно.
  • Платформа: Windows.

Мощное приложение, с которым всего за несколько минут можно записать установочный диск Windows или Linux. WinSetupFromUSB поддерживает BIOS и UEFI, а также образы различных форматов и имеет множество полезных инструментов для работы с дисками.

8. UNetbootin

  • Цена: бесплатно.
  • Платформы: Windows, macOS, Linux.

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

9. DiskMaker X

  • Цена: бесплатно.
  • Платформа: macOS.

Простое приложение для создания установочных флешек macOS. DiskMaker X не имеет интерфейса: выбор образа и целевого диска осуществляется через диалоговые окна, а об окончании процесса вы узнаете из системного уведомления.

10. Install Disk Creator

  • Цена: бесплатно.
  • Платформа: macOS.

Очень простая утилита для записи загрузочных флешек с macOS, с которой справится даже самый неопытный пользователь. Install Disk Creator автоматически распознаёт скачанный установщик из папки «Программы», и всё, что остаётся сделать, — это выбрать флешку, на которую его нужно развернуть.

Раскрываем секреты загрузочных ISO-образов

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

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

Также у меня была статья на Хабре, где я затрагивал тему загрузочных ISO, но не вдавался в подробности реализации.

Что вы найдёте в этой статье

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

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

После прочтения этой статьи вы сможете создать универсальный загрузочный образ ISO, который можно будет записать на оптический диск, внешний жёсткий диск или флеш-накопитель так, что при загрузке с него будут выполняться минимальные программы Hello, World, никак не зависимые от операционной системы. Эти программы можно считать заглушками для реальных загрузчиков операционных систем. Пример из статьи позволит вам разобраться со структурой загрузочных ISO-образов и улучшит ваше понимание процесса загрузки компьютера (bootstrapping).

Немного теории, которую необходимо знать

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

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

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

Существует два вида программ, располагающихся в ROM — BIOS (Basic Input/Output system) и UEFI (Extensible Firmware Interface). Обычно компьютеры с UEFI позволяют эмулировать BIOS, если выбрать опцию Legacy Mode.

Механизм загрузки BIOS (Legacy)

BIOS не имеет никакого представления о файловых системах, установленных на устройствах, с которых осуществляется загрузка. Он рассматривает устройства как блочные, которые могут возвращать блоки данных (сектора), располагающиеся по определённым LBA (Logical Block Address). Ранее дисковые устройства ещё имели режим адресации CHS (Cylinder, Head, Sector), который был более близок к физической геометрии жёстких дисков, но сейчас он практически не используется.

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

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

Когда BIOS передаёт управление, то процессор x86 находится в реальном режиме, а это значит, что в программе можно обратиться только к 1МiB оперативной памяти и, если вы хотите использовать всю оперативную память, то необходимо позаботиться о том, чтобы перевести процессор в защищённый режим. Такие загрузчики, как GRUB 2, как раз это и делают.

Механизм загрузки UEFI

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

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

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

Загрузка с жёсткого диска или флеш-накопителя

Загрузка с жёсткого диска или флеш-накопителя в большинстве случаев подразумевает, что они размечены на разделы, а на одном или нескольких разделах находятся загрузчики и операционные системы, которые необходимо загрузить. Мне известно о двух видах разметки: MBR (Master Boot Record) и GPT (GUID Partition Table).

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

GPT – современный способ разметки, подразумевающий разметку диска на большое количество разделов и поддержку дисков размером более 2TiB.

На просторах Интернета существует очень распространённое заблуждение, которое заключается в том, что на компьютерах с BIOS используется ТОЛЬКО MBR-разметка, а с UEFI TOЛЬКО GPT-разметка. Это неверно.

BIOS не имеет понятия как о GPT, так и о MBR, он только знает о том, что нужно загрузить и выполнить программу, находящуюся в нулевом секторе, если этот диск является загрузочным и последние два байта в секторе равны 55AAh. Но если в результате будет передано управление загрузчику, который «понимает» GPT, то последний сможет загрузить операционную систему с раздела GPT. Разумеется, сама операционная система должна поддерживать GPT-разметку. Но даже если она не поддерживает GPT, в нулевом секторе можно разместить таблицу разделов MBR, которая будет указывать на подмножество разделов GPT (максимум 4 шт., которые находятся в пределах первых 2ТiB размеченного диска), и они будут видны этой операционной системе.

Чтобы компьютер загрузил ОС средствами UEFI, необходимо наличие системного раздела EFI на диске (EFI System Partition (ESP)), с которого осуществляется загрузка. Неважно, какая разметка используется (MBR или GPT), важно наличие самого раздела, а также наличие приложения UEFI с прописанным именем в системных переменных UEFI или имеющего стандартное имя bootx64.efi и располагающегося в директории EFI\boot в разделе ESP.

Таким образом, различие BIOS и UEFI-загрузки заключается в том, как загрузится и выполнится самая первая программа (приложение) после них. В BIOS загружается и выполняется программа, которая находится в нулевом секторе диска, в UEFI выполняется программа, которая находится на системном UEFI разделе диска.

Файловая система оптических дисков

Для хранения файлов на оптических дисках очень часто используется файловая система ISO 9660. Она имеет несколько уровней (Level 1, Level 2, Level 3) и расширений (Rock Ridge, Joliet). Также часто используется файловая система UDF, но для нашей задачи эти знания не понадобятся, так как фактически мы будем работать с секторами диска. В статье я не буду подробно рассматривать файловые системы для оптических дисков. Загрузчик, который будет загружен BIOS или UEFI для выполнения дальнейшей загрузки, должен «понимать» файловую систему оптических дисков, а я для краткости это не рассматриваю.

Загрузка с оптического диска

Для того, чтобы компьютер смог загружаться с оптического диска, BIOS или UEFI должны поддерживать стандарт El Torito, придуманный специально для этого. И тут, как и при загрузке с жёсткого диска, для BIOS важен сектор, в котором находится программа начальной загрузки, а для UEFI важен системный UEFI-раздел на диске c программой UEFI.

Скажу честно, я до последнего думал, что UEFI запускает файл bootx64.efi, который находится в файловой системе ISO 9660 на оптическом диске, однако это не так, так как UEFI понимает загрузку только с ESP, поэтому ему нужно предоставить образ ESP с файлом bootx64.efi, а в специальной структуре Booting Catalog указать расположение образа.

Гибридный ISO-образ

В настоящее время большинство дистрибутивов Linux распространяются в виде так называемых гибридных ISO-образов.

Суть гибридных ISO-образов в следующем: один и тот же образ можно посекторно записать на оптический диск или на флеш-накопитель/внешний жёсткий диск. Загрузка будет выполнена с любого из устройств, если его выбрать в качестве загрузочного. Это очень удобно для конечного пользователя. Он просто берёт образ и записывает его на оптический диск или флеш-накопитель, не выполняя никаких преобразований.

Как же это происходит? Дело в том, что первые 16 секторов в файловой системе ISO 9660, каждый из которых размером 2048 байт, используются для системных нужд, поэтому там можно разместить MBR и/или GPT. Они игнорируются BIOS/UEFI при загрузке с оптического диска, но при загрузке с флеш-накопителя они используются.

Запись о разделе в MBR или GPT будет указывать на файл с образом ESP, а в случае MBR для BIOS будет содержаться код начальной загрузки, который уже будет каким-то образом читать код из секторов и выполнять его, продолжая тем самым дальнейшую загрузку.

При всём своём удобстве этот подход не стандартизован и, например, Windows или какие-то программы по разметке диска могут считать такую информацию в MBR или GPT неверной.

Структура загрузочного ISO-образа

Любой ISO-образ должен содержать список дескрипторов томов. Каждый дескриптор занимает целый сектор (2048) байта. Дескрипторы томов размещаются начиная с 16-го сектора, если нумерация секторов осуществляется с 0.

Дескриптор тома с загрузочными записями El Torito располагается в 17-м секторе.
Структура загрузочного ISO-образа для современных компьютеров х86 представлена на рисунке.

Для загрузки с оптического диска нас интересует Boot Record Volume Descriptor. С описанием Primary Volume Descriptor и Volume Descriptor Set Terminator вы можете ознакомиться в спецификации файловой системы ISO 9660 (ECMA-119)

▍ Boot Record Volume Descriptor
Байты Описание
0 Индикатор загрузочной записи, всегда содержит значение 0x00
1… 5 Идентификатор ISO-9660, всегда содержит строку CD001
6 Версия дескриптора, содержит 0x01
7… 38 Идентификатор загрузочной системы, всегда содержит строку EL TORITO SPECIFICATION, оставшиеся байты заполняются 0
39… 70 Не используется. Всегда заполнено 0
71… 74 LBA первого сектора загрузочного каталога
75… 2047 Не используется, всегда заполнено 0
▍ Booting Catalog

Booting Catalog – это массив записей размером 32 байта каждая. Количество записей не ограничено. Всего в спецификации определены 5 типов записей: Validation Entry, Default Entry, Section Header, Section Entry, Section Entry Extension. Последнюю описывать не буду, так как я не встречал её применение.

Validation Entry

Назначение Validation Entry — это подтверждение того, что образ ISO (оптический диск) действительно является загрузочным.

Байты Описание
0 Header Id всегда равен 0x01
1 ID платформы
0x00 = 80×86
0x01 = Power PC
0x02 = Mac
2..3 Зарезервировано, всегда содержит 0
4..27 ID, идентификатор производителя CD-ROM, сейчас обычно содержит 0
28..29 Контрольная сумма
30 Всегда 0x55, участвует в подсчёте контрольной суммы
31 Всегда 0xAA, участвует в подсчёте контрольной суммы

Default Entry

Назначение Default Entry — указать, что будет загружено по умолчанию. Обычно это сектора для загрузки при помощи BIOS.

Байты Описание
0 Boot Indicator (0x88 — загрузочная, 0x00 — не загрузочная)
1 Boot media type
0x00 — без эмуляции
0x01 — эмуляция дискеты 1.2
0x02 — эмуляция дискеты 1.44
0x03 — эмуляция дискеты 2.88
0x04 — эмуляция жёсткого диска
В настоящее время чаще всего используется режим 0x00. Эмуляция дискет и жёстких дисков нужна для загрузки очень старых операционных систем.
2 Сегмент загрузки обычно 0x00, что подразумевает, что сектор с кодом загрузчика будет помещён в сегмент 0x07C0, как и в загрузке с жёсткого диска или дискеты
4 Тип системы для режима без эмуляции – 0x00
5 Не используется
6..7 Количество секторов размером 512 байт (не 2048), которые нужно считать в сегмент загрузки
8..11 LBA-адрес первого сектора, который нужно загрузить в сегмент загрузки
12..31 Не используются, всегда содержат 0

Section Header

Назначение Section Header — сгруппировать возможные виды загрузки, однако обычно на практике существует ещё только один вид загрузки через UEFI.

Байты Описание
0 Header Indicator (0x90 – не последний заголовок, 0x91 – последний заголовок). В большинстве случаев, так как обычно в ISO-образе только одна секция, поле содержит 0x91.
1 Идентификатор платформы.
0x00 — 80×86
0x01 — Power PC
0x02 — Mac
0xEF — EFI (UEFI)
Значение 0xEF отсутствует в оригинальной спецификации, но сейчас оно используется, если мы хотим выполнить загрузку средствами UEFI.
2..3 Количество Section Entry после заголовка.
4..31 Идентификатор для BIOS и загрузчика, чтобы он принял решение, использовать ли информацию из следующих секций для загрузки. В большинстве случаев тут содержатся 0.

Section Entry

Назначение Section Entry — указать, что может быть загружено и откуда. Обычно это сектора образа ESP для загрузки при помощи UEFI.

Байты Описание
0 Booting Indicator (0x88 — загрузочная, 0x00 — не загрузочная)
1 Режим эмуляции (Boot media type)
0x00 — без эмуляции
0x01 — эмуляция дискеты 1.2
0x02 — эмуляция дискеты 1.44
0x03 — эмуляция дискеты 2.88
0x04 — эмуляция жёсткого диска
В настоящее время чаще всего используется режим 0x00. Эмуляция дискет и жёстких дисков нужна для загрузки очень старых операционных систем. В оригинальной спецификации вы можете посмотреть, какие ещё значения может содержать этот байт.
2..3 Сегмент загрузки обычно 0x00, что подразумевает, что сектор с кодом загрузчика будет помещён в сегмент 0x07C0, как и в загрузке с жёсткого диска или дискеты
4 Тип системы для режима без эмуляции – 0x00
5 Не используется, всегда равен 0x00
6..7 Количество секторов размером 512 байт (не 2048), которые нужно считать в сегмент загрузки
8..11 LBA-адрес первого сектора, который нужно загрузить в сегмент загрузки
12 Selection Criteria Type. Критерий выбора. Обычно 0. Подробнее смотрите в спецификации El Torito
13..31 Vendor Unique Selection Criteria. Обычно 0x00. Подробнее в спецификации El Torito

Практическая часть

Создание образа

Изначально я хотел описать в статье, как создать образ с нуля без использования сторонних программ, но потом мне показалось, что это раздует статью, её будет сложно читать, и вы потратите много времени на изучение. Поэтому использовал уже готовые решения, которые используются в Linux: Xorriso для создания образов, а для того, чтобы увидеть наглядно структуры загрузочного ISO, xxd для просмотра содержимого образа в шестандцатиричном формате

Вы всегда можете попробовать создать загрузочный ISO-файл сами, написав небольшие программы на C, Java или другом языке программирования, но в статье я на этом останавливаться не буду.

Минимальные программы-заглушки загрузчиков для BIOS и UEFI

Загрузчик для BIOS — это один или несколько секторов на диске, содержащих инструкции, которые используют сервисы (программные прерывания) BIOS и осуществляют дальнейшую инициализацию компьютера, загружают и запускают на выполнение ядро операционной системы.

Загрузчик для UEFI — это исполняемый файл, располагающийся в ESP-разделе и содержащий инструкции, которые используют сервисы UEFI, чтобы осуществлять дальнейшую инициализацию компьютера, загружать и запускать на выполнение ядро операционной системы.

Для упрощения понимания наши загрузчики не будут ничего делать кроме вывода тривиальных фраз типа «Hello, world!» на экран. Можно сказать, что это заглушки, которые могут быть использованы для написания полноценных загрузчиков в дальнейшем.

Читать:
Функция линейн в excel как пользоваться

Код программы-заглушки загрузчика BIOS

Загрузчик для BIOS – это один или несколько секторов на диске. Инструкции, содержащиеся в них, процессор выполняет в реальном режиме, где доступно только 1MiB оперативной памяти.
Обычно исходный код загрузчика при помощи ассемблера превращается в бинарный файл, содержимое которого потом посекторно записывается на диск.

Для меня проще всего получить такой код, используя ассемблер fasm.

Код у нас получается достаточно простой, но существуют моменты, на которые необходимо обратить внимание.

  1. Так как процессор будет выполнять код в реальном режиме, нам нужно использовать директиву use16.
  2. Наш код будет загружаться в BIOS по адресу 0x7c00. Чтобы ассемблер закрепил корректные адреса за метками, используется директива org.
  3. Чтобы аппаратные прерывания не помешали начальной инициализации регистров, используется команда процессора cli.
  4. Очень важно проинициализировать регистры. Во многих статьях по созданию загрузочных секторов забывают этот факт. В результате вроде всё гладко работает в qemu или VirtualBox, однако в VMWare или на реальном железе код отказывается работать. Я потратил достаточно много времени, пока это не понял.
  5. Так как часть полученного кода будет модифицироваться Xorriso, который записывает нужные данные, то нам необходимо выполнить команду jmp, а дальше в коде зарезервировать место под эти данные.
  6. Я не создавал свою MBR для ISO-образа, а использовал ту, которую предоставляет загрузчик ISOLINUX, поэтому необходимо прописать значение signature, ожидаемое загрузчиком из MBR, иначе наша заглушка загрузчика для BIOS не будет выполнена.
  7. Значение 55AA и заполнение нулями в конце программы необязательно, но я хотел получить полноценный загрузочный сектор, который можно было бы записать в нулевой сектор жёсткого диска или флеш-накопителя, и он тоже бы выполнялся.

Код программы-заглушки загрузчика UEFI

Загрузчик для UEFI – это уже исполняемый файл, который помимо программного кода и данных содержит дополнительную информацию о том, как размещать их в оперативной памяти. Файлы .efi по формату практически совпадают с исполняемыми файлами Windows. Разумеется, в них нет вызовов функций операционной системы. Обычно исходный код пишется на языке C или С++. Мы для простоты будем использовать C.

При сборке в операционной системе Linux нам понадобится кросс-компилятор.

Необходимости комментировать что-то в программе нет ввиду её простоты, однако я добавлю, что для компиляции программы у вас должен быть установлен пакет gnu-efi, а вечный цикл (while (1)) я сделал для наглядности, чтобы сообщение не исчезало при завершении работы программы, и EFI_SUCCESS она никогда не вернёт.

Алгоритм создания загрузочного диска вручную

Я собирал образ загрузочного диска на Ubuntu 22.10.

Для начала необходимо поставить следующие пакеты, если они не установлены.

Пакет Назначение
make Утилита make
gcc-mingw-w64 Компилятор C
fasm Ассемблер
gnu-efi Библиотека для создания UEFI-приложений
binutils Утилиты для работы с объектными файлами
mtools Утилиты для работы с образом раздела FAT
dosfstools Утилиты для форматирования
xorriso Утилита для создания ISO-образов
isolinux Загрузчик, который позволяет загружаться с оптических дисков. Нам от него нужен только MBR для гибридного ISO
xxd Утилита для просмотра бинарных файлов. В частности, она нам понадобится для просмотра структуры созданного ISO-образа
qemu-system-x86 Эмулятор, который позволяет эмулировать компьютеры с BIOS и UEFI
ovmf Образ прошивки UEFI для эмулятора

1. Создаём необходимые директории.

2. Создаём файлы bioshello.asm и efihello.c с исходным кодом наших программ-заглушек загрузчиков.

3. Компилируем заглушку для загрузчика BIOS.

4. Компилируем заглушку для загрузчика UEFI.

5. Создаём образ ESP, создаём в нём директории, копируем в него файл bootx64.efi.

6. Создаём структуру из файлов и директорий, которые будут размещены в образе ISO.

7. Создаём гибридный загрузочный образ ISO.

8. Экспериментируем и проверяем работу образа в различных эмуляторах, например qemu, виртуальных машинах (VMWare, Virtual Box), записываем образ на оптический диск и флеш-накопитель (при помощи программ Win32DiskImager, balenaEtcher).

Например, чтобы запустить в qemu-эмуляторе загрузочный ISO с использованием BIOS, если бы он был записан на оптический диск:

Чтобы запустить в qemu-эмуляторе загрузочный ISO с использованием UEFI, если бы он был записан на флеш-накопитель:

Чтобы выйти из эмулятора, нужно нажать клавиши Ctrt + A, а потом X.

Я думаю, о том, как запустить эмуляцию запуска загрузочного диска с использованием BIOS с флеш-накопителя и с использованием UEFI с оптического диска вы догадаетесь сами.

Ещё один способ создания загрузочного флеш-накопителя в Windows

Внимательный читатель мог заметить, что зачем-то в ISO-образ помимо образа ESP помещается и файл bootx64.efi. Напрашивается вопрос, зачем это делается, если UEFI нужен именно образ ESP в ISO-образе? Ответ заключается в том, что, разместив файл в образе ISO, можно создать загрузочный флеш-накопитель путём простого копирования всех файлов из ISO-образа.

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

  1. Запускаем программу diskpart.
  2. Выводим на экран список доступных дисков командой list disk.
  3. Выбираем среди них флеш-накопитель, который мы будем размечать и форматировать командой select disk.
  4. Выполняем очистку выбранного диска командой clean.
  5. Создаём первичный раздел командой create partition primary.
  6. Форматируем раздел командой format fs=fat32 quick.
  7. Выходим из diskpart командой exit.
  8. Копируем файлы из ISO-образа на флеш-накопитель простым копированием файлов

В нашем случае нам достаточно скопировать только директорию EFI, так как остальные файлы использоваться не будут, но для простоты скопируйте все файлы из ISO-образа.

Изучение структуры созданного загрузочного ISO-образа

Созданный образ у нас находится в директории out и имеет имя bootdisk.iso.

1. Выведем номер сектора, где располагается Booting Catalog:

Здесь 4 — это количество байт, которые выводим, 17 — номер сектора с Boot Record Volume Descriptor, 2048 — размер сектора, 71 — смещение внутри сектора, где располагается LBA Booting Catalog.

Номер сектора занимает 4 байта, поэтому нужно знать, какой порядок байтов используется Big Endian или Little Endian. Я не нашёл в спецификации El Torito, какой порядок используется, но, судя по всему, это Little Endian, поэтому байты нужно читать справа налево, получая 0x00000021.

2. Выведем первые четыре записи Booting Catalog:

Здесь 32 — это размер записи в Booting Catalog, 4 — количество записей, $(expr $(echo $((0x21))) — десятичное представление 0x21, 2048 — размер сектора.

3. Выведем LBA-адрес сектора, который будет загружен при загрузке средствами BIOS:

Здесь 4 — количество байт, которые выводим, 32 — размер записи в Booting Catalog (мы берём данные из Default Entry, поэтому пропускаем 32 байта), 8 — смещение внутри Default Entry, где располагается LBA загрузчика для BIOS, 2048 — размер сектора.

4. Выведем первые 512 байт этого сектора (это наша программа, которую мы написали на ассемблере и откомпилировали).

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

6. Выведем первые 512 байт образа ESP.

LBA адресов теоретически могут быть у вас быть другие. Я привёл те, которые были у меня.

Вы можете получить LBA адресов, по которым располагается откомпилированная программа на ассемблере, используя структуры MBR и GPT, находящиеся в первых секторах, изучив документацию по MBR и GPT. Здесь я приводить не буду, оставляю на самостоятельное изучение. Скажу только, что они будут отличаться, так как используются в этом случае сектора по 512 байт, а не по 2048.

Создание среды для сборки

Для создания воспроизводимого окружения для сборки очень удобно использовать Docker. Он позволяет создавать изолированные окружения с необходимыми зависимостями. Мы тоже будем использовать его, ниже я привожу Dockerfile.

Вы можете собрать образ Docker со всеми необходимыми для сборки зависимостями, используя команду.

Для запуска контейнера в интерактивном режиме в PowerShell в директории, где у вас содержатся файлы bioshello.asm и efihello.c нужно ввести команду.

Автоматизация сборки ISO-образа

Для автоматизации сборки из исходников существует множество различных утилит, но для простоты мы будем использовать make.

Основное отличие утилиты make от обычных shell-скриптов заключается в том, что она:

  • отслеживает зависимости в исходных файлах;
  • пересобирает только при наличии изменений.

Данный Makefile позволяет собрать ISO-образ (make clean all), а также запустить его в эмуляторе с BIOS, UEFI, с флеш-накопителя и cdrom, что понятно из названий.

Полезные ссылки

    . . . . — программа для форматирования (форматирует USB-накопители тоже). Иногда помогает, когда программы записи образов отказываются записывать образ. — программа для записи образов на флеш-накопитель. — программа для записи образов на флеш-накопитель. Иногда записывает, когда и balenaEtcher отказывается. — сайт с информацией по разработке ОС, где среди прочего есть информация по загрузке ОС. — сайт с исчерпывающей информацией по операционным системам, но лучше искать информацию на нём с помощью Google.

Заключение

В статье создан минимальный гибридный ISO-образ, который позволяет понять основы загрузки на компьютерах (BIOS и UEFI c жёсткого диска, флеш-накопителя, оптического диска). Многие вопросы не были рассмотрены с целью упрощения, так как статья имеет познавательный, а не энциклопедический характер и не рассчитана на тех, кто имеет значительный опыт по этой теме.

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

Я не рассматривал загрузочные образы операционной системы Windows и реализацию загрузки с оптических дисков в Windows, но, получив знания из статьи, вам будет гораздо проще понять, так как там тоже используется El Torito.

Надеюсь, я раскрыл тему создания загрузочных ISO-образов хотя бы на базовом уровне и не сильно утомил детализацией, а вы не будете так пугаться темы загрузочных образов, как пугался я. Вы гораздо лучше будете понимать, почему у вас не грузится операционная система с ISO-образа дистрибутива, и что вы сделали не так.

Загрузочный диск

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

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

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

Как сделать загрузочный диск

  • обновлена программа SARDU до версии 3.2.3 с добавлением русификатора;
  • обновлена инструкция по распаковке и русификации.

Как сделать загрузочный диск

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

Мультизагрузочный диск– Какая разница между шаманом и сисадмином?
– У сисадмина бубен с дыркой 🙂

Как Вы уже догадались, речь сегодня пойдет о «шаманских» «волшебных» дисках, которые во множестве «водятся» в холдерах у различного рода компьютерных мастеров. И это не только диски с программами. Некоторые из них позволяют запустить даже на неработающем компьютере практически полноценную операционную систему! Такие диски носят название загрузочных.

Загрузка Windows

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

В современных компьютерах за загрузку могут отвечать две подсистемы: BIOS и/или UEFI (в новых ПК). В упрощенном виде процесс запуска компьютера выглядит так:

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

По умолчанию загрузка производится с жесткого диска после того, как BIOS протестирует работоспособность основных компонентов компьютера. Чтобы получить возможность загружать ПК с дисков или флешек, нужно немного перенастроить BIOS на загрузку с внешнего носителя. Для этого следует установить значение параметра First Boot Device – CD-ROM (или USB). Если Вы не знаете как это сделать, можете прочесть об этом здесь.

Загрузка с CD-ROM в BIOS

После того, как Вы проделаете данную настройку, в цикл загрузки после проверки места, где следует искать загрузочные файлы, добавится еще проверка наличия диска в дисководе (или флешки в USB-гнезде) и поиск загрузчика на нем. У многих, кстати, опция загрузки с дисковода стоит по умолчанию (сборщики ПК просто не стали ничего менять обратно), поэтому, возможно, никакие манипуляции с БИОСом и не потребуются 🙂

Виды загрузочных дисков

Все загрузочные диски по сфере их применения можно грубо разделить на 3 категории:

Типы загрузочных дисков

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

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

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

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

Записываем готовый образ

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

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

Скачать с торрента готовый ISO-образ, думаю сегодня ни для кого проблемы не составит, поэтому рассмотрим случай с копированием реального диска. Для этого дела нам подойдет практически любая программа записи CD и DVD. Здесь рассмотрим алгоритм действий на примере программы CDBurnerXP.

Главный экран CDBurnerXP

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

Для этого вставляем диск в дисковод и жмем на основном экране CDBurnerXP кнопку «Копировать диск». В открывшемся окошке Вы сможете выбрать дисковод, в который Вы вставили диск, скорость (если Вы не спешите, то лучше поставить около 8-x) и метод копирования:

Копирование диска в CDBurnerXP

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

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

Создание образа диска

Первым делом в разделе «Приемник» нам нужно переключиться в режим «Жесткий диск». Затем останется только указать путь для создаваемого образа и выбрать его формат. В CDBurnerXP доступны форматы ISO и MDF/MDS. Рекомендую сохранять в ISO, поскольку это наиболее распространенный и поддерживаемых большинством программ вариант хранения образов. Теперь жмем кнопку «Копировать диск» и дождаемся окончания создания нашего ISO-образа.

Как я уже сказал, образ можно будет потом записать на реальный диск без потери его загрузочных свойств (это же касается образов, скачанных из Интернета). В CDBurnerXP в главном окне для этого имеется отдельный специальный раздел – «Записать ISO-образ»:

Запись образа на диск

В открывшемся окне нам нужно указать путь к нашему образу в формате ISO или MDS. Если образ Вы качали из Интернета и он имеет формат BIN или NRG, то в CDBurnerXP имеется инструмент для конвертирования таких образов в ISO. Нажмите кнопку «Конвертировать в ISO» и там укажите путь к нужному образу.

После того, как образ выбран остается только поставить галочку «Завершить диск» (некоторые компьютеры могут не захотеть загружаться с диска не прошедшего финализацию) и нажать кнопку «Записать диск». Ожидаем окончания записи и становимся обладателями собственного загрузочного диска 🙂

Что такое мультизагрузка

Следуя классификации, которую мы рассматривали выше, загрузочный диск может быть предназначен для решения одной определенной задачи, будь то установка системы, ремонт или ее обслуживание. Раньше так и было. Для каждой цели нужно было создавать отдельный диск. Однако, сегодня существует такое понятие как «мультизагрузка».

Суть ее в том, что, используя нестандартный загрузчик (для Windows стандартным является NTLDR), мы можем запускать с одного диска, например, несколько операционных систем или делать его установочным и ремонтным, записывая на него несколько образов одновременно!

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

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

На страницах нашего сайта я уже однажды писал о программе, позволяющей создавать загрузочные диски и флешки – xBoot. Здесь мы рассмотрим еще один способ, который, возможно, будет даже лучше и удобнее для Вас, с использованием программы SARDU (сокр. от Shardana Antivirus Rescue Disk Utility):

Как создать мультизагрузочный диск

На нашем сайте Вы можете скачать русифицированную версию программы 3.2.3, которая является более новой и понятной русскоязычному пользователю (спасибо за перевод нашему постоянному читателю Валерию!). ВАЖНО: распаковывать программу обязательно в папку, в пути к которой нет русских букв. Лучше всего в корень Диска С или Диска D.

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

  1. Верхняя панель меню и кнопки. Вверху расположены, как обычно панель меню и панель инструментов. В меню можно найти практически все функции программы, но почти все, что нужно вынесено на верхнюю и боковые панели инструментов, поэтому туда нам можно и не заглядывать. На панели же инструментов находятся кнопки открытия папки с образами, начала загрузки выбранных образов, прожига диска и тестирования готового диска или флешки.
  2. Левая панель инструментов. Здесь у нас собраны большие кнопки, позволяющие качать и добавлять типичные образы дисков с антивирусами, системными утилитами, Линукс-дистрибутивами и даже Windows. Кроме того имеется возможность добавлять любые образы, которые не перечислены в предыдущих списках при помощи кнопки «Extra».
  3. Правая панель инструментов. На этой панели находятся инструменты выбора флешки для записи на нее автозагрузочного образа, кнопки создания образа или USB-диска, кнопка перехода на сайт разработчика и кнопка выхода из программы.
  4. Центральная область. Это основная рабочая зона, содержание которой меняется в зависимости от активированного инструмента.

Для того, чтобы создать свою мультизагрузочную сборку желательно все нужные нам ISO-образы загрузочных дисков поместить в папку ISO. Если Вы решили качать образы прямо из Интернета по предложенным ссылкам, то они автоматически попадут в эту папку. Все же Ваши образы нужно будет скопировать вручную. Есть и еще один нюанс. В пути к программе и образам не должно быть русских букв. Поэтому распаковывать SARDU желательно сразу в корень диска.

Увы, не все ссылки в разделах «Antivirus», «Utility», «Linux» и «Windows» работают, поэтому большинство образов придется добавлять вручную через кнопку «Extra»:

Добавление образов в сборку

Здесь жмем кнопку «Add» и заполняем предложенные поля. Из обязательных стоит отметить поля:

  1. Name. Сюда вводим название системы, в том виде, в котором мы хотим его видеть в списке и в загрузочном меню.
  2. Галочка Derivate. Если мы знаем, на базе какой системы построен добавляемый образ, мы можем активировать галочку и в выпадающем списке выбрать нужную. Это избавит нас от необходимости выбирать загрузчик.
  3. Выпадающий список Mode. Здесь мы выбираем загрузчик. Советую использовать универсальный GRUB, который стоит по умолчанию.
  4. ISO Name. Сюда можно прописать либо полный путь к образу (если он лежит не в папке ISO, что нежелательно), либо просто имя нашего образа.

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

Создание сборки

Теперь остается только отметить галочками нужные и подтвержденные программой (красная кнопка заменяется на голубую) образы и нажать одну из кнопок на правой панели: «Create SARDU USB» (для создания загрузочной флешки) или «Create SARDU ISO» (чтобы создать образ диска). По завершению работы мы можем сразу же протестировать работоспособность нового мультизагрузочного диска при помощи встоенного эмулятора QUEmu, нажав кнопку «Test ISO» (или USB) на верхней панели инструментов:

Тестирование сборки

Если все прошло успешно, Вы сможете запустить свой новосозданный образ и найти добавленные в него системы в разделе Extras.

Выводы

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

Создавать мультизагрузочные сборки не такое уж и сложное занятие, но оно приносит ощутимую пользу в тех случаях, когда мы сталкиваемся с необходимостью что-то переустановить или починить в ОС компьютера. Что касается меня, то я для себя уже довольно давно создал идеальную флешку, на которой есть и Линукс, и небольшая Windows, которую можно запустить или установить на ПК, а также набор самых нужных программ.

Желаю и Вам заиметь в своем арсенале подобные флешки и диски. А еще больше желаю поменьше всяких поломок Вашему компьютеру!

Похожие статьи