Команда BCDEDIT - редактирование данных конфигурации загрузки Windows


Предыдущая | Следующая

Команда BCDEDIT применяется в операционных системах Windows Vista и старше для редактирования данных конфигурации загрузки операционной системы ( BCD - Boot Configuration Data ).

    При загрузке операционной системы, сначала считывается первый сектор с устройства загрузки, представляющий собой главную загрузочную запись (Master Boot Record - MBR). Стандартно, в качестве MBR выступает первый сектор загрузочного диска. MBR содержит список разделов, признак активного раздела (раздела, с которого будет выполняться загрузка ОС), некоторые служебные данные, а также программный код для считывания в память загрузочного сектора активного раздела (Partition Boot Record - PBR) и передачи ему управления. Программный код PBR, в случае загрузки операционных систем Windows Vista и старше, должен обеспечить поиск, считывание и передачу управления диспетчеру загрузки bootmgr, который и будет продолжать процес загрузки системы. В соответствии с конфигурацией загрузки, диспетчер BOOTMGR может выполнить загрузку ядра Windows или, например, Linux, обеспечить выход из режима гибернации, загрузить диагностические программы, выполнить загрузку ядра с измененными параметрами и т.п. 

Обычно файл bootmgr имеет атрибуты "скрытый" и "системный". Код диспетчера загрузки , получив управление, выполняет поиск и обработку данных конфигурации загрузки (файл BCD в папке \BOOT\ активного раздела), в соответствии с которыми выполняется дальнейшие этапы загрузки ( отображение меню, выбор загружаемой ОС или средств диагностики, загрузка ядра и т.п. ). По типу структуры, файл \\boot\BCDявляется кустом реестра и отображается в редакторе реестра Windows как раздел 

HKEY_LOCAL_MACHINE\BCD00000000 


 

Раздел реестра с данными конфигурации загрузки BCD
 

Данный раздел реестра обрабатывается диспетчером загрузки bootmgr и в редакторе реестра имеет разрешение только на чтение . Разрешение на запись можно установить через контекстное меню редактора, вызываемое правой кнопкой мышки. Бывают случаи, когда нет возможности выполнить BCDEDIT или, когда в дополнение к программе bcdedit.exe можно воспользоваться еще и возможностями редактором реестра, в том числе - и экспортом-импортом или добавлением, удалением или изменением отдельных ключей, но это - отдельная тема. В любом случае, при изучении механизма управления конфигурацией загрузки Windows, просмотр и редактирование данных раздела реестра HKEY_LOCAL_MACHINE\BCD00000000 облегчает понимание структуры хранилища BCD. 

Средство командной строки bcdedit.exe позволяет редактировать данные конфигурации загрузки и входит в состав стандартных программ Windows Vista и более поздних, а также может использоваться при загрузке с установочного диска системы или диска аварийного восстановления. Естественно, для изменения конфигурации загрузки Windows, программа должны быть запущена с правами администратора. 

Данные конфигурации загрузки можно условно разделить на 3 основных элемента:

- хранилище BCD (Store)
- записи в хранилище (Entries)
- параметры записей (Entry Options) 

Иерархически, хранилище можно представить в виде совокупности объектов (Objects), состоящих из элементов (Elements). Например, объектом конфигурации является группа элементов, обеспечивающих загрузку отдельной ОС или например, настройки самого диспетчера bootmgr . BCDEDIT позволяет удалять, создавать, копировать и изменять объекты и элементы конфигурации загрузки BCD . Если в командной строке bcdedit не задан ключ /store - то ее действие выполняется по отношению к системному хранилищу (активной конфигурации, используемой для данной загрузки). 

    Хранилище данных конфигурации загрузки (BCD) заменяет собой простой текстовый файл Boot.ini, использовавшийся в операционных системах Windows NT/2000/XP для загрузчика ntldr. Данные конфигурации в более поздних версиях Windows хранятся в виде специальных программных объектов , не являющихся текстовыми элементами. Каждый объект данных конфигурации BCD имеет глобальный уникальный идентификатор - GUID и хранится в хранилище в определенном формате. Идентификатор GUID формируется программным путем и однозначно является уникальным, на том компьютере, где он генерируется. Алгоритм формирования GUID построен таким образом, что каждый новый генерируемый идентификатор никогда не совпадает с другим, существующим в данной системе. Обозначается GUID в виде наборов шестнадцатеричных цифр, разделяемых дефисами для удобства записи, и заключенными в фигурные скобки:

{166769E1-88E8-11CF-A6BB-0080C7B2D6A2}

Некоторые из объектов хранилища кроме идентификаторов GUID, могут также иметь псевдонимы для удобства использования, например {bootmgr} (соответствует диспетчеру загрузки ) и {default} (соответствует используемому по умолчанию загрузчику Windows). Для отключения использования псевдонимов в командной строке bcdedit предусмотрен ключ /v

bcdedit /v - отобразить данные текущей системной конфигурации загрузки без использования псевдонимов (только с идентификаторами GUID) 

Перечень псевдонимов (известных идентификаторов):
 


    {bootmgr}               Указание записи диспетчера загрузки Windows.    {fwbootmgr}             Указание записи диспетчера загрузки
                            микропрограмм, особенно в системах, где
                            реализована  спецификация EFI.    {memdiag}               Указание записи приложения диагностики памяти.    {ntldr}                 Указание загрузчика ОС (Ntldr), используемого
                            для запуска операционных систем более
                            ранних  версий, чем Windows Vista.    {current}               Указание виртуального идентификатора,
                            соответствующего загрузочной записи операционной
                            системы, запущенной в данный момент.    {default}               Указание виртуального идентификатора,
                            соответствующего  используемой по умолчанию
                            записи диспетчера загрузки.    {ramdiskoptions}        Содержит дополнительные параметры, требуемые
                            диспетчером загрузки для устройств
                            электронных дисков.    {dbgsettings}           Содержит глобальные параметры отладки,
                            наследуемые любой записью приложения загрузки.    {emssettings}           Содержит глобальные параметры служб аварийного
                            управления, наследуемые любой записью
                            приложения загрузки.    {badmemory}             Содержит общий список дефектов RAM,
                            наследуемый любой записью приложения загрузки.    {globalsettings}        Содержит набор общих параметров, которые
                            должны наследоваться всеми записями
                            приложений загрузки.    {bootloadersettings}    Содержит набор общих параметров, которые
                            должны наследоваться всеми записями
                            приложений загрузки Windows.    {resumeloadersettings}  Содержит набор общих параметров, которые
                            должны  наследоваться всеми возобновлениями
                            Windows из записей приложения спящего режима.    {hypervisorsettings}    Содержит параметры гипервизора, которые могут
                            наследоваться любой записью загрузки ОС.



    Обычно, системные данные конфигурации загрузки Windows 7 хранятся в активном (загрузочном) скрытом от пользователя разделе жесткого диска, небольшого размера и без присвоенной ему буквы. При стандартной установке Windows 7, такой раздел располагается в начале системного диска и отображается в Диспетчере логических дисков как Зарезервировано системой (System Reserved) . Диспетчер загрузки, хранилище конфигурации и некоторые служебные данные представлены в данном разделе несколькими каталогами и файлами небольшого размера. Основная часть - в каталоге \boot. Файл хранилища конфигурации - это скрытый файл с именем bcd . Кроме хранилища конфигурации, в данном разделе могут находиться файлы локализации, журналы, файлы boot.ini и ntldr для тех предшествующих версий Windows, которые включены в системную конфигурацию. Если присвоить данному разделу свободную букву, то можно получить доступ к его содержимому с использованием стандартных средств системы. Однако, в целях обеспечения безопасности и целостности системы, делать это не рекомендуется - ручное вмешательство в хранилище данных конфигурации не предусмотрено, и может привести к невозможности выполнения загрузки. 

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

 

 




Встроенная справочная система bcdedit.exe содержит довольно подробную информацию по использованию команды и примеры ее применения. Формат командной строки для запроса пордсказки:

bcdedit.exe /? <команда>

bcdedit /? - для получения общей справки по использованию BCDEDIT

bcdedit /? Topics - для получения списка разделов справки по использованию bcdedit

bcdedit /? /createstore - для получения справки по разделу createstore (о создании нового пустого хранилища данных конфигурации) 

bcdedit export /? - как и в предыдущем случае, но с использованием иного синтаксиса - отобразить справочную информацию по использованию режима export (сохранение текущей конфигурации загрузки ).

Перечень разделов справки, получаемый по команде bcdedit /? Topics в среде Windows 7:
 

