BCDEDIT: редактирование загрузчика Windows

BCDEDIT: редактирование загрузчика WindowsНачиная с Windows Vista, корпорация Microsoft усложнила процесс редактирования загрузчика Windows. Мы уже касались утилиты bcdedit.exe. Эта статья посвящена ей подробнее.

Для начала разберемся, почему Microsoft решила отказаться от столь простого понятного текстового файла boot.ini. Дело, как это часто водится, в безопасности.

Для усложнения получения доступа к параметрам загрузчика было придумано специальное хранилище данных конфигурации загрузчика (BCD). В Windows Vista и более поздних версиях данные конфигурации загрузчика хранятся в виде специальных программных объектов, которые уже не являются простыми текстовыми элементами. Каждый объект в хранилище имеет уникальный идентификатор (GUID) и хранится в специальном формате. Каждый идентификатор является уникальным для конкретной копии операционной системы. Для удобства редактирования параметров загрузчика некоторым из объектов помимо идентификаторов присвоены псевдонимы, по которым к ним и можно обращаться посредством утилиты bcdedit.exe. Вот список основных псевдонимов:

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

Коснемся команд, доступных в утилите bcdedit.exe. Для получения списка команд запустите командную строку и введите

bcdedit.exe /?

BCDEDIT: редактирование загрузчика Windows

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

bcdedit.exe /? [команда]

Для просмотра текущих параметров загрузки Windows достаточно вызвать утилиту в командной строке:

bcdedit.exe

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

bcdedit.exe > C:\bootconf.txt

Путь для сохранения и имя можно, конечно, указать и другие.

Если же вместо псевдонимов Вы хотите видеть GUID, то команду можно видоизменить:

bcdedit.exe /v > C:\bootconf.txt

Можно использовать и другие форматы для экспорта информации. Например rtf, doc (не docx) или csv. Это позволяет не отвлекаться на проблемы с кодировками.

BCDEDIT: редактирование загрузчика Windows

Перед редактированием загрузчика всегда разумно сделать его резервную копию. Делается это командой:

bcdedit.exe /export C:\BackupBCD\BCDfile

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

bcdedit.exe /export "C:\My BackupBCD\BCDfile"

Восстановление загрузчика производится командой

bcdedit.exe /import C:\BackupBCD\BCDfile

Разберем изменение основных настроек загрузчика Windows при помощи утилиты bcdedit.exe.

bcdedit.exe /timeout 15

Приведенная выше команда устанавливает время вывода списка загрузки равным 15 секундам.

Если помимо современных версий Windows, на компьютере также установлены старые версии ОС, относящиеся к семейству NT (2000, XP, Server 2003 и пр.), установить такую ОС в качестве загружаемой по умолчанию можно командой

bcdedit.exe /default {ntldr}

Если же в качестве загружаемой по умолчанию нужно использовать текущую ОС, используйте команду

bcdedit.exe /default {current}

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

bcdedit.exe /default [GUID]

В данном случае в конце должен содержаться GUID в виде набора букв и цифр. Помните, что GUID должен быть заключен в фигурные скобки ({}).

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

bcdedit.exe /displayorder {ntldr} {current}

В таком примере первой в списке будет отображаться устаревшая версия Windows, затем текущая, из-под которой вводилась эта команда. Вместо псевдонимов можно использовать и GUID систем.

Теперь разберем как создавать новые записи в загрузчике Windows при помощи утилиты bcdedit.exe. В общем виде команда создания новой записи выглядит так:

bcdedit.exe /create [{<ID>}] /d <описание> [/application <тип_приложения> |/inherit [<тип_приложения>] | /inherit DEVICE | /device]

разберем синтаксис команды подробнее.

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

описание — то, как новая запись загрузки будет отображаться в списке;

application — указание на то, что новая запись является записью приложения, в данном случае тип_приложения может принимать один из следующих вариантов: BOOTSECTOR, OSLOADER, RESUME, STARTUP.

inherit — указание на то, что новая запись является наследуемой записью. тип_приложения может принимать одно из следующих значений: BOOTMGRBOOTSECTORFWBOOTMGRMEMDIAGNTLDROSLOADERRESUME. Если тип_приложения не указан, то новая запись может наследоваться от любой записи.

inherit DEVICE — указание на то, что новая запись является наследуемой и может быть унаследована только записью параметров устройства.

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

Добавить новую запись загрузки ОС семейства Windows NT данной командой довольно просто. Мы уже знакомы с псевдонимом ntldr, поэтому сгенерировать нужную команду не составит труда.

Прежде чем приступать к созданию новой записи, нам нужно скопировать файлы ntldr, boot.ini, ntdetect.con, bootfont.bin из раздела со старой ОС на тот раздел, где лежит загрузчик Windows. Им может быть как раздел, куда установлена свежая версия Windows, так и отдельный скрытый раздел, который может не отображаться в проводнике, но отображаться в консоли Управление дисками. Такой раздел будет носить описание Зарезервировано системой (System reserved).

BCDEDIT: редактирование загрузчика Windows

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

