Настройки параметров загрузки гипервизора при помощи программы BCDEdit


База данных конфигураций загрузки (BCD) содержит настройки, которые определяют — как запускаются ОС Windows Vista и Windows Server 2008. В предыдущих версиях ОС эти настройки указывались в файле текстовом Boot.ini на системном разделе (при использовании BIOS) или в энергонезависимой памяти (NVRAM, при использовании EFI). Сейчас параметры BCD хранятся в файле \Boot\bcd активного раздела (или на системном разделе EFI для систем с поддержкой EFI). Этот файл уже не отредактируешь в Блокноте — и даже те, кто подключат его (или его копию) как куст в реестр, навряд ли смогут уверенно вносить изменения напрямую. Настройка загрузчика Windows, который выполняется до операционной системы, производится утилитой командной строки BCDEdit.exe. Она служит для создания, удаления, редактирования и дополнения записей в хранилище BCD. Программа BCDEdit находится в папке %SysterRoot%\System32.


Почему было принято решение о переходе от Boot.ini к BCD?


Хранилище BCD было разработано в процессе усовершенствования механизма описания конфигурации загрузки. Разработка новых моделей микрокода (firmware) — таких, как EFI — привела к тому, что для абстрагирования от этого микрокода потребовался новый интерфейс. Он должен быть расширяемым и интероперабельным — то есть совместимым с системами производства третьих сторон. Эта новая разработка послужила основной для многих новых функций Windows Vista — например, средства восстановления при загрузке (Startup Repair tool).


Что можно сделать с помощью BCDEdit?


В настоящее время BCDEdit поддерживает следующие функции:



  • Создание хранилища BCD для последующей установки Windows Server 2008.

  • Добавление записей в существующее хранилище BCD.

  • Изменение существующих записей в хранилище BCD.

  • Удаление записей из хранилища BCD.

  • Экспорт записей из хранилища BCD.

  • Импорт записей в хранилище BCD.

  • Вывод текущих параметров.

  • Запрос записей определенного типа.

  • Применение глобальных изменений (ко всем записям).

  • Изменение времени ожидания по умолчанию.

Дополнительно почитать о возможностях BCDEdit можно в статье Vista TechCenter (оригинал) или более подробно в материалах Windows Hardware Developer Central (на английском языке).


При чем тут гипервизор?


С выходом beta-версии Hyper-V BCD, очевидно, должна была получить возможность хранить также и настройки гипервизора — т.к. он стартует еще до загрузки ядра ОС.


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


Итак, в BCD появился новый объект, называемый hypervisorsettings. Вы можете использовать его для включения режима отладки и настройки параметров запуска гипервизора. Данный объект наследуется объектом bootloadersettings, так что вы можете вносить изменения единожды для всех записей загрузчика в хранилище конфигураций. Однако, настраивать параметры запуска гипервизора можно и индивидуально для каждой записи загрузчика.


Привожу ключи программы BCDEdit, позволяющие модифицировать параметры запуска гипервизора:


bcdedit /set {ID}  HYPERVISORLAUNCHTYPE { Type }
bcdedit /hypervisorsettings DebugType [debugport:Port] [baudrate:Baud][channel:Channel]
bcdedit /set {ID}  HYPERVISORDEBUG {ON|OFF}
bcdedit /set {ID}  HYPERVISORPATH { Path }
bcdedit /set {ID}  HYPERVISORDEBUGTYPE {DebugType}
bcdedit /set {ID}  HYPERVISORDEBUGPORT { Port }
bcdedit /set {ID}  HYPERVISORBAUDRATE { Baud }
bcdedit /set {ID}  HYPERVISORCHANNEL { Channel }


































Настройки гипервизора в BCDEdit


Параметр


Значение


ID


Указывает GUID(ы) ОС. Допустимо значение {current} для указания текущей ОС.


Type


Настраивает тип запуска гипервизора. Тип может иметь значения AUTO или OFF. AUTO обозначает автоматическую загрузку гипервизора. OFF отключает запуск гипервизора, — например, на тот случай, если вам нужно пользоваться гибернацией (hibernate) или для тестирования.


Path


Путь к исполняему файлу гипервизора относительно каталога %SystemRoot%\system32. Например, HvTfix64.exe или perf\hvix64.exe.


