Загрузочный файл BCD с нуля с помощью Bcdedit
При запуске Bootmgr необходимы рабочие инструкции, получаемые из двоичного файла, называемого файлом данных конфигурации загрузки (BCD). Обычно этот файл находится в папке\boot активного раздела. Для настройки файла BCD используется команда Bcdedit. Давайте посмотрим, как с ее помощью построить загрузочный файл BCD с нуля
Рабочий файл BCD обычно включает как минимум два объекта. Во-первых, это диспетчер загрузки, содержащий всю загрузочную информацию, в частности указание на то, какой элемент списка загрузки операционных систем следует использовать по умолчанию, и время ожидания выбора пользователя, если существует несколько элементов списка загрузки операционных систем. Во-вторых, файл содержит хотя бы один элемент загрузки операционных систем. Порядок создания этих объектов описан ниже.
Начнем с удаления всех существующих файлов BCD и создания нового пустого файла. По странному свойству Bcdedit, сперва надлежит создать новый файл BCD в каком-либо месте, а затем «импортировать» его, то есть скопировать все его содержимое в «официальный» файл BCD в папке \boot активного тома. Это можно сделать с помощью двух команд, вводимых в окне командной строки с повышенными привилегиями:
Эти команды работают независимо от того, существует папка \boot\bcd в нужном месте либо в загрузочном томе вообще нет файлов BCD. После выполнения описанных выше действий вновь созданный файл BCD больше не нужен, и его можно удалить.
Теперь создадим диспетчер загрузки для файла BCD с помощью следующей команды:
Отметим параметр/create в этом варианте команды вместо применявшегося ранее /create store. Этот параметр позволяет создавать различные виды объектов BCD. С использованием данного параметра в комбинации с идентификатором
Диспетчер загрузки не требует сложной настройки. Необходимо лишь указать загрузочный том и время ожидания выбора пользователем элемента списка загрузки операционных систем:
Перейдем к созданию элемента списка загрузки операционных систем, который укажет диспетчеру загрузки выполнить загрузку Windows из файлов в папке \Windows одного из томов системы. Обычно таким томом является диск C, однако в случае загрузки из среды предустановки Windows (WinPE) необходимо проверить, на каком диске находится папка \Windows, поскольку в WinPE он может называться D или E.
Создадим элемент списка загрузки операционных систем:
Параметры /create (без идентификатора) и /application osloader указывают на то, что элемент списка загрузки операционных систем создается для Vista и более поздней версии Windows. Параметр /d содержит метку, которую диспетчер загрузки указывает, предлагая варианты элементов списка загрузки операционных систем. После выполнения команды система возвращает новый глобально уникальный идентификатор (GUID), который нужно вставить в следующую команду:
На данном этапе мы имеем «голый» объект, для которого нужно установить некоторые значения с помощью команды Bcdedit/set, рассматривавшейся в предыдущих выпусках, посвященных Bcdedit. Какие значения следует устанавливать? Ответ прост. Берем выходные данные Bcdedit, полученные для исправной копии Windows, и используем их как модель. В моем случае папка \Windows находится на диске D, поэтому я ввожу следующее:
Наконец, вводим следующую команду, чтобы система Windows «увидела» элемент списка загрузки операционных систем должным образом:
Попробуйте это проделать на тестовой системе, и вы очень быстро решите проблемы с загрузкой.
Марк Минаси (www.minasi.com/gethelp) — старший редактор журнала Windows IT Pro, сертифицированный системный инженер по продуктам Microsoft
Поделитесь материалом с коллегами и друзьями
Все, что вы хотели знать про загрузку Windows, загрузчики и восстановление загрузки ОС
В этой статье я не планирую подробно рассказывать обо всех типах загрузчиков, но хочу свести воедино всю необходимую информацию, которую нужно знать для создания загрузочных дисков, флэшек, а также для восстановления загрузчиков.
Принципы загрузки операционных систем
При включении компьютера управление процессором получает BIOS, и если он настроен на загрузку (boot) с винчестера, то он подгружает в оперативную память компьютера первый сектор диска (MBR) и передает управление ему. Если у вас несколько жестких дисков, то каждый из них содержит свою MBR. В этом случае можно или менять порядок загрузки дисков в BIOS, или же прописать все операционные системы с разных дисков в один PBR загрузчик, об этом ниже.
Сразу оговоримся, что если у BIOS у вас включен режим загрузки UEFI, то структура разделов диска у вас должна быть не MBR, а GPT. GPT имеет не только другую структуру разделов, но и другую структуру загрузочной области. Там в первый сектор записывается «заглушка» для BIOS (Protective MBR), которая служит для того, чтобы старый Legacy BIOS мог загрузиться с GPT диска в режиме совместимости, если ОС была установлена на GPT (часто в BIOS его называют CSM – Compatibility Support Module). Однако, вы никогда не сможете загрузить ОС с MBR диска, если в BIOS выставлена загрузка в режиме UEFI.
При загрузке операционной системы, сначала считывается первый сектор с устройства загрузки, представляющий собой главную загрузочную запись (Master Boot Record — MBR). Стандартно, в качестве MBR выступает первый сектор загрузочного диска. MBR содержит список разделов, признак активного раздела (раздела, с которого будет выполняться загрузка ОС), некоторые служебные данные, а также программный код для считывания в память загрузочного сектора активного раздела (Partition Boot Record — PBR) и передачи ему управления.
Размер сектора на жестком диске — 512 байт. В секторе MBR хранятся данные, которые должны заканчиваться специальной сигнатурой. Этим словом называется специальная, строго установленная, последовательность из 2 байт с шестнадцатеричными значениями 55h AAh, которая записывается в последние 2 байта сектора и соответственно имеет смещение от начала сектора 1FEh. Если хотя бы один из двух последних байтов отличается по значению, считается, что первый сектор не является MBR и не содержит осмысленной информации. Если компьютер при старте, прочитав первый сектор, не обнаружит правильной сигнатуры, он не будет передавать управление располагающемуся там коду, даже если он правильный, а выдаст сообщение о том, что главная загрузочная запись не найдена.
Общая структура MBR может быть представлена следующей таблицей:
Смещение Длина Описание
000h 446 Код загрузчика
1BEh 64 Таблица разделов
1FEh 2 Сигнатура (55h AAh)
Длина указана в байтах.
Как видно, MBR может содержать информацию максимум о 4 разделах. Каждый 16-байтовый блок, содержащий информацию о разделах, в своем начале содержит признак активности раздела — т.е. признак того, что операционную систему следует загружать именно из этого раздела — может иметь значения 80h (раздел активен) и 00h (раздел не активен). Количество активных разделов должно быть не более одного.
Шестнадцатеричный однобайтовый код далее указывает на тип (ID) раздела. Например, 07h – раздел типа NTFS, 0Bh – FAT32, 17h – скрытый NTFS раздел, 27h – системный скрытый NTFS раздел для восстановления системы.
Типы MBR
Выше мы увидели, что в сектор MBR записывается код загрузчика. Что же это? Дело в том, что в MBR может быть записан как «стандартный» загрузчик, так и альтернативные загрузчики.
Существуют следующие распространенные типы MBR:
Конечно, с учетом многообразия ОС, существует масса других MBR, но они не так популярны.
Операционные системы дружат только с определёнными типа загрузчиков, однако это не значит, что их нельзя модифицировать для поддержки других ОС. Так, в Windows MBR можно добавить информацию о Linux разделе, но этого недостаточно, чтобы Linux стал грузиться. Для этого также потребуется редактировать и PBR. Однако линуксовый LDLINUX.SYS требует наличия своего микрокода в MBR, чтобы обращаться к нему в процессе загрузки, то есть если у вас загрузочная запись Windows NT MBR, а загрузчик GRUB, то такая схема работать не будет. Виндовсовые загрузчики могут обойтись без наличия соответствующего микрокода в MBR, поэтому они могут грузиться и через GRUB MBR.
Главное, что вам нужно понять, что MBR содержит микрокод, инструкции для процессора, а не файлы. PBR же указывает на загрузчик, который является файлом.
Разнообразие PBR
Мы с вами выяснили, что MBR передает управление на активный раздел с PBR. PBR (Partition Boot Record), так же называют volume boot record (VBR) – это микрокод в начальном секторе раздела диска (часто это сектор 63), который содержит информацию, какой же загрузчик искать.
Существуют следующие загрузчики:
Тип MBR — NT 5.x/6.x, 1 сектор
Тип MBR — Grub4DOS, 18 секторов
Тип MBR — LILO/GRUB и др. линуксовые (к-во секторов зависит от версии и количества файлов)
Как я сказал выше, загрузчик является не загрузочной областью, а бинарным файлом.
Например, типичные пример создания мультизагрузочной флэшки – Multiboot USB 2k10, создаваемые уважаемыми conty9 & korsak7. Мультизагрузочный диск системного администратора с возможностью загрузки c CD/DVD, флешки, USB-HDD и обычного HDD и состоящий из нескольких Windows PE-сборок, а также DOS версий продуктов компании Acronis – например Acronis True Image (выполнены на Linux-ядре). Именно из-за этого смешанного зоопарка систем и приходится использовать загрузчик Syslinux (хотя можно и Grub4DOS).
В своем арсенале вам необходимо обязательно иметь утилиту BootICE. Уникальная в своём роде утилита для изменения или бэкапа/восстановления MBR (Master Boot Record) или PBR (Partition Boot Record). С BOOTICE, вы можете легко изменять тип MBR/PBR. Поддерживается загрузочные записи: Grub4DOS, SysLinux, PLoP, MS NT52/60… Например, с помощью этой утилиты, вы можете установить Grub4DOS вашим MBR или PBR, установить NTLDR или BOOTMGR к вашему PBR, установить SYSLINUX на PBR, и так далее.