bootdebug           Команда /bootdebug.
bootems             Команда /bootems.
bootsequence        Команда /bootsequence.
copy                Команда /copy.
create              Команда /create.
createstore         Команда /createstore.
dbgsettings         Команда /dbgsettings.
debug               Команда /debug.
default             Команда /default.
delete              Команда /delete.
deletevalue         Команда /deletevalue.
displayorder        Команда /displayorder.
ems                 Команда /ems.
emssettings         Команда /emssettings.
enum                Команда /enum.
export              Команда /export.
FORMATS             Форматы типов.
hypervisorsettings  Команда /hypervisorsettings.
ID                  Идентификаторы записей.
import              Команда /import.
mirror              Команда /mirror.
set                 Команда /set.
store               Параметр командной строки /store.
timeout             Команда /timeout.
toolsdisplayorder   Команда /toolsdisplayorder.
TYPES               Типы, применяемые к любой записи.
TYPES BOOTAPP       Типы, применяемые к приложениям загрузки.
                    К этим приложениям относятся:
                    диспетчер загрузки, приложение диагностики
                    памяти, загрузчик ОС Windows и приложение возобновления.
TYPES BOOTMGR       Типы, применяемые к диспетчеру загрузки.
TYPES BOOTSECTOR    Типы, применяемые к приложению загрузочного сектора.
TYPES CUSTOMTYPES   Дополнительные типы.
TYPES FWBOOTMGR     Типы, применяемые к диспетчеру загрузки микропрограмм
TYPES MEMDIAG       Типы, применяемые к приложению диагностики памяти
TYPES NTLDR         Типы, применяемые к загрузчику ОС на базе NTLDR
TYPES OSLOADER      Типы, применяемые к загрузчику ОС Windows Vista и старше
TYPES RESUME        Типы, применяемые к приложению возобновления (выход из гибернации) 
v                   Параметр /v - для включения подробного режима



Для получения справочной информации по подразделу, можно использовать команду, с указанием его имени:

bcdedit bootdebug /? - вызвать справку по подразделу bootdebug ( использованию команды bootdebug) . 

bcdedit TYPES /? - отобразить справку по форматам данных ( Параметр datatype требуется в некоторых подкомандах bcdedit). 

bcdedit TYPES /? | more - то же, что и в предыдущем случае, но с использованием постраничного вывода на экран.

bcdedit TYPES /? > C:\bcdtypes.txt - то же, что и в предыдущем случае, но с выводом в текстовый файл.

Типы данных хранилища конфигурации:
 

    DESCRIPTION (строка)    Задает описание элемента.
    PATH (строка)           Задает путь к приложению.
    DEVICE (устройство)     Задает устройство, где располагается приложение.
    INHERIT (список)        Задает список наследуемых элементов.

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

bcdedit /? Formats или bcdedit formats /?

Для получения информации о дополнительных типах для устройств, введите команду 

bcdedit /? TYPES DEVOBJECT 

Для получения информации о дополнительных типах для конкретных приложений, введите команду 

bcdedit /? TYPES < apptype > где < apptype > может принимать следующие значения:

BOOTAPP     Приложения загрузки. Эти типы также применимы для диспетчера
            загрузки, приложения диагностики памяти, загрузчика ОС Windows
            и для приложения возобновления.
BOOTMGR     Диспетчер загрузки.
BOOTSECTOR  Приложение загрузочного сектора.
CUSTOMTYPES Особые типы.
DEVOBJECT   Дополнительные параметры объекта-устройства.
FWBOOTMGR   Микропрограммный диспетчер загрузки
MEMDIAG     Приложение диагностики памяти
NTLDR       Загрузчик ОС для более ранних версий Windows
OSLOADER    Загрузчик ОС для Windows Vista
RESUME      Приложение возобновления



bcdedit /? /types osloader - отобразить справочную информацию о типах данных, используемых для конфигурации загрузчика ОС Windows. В результате выполнения команды, например, в среде Windows 7 будет отображена подобная справка:
 

ЗАГРУЗЧИК ОС WINDOWSСледующие типы применяются только в записях загрузчика ОС Windows. Чтобы
получить дополнительные сведения о форматах данных для этих типов, введите
команду "bcdedit /? FORMATS".Загрузка
====
    BOOTLOG (логическое значение)
                         Включает журнал инициализации системы.
   BOOTSTATUSPOLICY      Значения: DisplayAllFailures, IgnoreAllFailures,
                         IgnoreShutdownFailures или IgnoreBootFailures.
   LASTKNOWNGOOD (логическое значение)
                         Включает загрузку последней удачной конфигурации.
   NOCRASHAUTOREBOOT (логическое значение)
                         Запрещает автоматический перезапуск после сбоя.
   RESUMEOBJECT (идентификатор)
                         Указывает идентификатор объекта возобновления,
                         который связан с данным объектом операционной системы.
   SAFEBOOT              Значения: Minimal, Network или DsRepair
   SAFEBOOTALTERNATESHELL (логическое значение)
                         Задает использование другой оболочки при загрузке в
                         безопасном режиме.
   STAMPDISKS (логическое значение)
                         Включает маркировку RAW-дисков во время загрузки среды
                         предустановки Windows.
   SOS (логическое значение)    Отображает дополнительные сведения о загрузке.
   WINPE (логическое значение)  Разрешает компьютеру загружать среду
                         предустановки Windows.Отображение