Эта настройка работает также, как указание путей для Kernel или Hal.


DebugType


Настраивает тип отладчика. Отладчик может иметь значения SERIAL или 1394.


Port


Для отладчика в режиме SERIAL указывает используемый порт COM.


Baud


Для отладчика в режиме SERIAL указывает пропускную способность (baud rate) порта.


Channel


Для отладчика в режиме 1394 указывает канал IEEE1394 (FireWire), который будет использоваться для отладки.


Примеры


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


bcdedit /set {current} hypervisorlaunchtype AUTO


bcdedit /set {current} hypervisordebug Off


Следующие команды установят автоматический режим запуска гипервизора с использованием глобальных параметров режима отладки (по умолчанию — COM1, 115200 baud):


bcdedit /set {current} hypervisorlaunchtype AUTO


bcdedit /set {current} hypervisordebug On


Следующие команды установят автоматический режим запуска гипервизора с использованием отладчика на 21 канале шины IEEE1394 (для конкретной записи загрузчика):


bcdedit /set {current} hypervisorlaunchtype AUTO


bcdedit /set {current} hypervisordebug On


bcdedit /set {current} hypervisorchannel 21


bcdedit /set {current} hypervisordebugtype 1394


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


bcdedit /set {current} hypervisorlaunchtype OFF


Следующая команда установит запуск гипервизора из исполняемого файла %systemroot%\system32\hvIceCap.exe:


bcdedit /set {current} hypervisorpath hvIceCap.exe