Помимо работы с MBR и PBR, BootICE позволяет редактировать разделы диска, выполнять ручное разбиение и форматирование, модифицировать тип раздела, сохранять и восстанавливать из бэкапа таблицу разделов.

Кратко о загрузчике Syslinux
Итак, Syslinux состоит из файла загрузчика и файла конфигурации меню syslinux.cfg. Файл меню может вызывать графическое меню через подгрузку файла vesamenu.c32.
Установка Syslinux под Windows на другой диск выполняется достаточно просто: используется файл «[bios/]win32/syslinux.exe» для 32-х битных систем и «[bios/]win64/syslinux64.exe» для 64-х битных систем.
syslinux.exe —install a: — установка на флоппи-диск
syslinux.exe —mbr —active —directory /boot/syslinux/ —install z: — установка на диск z:, например флешку, где
— в качестве разделителей должны быть использованы именно /, а не \
— в каталоге z:\boot\syslinux\ будет размещён файл-загрузчик «ldlinux.sys»
— и раздел z: помечен как активный
— для организации меню должен быть создан файл z:\boot\syslinux\syslinux.cfg

Через BootICE вы также можете установить загрузчик Syslinux, указав в опциях альернативное местоположение файлов ldlinux.sys и и файла меню syslinux.cfg.
Загрузчики Windows
Конечно, основное внимание мы уделим загрузчикам для Windows.
Загрузчик NTLDR использовался до появления операционной системы Windows Vista. В процессе начальной загрузки, программный код загрузочного сектора раздела (PBR — Partition Boot Sector) обеспечивал поиск, считывание в память и передачу управления файлу ntldr, который размещался в корневом разделе загрузочного диска. Конфигурирование загрузчика ntldr выполнялось с помощью простого текстового файла boot.ini, содержимое которого задавало список загружаемых операционных систем, их параметры загрузки, размещение системных файлов и т.п. В операционных системах Windows Vista /Server 2008 и более поздних, загрузчик ntldr не используется, и заменен диспетчером загрузки BOOTMGR. Соответственно, изменился и программный код загрузочного сектора раздела, обеспечивающий передачу управления файлу bootmgr. Новый диспетчер загрузки использует собственные данные конфигурации загрузки (Boot Configuration Data — BCD) и может выполнять, при определенных настройках, загрузку любых операционных систем семейства Windows. Загрузчик ntldr не поддерживает возможность загрузки Windows Vista и старше.
Также, хочу отметить, что все современные Windows PE любых версий также используют загрузчик bootmgr. Цепочка стадий загрузки MBR — PBR — BOOTMGR — это минимально необходимое условие для того, чтобы загрузка операционной системы могла начаться. Дальнейший же ее ход, определяется диспетчером загрузки BOOTMGR, который считывает данные конфигурации загрузки из файла \BOOT\BCD активного раздела и выполняет загрузку в соответствии с их содержимым.
Для Windows 7 он запускает файл \WINDOWS\system32\winload.exe