=======
   BOOTUX                Определяет графическое изображение при загрузке.
                         Принимает значения Disabled, Basic или Standard.Параметры
=======
   ADVANCEDOPTIONS (логическое значение) Разрешает дополнительные параметры.
   LOADOPTIONS (строка)    Задает любые дополнительные параметры, которые не
                           входят в другие типы.
   OPTIONSEDIT (логическое значение) Включает редактор параметров.Процессоры и контроллеры APIC
====================
   CLUSTERMODEADDRESSING (целое число)
                           Задает максимальное число процессоров в одном
                           кластере расширенного программируемого контроллера
                           прерываний (APIC).
   CONFIGFLAGS (целое число)     Задает флаги конфигурации, специфические для
                           процессора.
   MAXPROC (логическое значение) Сообщает максимальное число процессоров
                           в системе.
   NUMPROC (целое число)   Задает число используемых процессоров.
   ONECPU (логическое значение)  Задает использование только процессора
                           загрузки.
   RESTRICTAPICCLUSTER (целое число)   Задает максимальное число кластеров APIC
                           для использования системой.
   USEPHYSICALDESTINATION (логическое значение) 
                           Задает использование физического APIC.
   USELEGACYAPICMODE (логическое значение)
                           Задает использование старого режима APIC, даже если
                           процессоры и набор микросхем поддерживают
                           расширенный режим APIC.
   MAXGROUP (логическое значение)
                           Максимально увеличивает число групп, созданных в
                           конфигурации.
   GROUPAWARE (логическое значение)
                           Уведомляет драйверы о множественных группах в
                           многогрупповой среде.
   GROUPSIZE (целое число) Задает размер всех групп процессоров.
                           Должно быть целым числом степени 2.Уровень аппаратных абстракций (HAL) и ядро (KERNEL)
=========================================
   HAL (строка)            Задает имя файла для частного HAL.
   HALBREAKPOINT (логическое значение) Включает специальную точку остановки
                           уровня  аппаратных абстракций (HAL).
   KERNEL (строка)         Задает имя файла для частного ядра.
   USEPLATFORMCLOCK (логическое значение)
                           Задает использование источника тактовых импульсов
                           для счетчика производительности системы.VESA, PCI, VGA и TPM
=======================
   USEFIRMWAREPCISETTINGS (логическое значение)
                           Задает использование периферийных устройств (PCI),
                           настроенных в BIOS.
   MSI                     Значения: Default или ForceDisable.
   VGA (логическое значение) Задает использование VGA драйвера экрана.
   TPMBOOTENTROPY          Значения Default, ForceDisable или ForceEnable.Отладка и производительность
========================================
   DBGTRANSPORT (строка)   Задает имя файла для транспорта частного отладчика.
   DEBUG (логическое значение) Разрешает отладку ядра.
   PERFMEM (целое число)   Задает размер (в мегабайтах) буфера, выделяемого
                           для регистрации данных производительности.Память
======
   INCREASEUSERVA (целое число)
                           Увеличивает размер виртуального адресного
                           пространства,  которое могут использовать
                           процессы в пользовательском режиме.
   NOLOWMEM (логическое значение)
                           Запрещает использование нижней области памяти.
   NX                      Значения: OptIn, OptOut, AlwaysOn или AlwaysOff.
   PAE                     Значения: Default, ForceEnable, ForceDisable.
   REMOVEMEMORY (целое число)
                           Удаляет область памяти из общей доступной
                           области памяти, которую  может использовать
                           операционная система.Драйверы и корневой системный каталог
=======================
   DRIVERLOADFAILUREPOLICY Значения: Fatal или UseErrorControl.
   EMS (логическое значение) Включает службы аварийного управления ядра.
   OSDEVICE (устройство)   Задает устройство, которое содержит системный
                           корневой каталог.
   SYSTEMROOT (строка)     Задает путь к системному корневому каталогу.Гипервизор