Comments (7)

  1. Alex A says:

    Ну, про NTDSUTIL это вы зря.

    Кривой она может казаться лишь при недостатке навыка работы с ней (а 99% администраторов она не нужна, как и bcdedit).

    Я правильно понял, что вы вставили второй жесткий диск, скопировали на него ОС, и хотите перенести bootbcd, а после сделать диск загрузочным?

    Есть множество программ для бэкапа BCD. Я дома эту процедуру делаю перед каждым добавлением очередного жесткого диска.

  2. Alex A says:

    Гм, насколько я понимаю, вы можете сначала создать бэкап копию BCD ключем /export, а потом объявить эту копию основной ключем /import.

    Скачайте BCD.docx с сайте, там все есть:

    Make a Non-system Store into the System Store

    Systems can have any number of BCD stores. However, there can be only one system store, and it controls the boot process. The /import command replaces the contents of the system store with the contents of a specified non-system store. To preserve the contents of the current system store, run the /export command to create a backup copy of the system store. To restore the original system store, import the backup copy.

    The following commands save a backup copy of the system store and import a non-system store into the system store. NewStoreName is the fully-qualified name of the file that contains the non-system store, and BackupStoreName is the fully-qualified name of the file that contains the backup store.

    bcdedit /export BackupStoreName

    bcdedit /import NewStoreName

  3. Alex A says:

    Ну, а возвращсясь к NTFSUtil – она должна быть консольной, черно-белой, ASCIIшной итд, чтобы можно было восстановить сервер потерминалу (через LPT порт, а не RDP).

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

    Если честно, то я жду к Windows Server CODENAME "Seven" замены NTDSUtil на версию на PowerShell. Но не думаю, что это реально многое меняет, – просто становится легче скриптовать конкретные задачи и читать текст.

  4. Fahrain says:

    Тому, кто придумал хранить информацию о загрузке в редактируемом только специальными утилитами файл – следует настучать по кумполу 🙂 Тому кто разрабатывал BCDEdit – оторвать руки. Кривее и неудобнее пожалуй только консольная утилита Ntdsutil для управления Active Directory.

    Сравнительно недавно встал вопрос перемещения бета-версии Windows Server 2008 на другой физический диск, т.к. на том диске где она была установлена начали появлять бэд-блоки. Процесс перемещения занял 3-4 часа, из них 2 часа я потратил на поиск способа внести информацию в Bootbcd, расположенный не на диске С:. Так вот – _это невозможно в принципе_. Т.е. совсем. Никак. К счастью – помогла утилита Startup Repair tool с загрузочного диска.

    P.S.: В случае WinXP процесс исправления информации с какого физического диска загружаться занял бы пару минут максимум.

  5. Fahrain says:

    >Я правильно понял, что вы вставили второй жесткий диск, скопировали на него ОС, и хотите перенести bootbcd, а после сделать диск загрузочным?

    Собственно делалось все так:

    – были установлены Windows Server Backup Features

    – при их помощи сделан бекап диска C: (на работающей системе которую бекапили, удаленно через Remote Desktop! – за это 5+ разработчикам 🙂 )

    – полученный бекап был развернут на другой физический диск

    – после чего начались поиски "как бы заставить систему оттуда загрузиться?"

    ЕДИНСТВЕННЫЙ найденный мной способ было использование утилиты восстановления поврежденной загрузочной записи с загрузочного диска Vista. (Причем аналогичной утилиты на загрузочном диске Windows Server 2008 RC0 – не было. Ну да ладно – все-таки бета)

    Кстати система практически сразу запустилась с нового диска. Единственное, что надо было сделать – это поправить привязку физических дисков к буквам в разделе реестра HKLMSystemMountedDevices

    После чего система стабильно работала еще 3 месяца. Вот за бекап – разработчикам огромное спасибо, лучше я еще не видел. Но! Проблема переноса загрузчика заняла 80% времени по сравнению с остальными, что явно неправильно

    ————

    Что же касается NTDSUTIL… Не знаю как вас, но меня несколько смущает утилита в виндовс, написанная в классическом *nix стиле. Я уж не говорю о том, что команды состоящие из пары длиннющих слов которые надо вводить вручную несколько, хм… устарели?

    Кстати, альтернативой вполне мог быть интерфейс а-ля начала 90-х (помните quickBasic?)

  6. Fahrain says:

    Хорошо, попробуем зайти с другой стороны. Итак:

    1. Имеем восстановленный на новый жесткий диск сервер 2008 (или Висту – в данном случае это непринципиально). Диск новый, имеет размер разделов, отличный от исходных -> бекап был восстановлен пофайлово.

    2. Считаем что предыдущий диск умер (сгорел, например)

    Итак, первое что нам нужно сделать – это записать загрузчик на новый раздел. Лично я делал это через Vista BootManager v1.1, но это не принципиально, можно и стандартной командой обойтись.

    Второй шаг – это конфигурирование BCD для того, чтобы загрузчик смог загрузить наш сервер.

    Примечание: Чтобы жизнь совсем раем не казалась – считаем что поблизости других ОС типа Vista нет, за исключением "лежащего" сервера и загрузочного DVD с ним.

    Итак, если мы собираемся конфигурировать BCD вручную – мы сталкиваемся со следующими препятствиями:

    а) Необходимо указать утилите BCDEdit что мы собираемся редактировать (если я правильно понимаю) non-system store расположенную на жестком диске.

    б) нам необходим GUID диска. Как его получить?

    в) следуя инструкции отдать около 5 команд с ничего не говорящим большинству названиями параметров.

    Итого, в сухом остатке – _быстро_ это _вручную_ сделать вряд ли получится. А теперь вспомним boot.ini из WinXP, который смог бы поправить даже ребенок…

    ——————-

    Собственно, про что я уже который комментарий пытаюсь сказать: ОС Windows изначально рассчитана на конфигурирование с помощью GUI. Я не имею ничего против консольных утилит управление которыми идет с помощью параметров командной строки – это удобно для разных пакетных задач. Но! К этим консольным утилитам должен быть как минимум довесок в виде GUI которое позволяет сделать все то же самое мышкой. Сейчас же складывается нездоровая тенденция "возврата к корням" – чистая командная строка, куча специализированных утилит с параметрами, которые помнят только те, кто ими постоянно пользуется. Осталось сделать последний шаг – добавить в систему команду man и получим *nix глазами Microsoft…

  7. Fahrain says:

    >Ну, а возвращсясь к NTFSUtil – она должна быть консольной, черно-белой, ASCIIшной итд, чтобы можно было восстановить сервер потерминалу (через LPT порт, а не RDP).

    Что касается ntdsutil (да и bcdedit – тоже), то я еще раз повторяю, вспомните времена QuickBasic, Turbo Pascal 7.0: текстовый режим, эмуляция 3D при помощи символов псевдографики, кнопочки, чекбоксы, поля ввода – все на псевографике… Вот это как раз то, что нужно!

Skip to main content