Диспетчер загрузки bootmgr позволяет выполнить загрузку как с обычного системного диска, так и из загрузочных образов, виртуальных дисков, загрузку с использованием загрузчиков других операционных систем. Это позволяет использовать bootmgr для загрузки Windows PE. В соответствии с конфигурацией загрузки, диспетчер BOOTMGR может выполнить загрузку ядра Windows или, например, Linux, обеспечить выход из режима гибернации, загрузить диагностические программы, выполнить загрузку ядра с измененными параметрами и т.п.
Обычно файл bootmgr имеет атрибуты «скрытый» и «системный». По типу структуры, файл \Boot\BCD является кустом реестра и отображается в редакторе реестра Windows как раздел
Обычно именно конфигурация BCD становится наибольшим камнем преткновения.
Конфигурирование BOOTMGR и BCD
Для работы с загрузчиком Windows вам понадобятся системные утилиты:
Команда BCDEDIT применяется в операционных системах Windows Vista и старше для редактирования BCD. Подробную инструкцию по использованию этой утилиты можно найти здесь.
Однако, я вам крайне рекомендую использовать очень удобную программу EasyBCD для редактирования BCD. Например, с помощью нее вы легко можете добавить Linux раздел в меню загрузки. Вот статья о том, как добавить в BCD конфигурацию Windows 7 пункт загрузки Linux Ubuntu.
При запуске EasyBCD в окне View Settings можно посмотреть текущую конфигурацию BCD. На скриншоте видно, что в текущий момент на диске установлена одна Windows 7, GUID которой <9079c27c-fa49-11e5-8c8e-3417ebc2574d>и вручную добавленный пункт меню для запуска установки Windows из WIM файла:

А вот BCD меню загрузочной флэшки, на которой присутствуют инсталляторы Windows 7 x86 и x64, а также две среды MSDaRT x86 + x64:



Утилита BOOTSECT.EXE позволяет изменить программный код загрузчика Windows для переключения между двумя вариантами диспетчера загрузки — BOOTMGR или NTLDR – или восстановить поврежденный загрузчик!
Команда bootsect /nt60 E: /mbr /force – создает на диске E: (например, флэшке) записи MBR и PBR и устанавливает загрузчик bootmgr.
Ну и третья, крайне важная утилита — BootRec входит в состав средств среды восстановления Windows (Windows Recovery Environment) и применяется для восстановления загрузки операционной системы. Найди ее вы можете, загрузившись с установочного диска Windows и выбрав вместо установки опцию «Восстановление системы». Появится окно MSDaRT, откуда можно запустить командную строку и набрать там BootRec.exe. MSDaRT также можно скачать отдельно (это бесплатный продукт Microsoft) и сделать загрузочную флэшку/диск с ним.
Команда Bootrec /FixMbr – записывает основную загрузочную запись (MBR) системного раздела, совместимую с Windows. При этом существующая таблица разделов не перезаписывается.
Bootrec /FixBoot – записывает в системный раздел новый загрузочный сектор, совместимый с Windows.
bootrec /RebuildBCD – перестроить хранилище конфигурации загрузки на данном компьютере. Удобно использовать для изменения конфигурации BCD при добавлении нового диска с установленной Windows, или для внесения изменений в существующую конфигурацию загрузки новых или ранее не использовавшихся ОС.
Загрузчик GRUB4DOS
Это один из наиболее универсальных загрузчиков, способных загружать почти любую операционную систему с любого носителя. Пользователям Linux установка GRUB очевидна, для Windows все не так просто. GRUB имеет смысл использовать, например, одним из загрузчиков мультизагрузочной флэшки, ведь он поддерживает chainloader — передачу управления на другой загрузчик по цепочке. Таким образом, на флэшке можно установить GRUB MBR, который будет обращаться к загрузчику grldr, который в свою очередь через меню позволяет перенаправить запросы на bootmgr, например, для установки Windows.
Загрузчик состоит из следующих файлов:
Файл grldr.mbr нужен для установки GRUB в качестве MBR. Итак, GRUB можно установить руками под Windows или же воспользоваться различными утилитами.
Установка GRUB загрузчика под Windows
Представим, что у вас уже есть Windows с загрузчиком bootmgr. Вам необходимо будет добавить в BCD записи о новом загрузчике, чтобы не лишаться существующего. Порядок действий:
Вот и все, не так и сложно.
Сложнее отредактировать меню menu.lst. Вот список основных команд консоли GRUB (их можно исполнять как вручную из командной строки, так и из файла меню):
Приведу примеру рабочих кусков кода из файла меню:
title Alkid Live CD root (hd0,0) chainloader (hd0,0)/minint/setuplns.bin
Если вам совсем не хочется, существует программа GRUB4DOS Installer, и даже удобный русский инсталятор для нее, но этот вариант вам не позволит сделать комбинированный загрузчик. Он задаст вопрос, куда распаковать файлы и куда установить загрузчик, после чего сделает все сам: отформатирует, установить MBR, скопирует файлы. Но я лично против такой «автоматизации».
Также, для любителей конфигурировать загрузчик из-под Windows, существует утилитка WinGRUB, которая устанавливает GRUB без форматирования флэшки.
Если все-таки вам не хватило нервов и сил разобраться в написании меню, то есть программки, которые сделают меню загрузки и установят загрузчик за вас, вам нужно только выбрать ISO файлы дистрибутивов, которые надо добавить:
Для желающих создать подобные флэшки рекомендую также почитать профильные сайты: greenflash.su, flashboot.ru и usbtor.ru.
Выводы
Итак, чтобы была возможность загрузить ОС, необходимо, чтобы был установлен корректный загрузчик MBR, который заканчивается валидной сигнатурой, должна быть таблица разделов, и хотя бы один раздел должен быть помечен как активный. А в самом разделе, куда MBR передаст управление, должна быть валидная загрузочная запись, которая укажет, какой системный файл необходимо загрузить в память для начала загрузки самой ОС. Кроме того, должно быть загрузочное меню, которое укажет на местоположение загрузочных файлов ОС.
Параметры Command-Line BCDEdit
Файлы данные конфигурации загрузки (BCD) предоставляют хранилище, которое используется для описания приложений загрузки и параметров приложения загрузки.
BCDEdit — это программа командной строки для управления BCD. Его можно использовать для различных целей, включая создание новых магазинов, изменение существующих магазинов и добавление параметров меню загрузки.
Запуск программы BCDEdit
BCDEdit ограничена стандартными типами данных и разработана в основном для выполнения отдельных общих изменений в BCD. Связанные ресурсы:
Синтаксис BCDEdit
Параметры Command-Line BCDEdit
Для BCDEdit.exe доступны следующие параметры командной строки.
Справка
Отображает список команд BCDEdit.
Чтобы отобразить подробную справку по определенной команде, выполните команду BCDEdit/? Command, где Command — это имя команды, для которой выполняется поиск дополнительных сведений.
Работа с магазином
| Параметр | Описание |
|---|---|
| /креатесторе | Создает новое пустое хранилище данных конфигурации загрузки. Созданное хранилище не является системным хранилищем. |
| /Export | Экспортирует содержимое системного хранилища в файл. Этот файл можно использовать позже для восстановления состояния системного хранилища. Эта команда допустима только для системного хранилища. |
| /Import | Восстанавливает состояние системного хранилища с помощью файла данных резервной копии, созданного ранее с помощью параметра/Export. Эта команда удаляет все существующие записи в системном хранилище до того, как будет выполнена операция импорта. Эта команда допустима только для системного хранилища. |
| /Store | Этот параметр можно использовать с большинством команд BCDedit, чтобы указать используемое хранилище. Если этот параметр не указан, программа BCDEdit работает в системном хранилище. Выполнение команды BCDedit/Store эквивалентно выполнению команды BCDedit/енум Active. |
| /сиссторе | Задает устройство системного хранилища. Это относится только к системам на основе EFI. Он не сохраняется при перезагрузках и используется только в тех случаях, когда устройство системного хранилища является неоднозначным. |
Работа с записями в магазине
| Параметр | Описание |
|---|---|
| /Copy | Создает копию указанной загрузочной записи в том же системном хранилище. |
| /CREATE | Создает новую запись в хранилище данных конфигурации загрузки. Если задан известный идентификатор, то параметры: доступность приложений,/инхерит и/девице не могут быть указаны. Если идентификатор не указан или хорошо известен, необходимо указать параметр: доступность приложений,/инхерит или/девице. |
| /delete | Удаляет элемент из указанной записи. |
| /миррор | Создает зеркало записей в хранилище. |
Изменение параметров записи
| Параметр | Описание |
|---|---|
| /делетевалуе | Удаляет указанный элемент из загрузочной записи. |
| команде | Задает значение параметра записи. |
например, эта команда позволит системе доверять Windows Insider Preview сборкам, подписанным сертификатами, которые не являются доверенными по умолчанию:
Выполните перезагрузку после выполнения команды. Чтобы отключить флигхтсигнинг, выполните следующие действия.
Управление выходными данными
| Параметр | Описание |
|---|---|
| /енум | Выводит список записей в магазине. Параметр/енум является значением по умолчанию для Бцедит, поэтому выполнение команды BCDedit без параметров эквивалентно выполнению команды BCDedit/енум Active. |
| /v | Режим подробного вывода. Как правило, все известные идентификаторы записей представлены в виде понятной краткой формы. При указании параметра/v в командной строке все идентификаторы отображаются в полном объеме. |
Выполнение команды BCDedit/v аналогично выполнению команды BCDedit/енум Active/v.
Управление диспетчером загрузки
| Параметр | Описание |
|---|---|
| /бутсекуенце | Указывает одноразовый порядок просмотра, который будет использоваться для следующей загрузки. Эта команда аналогична параметру/дисплайордер, за исключением того, что она используется только при следующем запуске компьютера. После этого компьютер вернется к исходному порядку просмотра. |
| /Default | Указывает запись по умолчанию, которую диспетчер загрузки выбирает по истечении времени ожидания. |
| /дисплайордер | Указывает порядок отображения, используемый диспетчером загрузки при отображении параметров загрузки для пользователя. |
| /timeout | Указывает время ожидания (в секундах), по истечении которого диспетчер загрузки выбирает запись по умолчанию. |
| /тулсдисплайордер | Указывает порядок отображения, используемый диспетчером загрузки при отображении меню Сервис. |
Параметры служб аварийного управления
| Параметр | Описание |
|---|---|
| /бутемс | Включает или отключает службы аварийного управления (EMS) для указанной записи. |
| #a1 | Включает или отключает EMS для указанной загрузочной записи операционной системы. |
| /емссеттингс | Задает глобальные параметры EMS для компьютера. /емссеттингс не включает и не отключает EMS для любой конкретной записи загрузки. |
Отладка
| Параметр | Описание |
|---|---|
| /bootdebug | Включает или отключает отладчик загрузки для указанной записи загрузки. Хотя эта команда работает для любой загрузочной записи, она действует только для приложений загрузки. |
| /dbgsettings | Указывает или отображает глобальные параметры отладчика для системы. Эта команда не включает и не отключает отладчик ядра. для этой цели используйте параметр/Debug. Чтобы задать отдельный глобальный параметр отладчика, используйте команду bcdedit/сетдбгсеттингс Type value. |
| /debug | Включает или отключает отладчик ядра для указанной записи загрузки. |
| /хипервисорсеттингс | Задает параметры гипервизора. |
Чтобы устранить неполадки новой установки, включите режим отладки, изменив файл конфигурации загрузки (BCD). Например, используйте следующий синтаксис, чтобы включить отладку ядра или загрузки.
где — это идентификатор GUID объекта Loader, который используется для загрузки операционной системы. «Default» можно использовать, если операционная система является параметром по умолчанию в меню диспетчера загрузки.