==========
   HYPERVISORLAUNCHTYPE    Управляет типом запуска гипервизора.
                           Значения: Off или Auto.
   HYPERVISORPATH (строка) Задает путь к закрытому двоичному файлу гипервизора.
   HYPERVISORDEBUG (логическое значение)    Включает отладку гипервизора.
   HYPERVISORDEBUGTYPE     Значения: SERIAL или 1394.
   HYPERVISORDEBUGPORT (целое число)
                           Задает номер последовательного порта для
                           последовательного отладчика.
   HYPERVISORBAUDRATE (целое число)
                           Задает скорость передачи для последовательного
                           отладчика.
   HYPERVISORCHANNEL (целое число)          Задает канал для отладчика 1394.Для получения сведений о дополнительных типах, которые применяются с
загрузчиком ОС Windows, введите команду "bcdedit /? TYPES BOOTAPP".

Как видим, для определения конфигурации приложения загрузки системы ( OSLOADER ) используется несколько десятков типов данных, которые можно разделить на группы - ЗагрузкаОтображениеПамять и т.д. В стандартной конфигурации, большинство из дополнительных параметров приложения OSLOADER не нужны, и принимают значения, необходимые для обычной загрузки Windows. В некоторых случаях, может потребоваться изменение параметров распределения памяти, адресного пространства, уровня детализации журнала и т.п. Так, например, для 32-битных операционных систем семейства Windows, по умолчанию каждому пользовательскому процессу отводится виртуальное адресное пространство размером 2Гб, независимо от объема реальной памяти. В большинстве случаев, этого вполне достаточно для работы приложений, но при необходимости, его можно увеличить, указав параметр INCREASEUSERVA (целое число) :

bcdedit /set increaseuserva 3072 - установить размер виртуального адресного пространства для приложений равным 3 Гб.

bcdedit /set increaseuserva 2048 - установить размер виртуального адресного пространства для приложений равным 2 Гб.

bcdedit /deletevalue increaseuserva - удалить параметр INCREASEUSERVA из конфигурации загрузки. Действие данной команды, аналогично предыдущей, поскольку отсутствие элемента INCREASEUSERVA предполагает, что будет задано адресное пространство размером 2Гб. Естественно, это верно только для 32-разрядных ОС, поскольку для 64-разрядных, размер адресного пространства по умолчанию - 4Гб. 



Просмотреть текущие параметры для приложения загрузки Windows можно с помощью команды:

bcdedit /enum osloader

После выполнения команды bcdedit /set increaseuserva 3072 конфигурация будет выглядеть следующим образом:
 

Загрузка Windows
-------------------
идентификатор           {current}
device                  partition=C:
path                    \windows\system32\winload.exe
description             Windows 7
locale                  en-us
inherit                 {bootloadersettings}
osdevice                partition=C:
systemroot              \windows
resumeobject            {52d20656-3939-11e2-aab2-005056c00008}
nx                      OptIn
increaseuserva          3072
detecthal               Yes

Отсутствие в конфигурации загрузки increaseuserva означает, что этот параметр не задан и будет использоваться его значение по умолчанию (2Гб для 32-разрядных и 4Гб для 64-разрядных ОС). 

На практике, увеличение размера виртуального адресного пространства обычно используется для того, чтобы устранить аварийное завершение задач, как например, модов игры S.T.A.L.K.E.R, которым не хватает адресного пространства при обработке данных в памяти с настройками максимального качества графики. На 32-разрядных ОС Windows, установленного по умолчанию виртуального адресного пространства размером 2 Гб может не хватать, что приводит к аварийному завершению программы ( "вылету" игры ). Установка размера в 3 Гб командой bcdedit /set increaseuserva 3072 позволяет устранить эту проблему. Использование же, данной команды в 64-разрядных ОС Windows, приводит к уменьшению размера виртуального адресного пространства, поскольку его значение по умолчанию равно 4096 ( 4Гб). 

Проверить установленное значение increaseuserva можно с использованием команды find в цепочке с командой bcdedit

bcdedit | find "increaseuserva" 

В результате выполнения команды получим :

 

increaseuserva          3072



Если в результате выполнения команды на экран ничего не выдается, то это значит, что параметрincreaseuserva не задан, и используется его принятое по умолчанию значение - 2Гб для 32-разрядной Windows, или 4Гб для 64-разрядной. Естественно, удаление или изменение значения increaseuserva вступит в силу только после перезагрузки Windows.




 

Примеры использования BCDEDIT