BCDEDIT: редактирование загрузчика Windows

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

BCDEDIT: редактирование загрузчика Windows

После копирования файлов создаем новую запись загрузки:

bcdedit.exe /create {ntldr} /d "Загрузчик ОС Windows NT"

Создаем параметры передачи загрузчику Windows NT:

bcdedit.exe /set device partition=x:

x в данном случае это имя раздела, где лежит загрузчик Windows NT. Если раздел является скрытым и не имеет буквы, то его нужно указать в том виде, в котором он отображается в текущей конфигурации ОС, например:

bcdedit.exe /set device partition=\Device\HarddiskVolume2

Далее требуется указать путь к загрузчику ntldr:

bcdedit.exe /set {ntldr} path \ntldr

И добавить этот пункт в конец списка загрузки:

bcdedit.exe /displayorder {ntldr} /addlast

Но и это еще не всё. Ведь нам надо убедиться, что загрузчик ntldr находит ОС. Если что-то идет не так, то первым делом убедитесь, что в файле boot.ini прописаны верные пути к ядру Windows NT. Например, если речь идет о первом разделе второго жесткого диска, то путь будет выглядеть так:

multi(0)disk(0)rdisk(1)partition(1)\WINDOWS=»ОС семейства Windows NT» /fastdetect

Помните, что нумерация дисков в загрузчике ntldr начинается с нуля, а разделов с единицы.

Разберем синтаксис команды удаления записи загрузки.

bcdedit.exe [/store <файл_хранилища>] /delete {<ID>} [/f] [/cleanup | /nocleanup]

файл_хранилища — указание на используемое хранилище. Если параметр не задан явно, используется хранилище текущей ОС;

ID — идентификатор записи, которую требуется удалить. В качестве идентификатора может быть использован GUID или псевдоним;

f — параметр удаления указанной записи. Без этого параметра утилита bcdedit.exe не удаляет записи, имеющие известные псевдоним;

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

nocleanup — удаление записи загрузки без удаления из списка загрузки.

Например, загрузчик ОС семейства Windows NT имеет известный нам псевдоним ntldr, а потому запись загрузки не удалится без параметра f. Пример удаления:

bcdedit.exe /delete {ntldr} /f

Если у записи нет псевдонима, а только GUID, то достаточно указать его в фигурных скобках и не дописывать параметр f.

На самом деле, возможности нынешнего загрузчика Windows довольно обширны, чтобы описать их в одной статье. «За кадром» остались такие вопросы как создание специфических конфигураций загрузки или, например, добавление в меню загрузки пункта загрузки иной ОС (в первую очередь речь о Linux). К данным темам нам обязательно придется вернуться в дальнейшем. Ну а дотошный читатель всегда может изучить справку к утилите bcdedit.exe самостоятельно.

Комментарии: 10 к “BCDEDIT: редактирование загрузчика Windows”

      1. Я ввожу команду bcdedit.exe /set device partition=с пишет что произошла ошибка при задании данных элемента

  1. Уважаемый автор! Помогите разобраться! Прочитал статью Windows на RAM-диске Произвёл все установки но не могу понять это:
    «Скопируйте в папку boot на вашем VHD из папки VHD_BCD файл ENUM.cmd и
    для 32-битной системы файл WIN32.cmd
    для 64-битной системы файл WIN64.cmd.
    В папке boot перетащите файл BCD на файл WIN32.cmd (WIN64.cmd).
    У меня система windows 7-64 в ней установлен vhd с windows 7-32
    Где находится папка VHD_BCD файл ENUM.cmd и
    для 32-битной системы файл WIN32.cmd ? Заранее благодарен С уважением, Владимир

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

    1. Если Вы полностью клонировали системный раздел, то должен был клонироваться и загрузчик. Теперь у вас два идентичных раздела: старый (полагаю, на HDD) и новый (на SSD). В BIOS приоритет на загрузку отдан, скорее всего, жесткому диску. Укажите в BIOS как загрузочное устройство SSD-диск. Если загрузка проходит успешно, то дополнительных действий и не требуется.

  3. Подскажите плз.
    не загружается вин 8 с внешнего USB диска
    Биос обычный, режим Legacy.
    Приоритет загрузки с USB.Загрузка с USB-
    неудачная (собирает данные об ошибке). Перезагружаю,
    открывается меню с возможность выбора Вин 8.1 и Вин 8.1 про.
    Вин 8.1 про ( находится на внешнем диске USB, перенесенная Acronis True Image,
    ОС 8.1. с HDD) не загружается.
    При выборе вин 8.1. (на внутреннем HDD) загружается, загрузкой управляет
    раздел(partition) F внешнего диска.
    bcdedit показывает две винды 8.1 ( на С) и
    Вин 8.1 про( на J)
    Что нужно предпринять чтобы загрузка происходила с внешнего USB?

  4. А что нельзя разве просто команду bcdboot C:\Windows использовать? (где С — буква раздела, который надо добавить). Она как раз добавляет винду в загрузчик…

Добавить комментарий

Ваш адрес email не будет опубликован.