Как использовать BCDEdit для двойной загрузки Windows?

Каковы bcdedit Команды, необходимые для настройки двойной загрузки между различными установками Windows?5

Фон

Я недавно установил Windows 8 на отдельный жесткий диск1. Теперь, когда установлена ​​Windows 8, я хочу выполнить двойную загрузку обратно в Windows 7.

У меня есть два2 жестких диска:

Скриншот менеджера разделов Windows

Итак, вы можете видеть, что у меня есть два моих диска с разделами, содержащими Windows:

  • Windows 7: \\PhysicalDisk0 (раздел 03)
  • Windows 8: \\PhysicalDisk2 (раздел 1)

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

Бег bcdedit Теперь он показывает текущую конфигурацию:

C:\WINDOWS\system32>bcdedit

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
integrityservices       Enable
default                 {current}
resumeobject            {ce153eb7-3786-11e2-87c0-e740e123299f}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 30

Windows Boot Loader
-------------------
identifier              {current}
device                  partition=C:
path                    \WINDOWS\system32\winload.exe
description             Windows 8
locale                  en-US
inherit                 {bootloadersettings}
recoverysequence        {ce153eb9-3786-11e2-87c0-e740e123299f}
integrityservices       Enable
recoveryenabled         Yes
allowedinmemorysettings 0x15000075
osdevice                partition=C:
systemroot              \WINDOWS
resumeobject            {ce153eb7-3786-11e2-87c0-e740e123299f}
nx                      OptIn
bootmenupolicy          Standard
hypervisorlaunchtype    Auto

Я не могу найти никакой документации о разнице между Windows Boot Manager и Windows Boot Loader.

Документация

Есть некоторая документация по Bcdedit:

Но они не объясняют, как редактировать двоичные данные конфигурации загрузки.

Если бы мне пришлось угадывать, я бы подумал, что диспетчер загрузки Windows указывает BIOS, какую программу он должен запускать. Эта программа предоставит пользователю набор вариантов загрузки. Таким образом, Windows Boot Loader будет определенным выбором при загрузке, который представляет собой конкретную установку Windows.

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

Это означает, что я мог бы использовать /create параметр:

/Создайте

Создает новую загрузочную запись:

bcdedit [/store filename] /create [id] /d description [/application app | /наследовать [тип приложения] | /наследовать УСТРОЙСТВО | /устройство]

Итак, я предполагаю синтаксис:

>bcdedit /create /d "The old Windows 7" /application osloader

куда applicationможет быть одним из следующих типов:

Apptype     Description
BOOTSECTOR  The boot sector application
OSLOADER    The Windows boot loader
RESUME      A resume application

К сожалению, единственная документация оosloaderЭто"загрузчик Windows". Я не понимаю, как это можно различить между Windows 8 на одном жестком диске и Windows 7 на другом.

Другой возможный параметр, когда/createзагрузчик есть

>bcdedit /create /D "Windows Vista" /device "The Quick Brown Fox"

К сожалению, документация отсутствует для/device:

/ устройство

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

Так как я не ставилidдля известного идентификатора я должен установить/device на "параметр, который используется для указания новой загрузочной записи в качестве дополнительной записи параметров устройства". Я знаю все эти слова; они все англичане. Но я понятия не имею, что он говорит; эти слова в таком порядке кажутся бессмысленными.

Так что я немного в тупике. Я не хочу быть похожим на Дэна Столтса из Microsoft, который уничтожил свои жесткие диски, пытаясь использовать BCDEdit:

Я не нашел никакого контента, который был бы особенно полезен, когда я использовал свою машину, играя с BCDEdit. Этот пост был бы в порядке, если бы было гораздо больше подробностей, особенно о команде /set OSDevice и т. Д. Поэтому, как только я исправил свой компьютер, я задокументировал решение, и информация здесь...

Я имею в виду, если парень из Microsoft не может даже понять, как использовать BCDEdit для редактирования своего BCD, то какой у меня шанс?

Бонус Чтение

Сноски

  • 1 Поскольку установщик Windows 8 мог повредить мою установку Windows 7, я решил отключить мой"основной" жесткий диск во время установки. Это длинное объяснение того, почему установщик Windows 8 не обнаружил существующую установку Windows 7. Обычно установщик автоматически создает необходимые записи для двойной загрузки. Не то, чтобы причина, по которой я задаю вопрос, важна.
  • 2 На самом деле есть три диска, но третий - это просто хранилище. Наличие третьего жесткого диска не имеет отношения к вопросу. Я упоминаю об этом только в том случае, если кто-то хочет знать, почему на скриншоте 3 жестких диска, а я упоминаю только два.
  • 3 Я произвольно начал нумерацию разделов с "нуля"; не подразумевать, что разделы нумеруются начиная с нуля. Я упоминаю только разделы, потому что я не вижу, как какой-либо загрузчик мог бы выполнять свою работу, не зная, в каком разделе и в какой папке находится установка Windows.
  • 4 Я спрашиваю о BCDEdit. Я попробовал Visual BCD Editor. Кажется, это визуальный редактор BCD. То есть это графический интерфейс, но он использует ту же терминологию, что и BCDEdit, и требует тех же знаний, которые BCD не документирует.
  • 5 Для простоты предположим, что все установки Windows, между которыми я хочу выполнить двойную загрузку, - это Windows Vista или более поздняя версия, что делает их совместимыми с BCDEdit и двоичным загрузчиком. Альтернатива потребует углубления в тонкости старого ntloader, Я также не спрашиваю о двойной загрузке Linux; или как загрузить образ виртуального жесткого диска (VHD). Просто современные версии Windows на существующих жестких дисках на одной машине.

7 ответов

Это не прямой ответ на вопрос перед "Фоном", но указывает на альтернативное решение для создания загрузочных записей для загрузки двух (и более) ОС Windows Vista и более поздних версий. Пожалуйста, смотрите также мой второй ответ ниже о критике терминологии, используемой в Visual BCD.

Нет проводников, устройств, предметов, элементов и тому подобное.

Мой фон (пропустите, если не интересно, и перейдите к решению ниже):

Я реализовал Visual BCD Editor.

Во время процесса реализации мне пришлось читать все доступные источники по интерфейсу bcdedit и WCD BCD Provider (программный интерфейс, может использоваться с C++, C#). Документация от Microsoft действительно плохая.

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

В Windows 7 имеется более 140 (!) Элементов (свойств) объектов BCD. Я не знаю значения некоторых элементов - документации просто нет.

В Windows 8 появились новые элементы - я думаю, общее количество сейчас приближается к 180 (!!). Нет документации.

С другой стороны, есть две очень мощные утилиты для управления BCD: bcdboot и reagentc.

bcdboot - создает / исправляет загрузчик по умолчанию, а также BCD и загрузочную среду в целом!

reagentc - устанавливает / удаляет среду восстановления (winre.wim)

Оба инструмента также не очень хорошо документированы.

Альтернативное решение:

Практически нет необходимости в bcdedit, так как с помощью только bcdboot вы можете создавать загрузчики для Windows Vista и более поздних ОС Windows - вы создаете загрузчик для самой ранней ОС, чем для самой последней, и вуаля вы создали среду загрузки для двойной / мультизагрузочной системы:

Предполагая, что вы находитесь в Windows 8:

1. bcdboot f: \ windows (это соответствует Windows 7, как на картинке)

2. bcdboot c: \ windows (это сопоставляется с Windows 8)

Готово!

Базовое правило Microsoft для процесса загрузки: среда загрузки (и BCD) всегда должна быть на [первый диск + активный раздел]. (на рисунке - Диск 2 => Первый диск в последовательности загрузки BIOS!)

Наконец, что не менее важно, есть утилита bootsect для записи MBR и PBR (основной записи и загрузочной записи раздела) - теперь стандартная в Windows 8 (ранее была доступна только в WinRE).

Таким образом, используя только bootsect и bcdboot, можно создать / исправить все загрузочные сущности для системы с двойной загрузкой.

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

Замечания:

Одним из лучших сайтов о Windows BCD является сайт Джеффа Чаппелла - там более подробная информация, чем на сайте Microsoft.com. Заинтересованные пользователи могут найти там довольно полезную информацию и некоторые критические замечания по документации bcdedit.

Когда я отформатировал диск C: для переустановки Windows, основная загрузочная запись была удалена, и установщик Windows 7 не смог ее восстановить. Я мог бы использовать инструмент bcdedit с графическим интерфейсом, такой как Visual BCD Edit, но зачем мне что-то устанавливать, когда в консольной программе bcdedit должна быть простая команда, которая может выполнить эту работу? После долгих поисков в файлах онлайн-справки я отказался от bcdedit и нашел здесь ответ, утопающий в отступлениях. Чтобы создать загрузочную запись для второго раздела, вы должны использовать bcdboot

Предполагая, что вы находитесь в C:\Windows:

1. bcdboot e: \ windows

2. bcdboot c: \ windows

После перезагрузки вам будет представлено меню загрузки Windows с двумя записями для Windows 7. Если вы выберете запись, которая загружается в C:\Windows, вы можете переименовать запись для этого раздела с помощью:

bcdedit / set {current} description "Windows 7 (Partition 1)"

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

bcdedit / default {current}

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

bcdedit /displayorder {по умолчанию} /addfirst

Или вы можете сделать ОС при запуске первым пунктом в меню загрузки:

bcdedit / dispalyorder {текущий} /addfirst

Теперь перезагрузите компьютер и выберите второй пункт в меню загрузки, который должен быть помечен как "Windows 7". После загрузки в E:\Windows переименуйте ОС, загруженную при запуске:

bcdedit / set {current} description "Windows 7 (Partition 2)"

Проверьте, что загрузочное меню работает нормально, и сохраните данные bcd в раздел, на котором не установлена ​​ОС:

bcdedit / export D: \ Saved_BCD_Settings \ SavedBCD

Если вы запутались позже, вы можете восстановить загрузочное меню bcd:

bcdedit / import D: \ Saved_BCD_Settings \ SavedBCD

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

Быстрый BCD фон, если он новый

BCD - это загрузочная конфигурация Windows. Он содержит множество разделов, каждый из которых идентифицируется именем (называемым "описанием") и идентификатором, который выглядит примерно так: "{0743bb44-fda6-11e3-90c8-e3ee27f3aec6}".

Существует несколько "общеизвестных идентификаторов", и bcdedit будет полезно использовать их, где это возможно, (если только вы не используете /v (подробный) вариант с /enum). Они выглядят так: "{bootmgr}", "{memdiag}". Это просто сокращенные имена для полных идентификаторов, но с ними проще работать. Вы можете использовать либо.

Вы можете перечислить эти разделы с помощью следующей команды ("все" является необязательным, но без него вы не увидите полный список): bcdedit /enum all,

Типичный вывод:

C:\Windows\system32>bcdedit /enum

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume1
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
default                 {current}
resumeobject            {92b1a1b0-c023-11e3-b3f1-ec4d94108574}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 30

Windows Boot Loader
-------------------
identifier              {current}
device                  partition=C:
path                    \Windows\system32\winload.exe
description             Windows 7
locale                  en-US
inherit                 {bootloadersettings}
recoverysequence        {92b1a1b2-c023-11e3-b3f1-ec4d94108574}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              \Windows
resumeobject            {92b1a1b0-c023-11e3-b3f1-ec4d94108574}
nx                      OptIn

Точно так же для простоты, когда он идентифицирует устройства, он будет использовать такой формат, как \Device\HarddiskVolume2, но распознает раздел по его букве ("C:"), если он назначен.

Список составлен /enum all начинается с дополнительного раздела менеджера загрузки прошивки (если на вашей материнской плате установлен EFI). Его сокращенное имя "{fwbootmgr}". Он управляет первоначальным выбором загрузки EFI (будь то использование обычного менеджера загрузки Windows или определенных устройств). Как правило, вы можете игнорировать {fwbootmgr}, если присутствует.

Ниже это "Диспетчер загрузки Windows" (идентификатор "{bootmgr}"). Это тот, с которым вы будете работать. Он содержит конфигурацию для основного меню или чего-либо еще, что вы получаете при запуске (если Windows Boot Manager работает, и он может найти BCD в первую очередь).

Ниже {bootmgr} указано любое количество разделов "Загрузчик Windows" и, возможно, других разделов, каждый из которых управляет одним действием или параметром загрузки.

Настройка двойной загрузки с использованием bcdedit (больше ничего не нужно)

Для двойной загрузки вы говорите bcdedit /copy существующая известная хорошая запись загрузчика Windows для вашей первой ОС.

  • /copy скопировать существующую запись
  • {current} является идентификатором записи, которую вы хотите скопировать. Это ярлык для текущего загрузочного элемента. Если вы не хотите использовать двойную загрузку, используйте правильный идентификатор для того, который вам нужен. Текст описания для каждой записи поможет найти тот, который вы хотите.
  • /d "Description for copied entry будет описание нового элемента

Он создаст копию этой записи, даст ей указанное описание и ответит новым идентификатором, который дал копию:

bcdedit /copy {current} /d "Copy of my current Windows Boot Loader"

The entry was successfully copied to {5599a3fc-e4ee-11e7-a5f3-c86000d0b92a}.

Это создает независимую запись с правильным именем, теперь вам нужно указать, что делать. Поскольку в последних операционных системах почти ничего не изменилось, вы можете просто установить устройство и osdevice в свой раздел Win7, и это, вероятно, будет работать. Если необходимо, посмотрите на вывод /enum при обычной загрузке Win7 и скопируйте записи, которые, как ожидается, ожидаются. Но обычно достаточно временно назначить букву вашей второй ОС, например, "Q", а затем введите команду: bcdedit /set {NEW_IDENTIFIER} device partition=Q: или что-то, и то же самое для osdevice, bcdedit отсортирует буквы дисков, см. ниже. Вы можете удалить букву временного диска после ее использования в bcd.

Затем добавьте его в список записей в {bootmgr}, используя bcdedit /displayorder {NEW_ID} /addlastи, что крайне важно, скажите bcd отображать меню загрузки, используя bcdedit /set {bootmgr} displaybootmenu Yes,

Готово.

Обратите внимание - в BCD безопасно использовать "нечетные" или "неправильные" буквы дисков, и это безопасно, если вывод /enum также содержит их.

Чтобы было ясно, вам не нужно беспокоиться о том, что ваше новое устройство будет идентифицировано как Q: (или как оно там), когда оно "должно быть C:". bcdedit хранит идентификатор жесткого диска, а не букву. Это просто принятие и отображение Q: чтобы быть полезным. Если устройство имеет букву, оно будет показывать букву по умолчанию вместо идентификатора устройства, для вашего удобства. Это можно увидеть, удалив или назначив букву из 2-й ОС в DISKPART или DISKMGMT.MSC, и вместо этого вывод /enum немедленно вернется в \Device. На самом деле он сохранил правильный идентификатор жесткого диска, и когда он используется для загрузки, Windows найдет это устройство - буква для удобства и никогда не сохраняется.

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

Концепция BCD разработана Microsoft. Это идет со своей собственной терминологией. Я не думаю, что смогу это изменить. Я могу только продлить это.

Microsoft предоставила два способа доступа / редактирования BCD:

  1. используя bcdedit.exe - интерфейс командной строки
  2. Интерфейс BCD WMI Provider - программный интерфейс

Оба интерфейса говорят об объектах и ​​элементах BCD. Это общая концепция, используемая также в программировании / компьютерах, как и в других областях. Мы могли бы пойти даже к философии, которая использует терминологию объектов, свойств и отношений для описания мира и вселенной.

Доступ поставщика BCD WMI более гибкий, поскольку он дает программисту возможность получить доступ к каждому объекту и элементу в BCD и свободно работать с ними.

Visual BCD полностью использует интерфейс поставщика BCD WMI и реализует доступ так же, как мы используем для доступа к реестру Windows с помощью regedit.exe. Более того, инструмент автоматизирует две основные задачи - создание загрузчиков и восстановление двойной загрузки. Никакой другой инструмент не предлагает такую ​​автоматическую функциональность в один клик. Я бы сказал, что это новая терминология и новый уровень абстракции. Я бы не стал менять базу, созданную Microsoft, я могу только опираться на нее.

Начинающие пользователи просто нажимают кнопку, и выполняется сложная операция! Нет фона не требуется! Вам даже не нужно знать, сколько версий Windows вы установили - инструмент пытается найти их все, а затем создать загрузчики для них, если соответствующие загрузчики еще не представлены в BCD - используемая терминология - "Создать отсутствующие загрузчики Windows" - I думаю, что все говорящие по-английски могут понять / щелкнуть / подтвердить такую ​​операцию, или я ошибаюсь?

Сложность объектов и элементов в BCD естественна, так как эта концепция охватывает загрузку более новых и старых ОС Windows, а также иностранных ОС, таких как Linux, Unix и т. Д. Кроме того, это общая концепция для загрузки MBR и загрузки EFI на различных устройствах.

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

Концепция BCD та же, что и в Vista - в Windows 7/8 определены только новые элементы.

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

Программист / разработчик должен создать более удобный интерфейс. Я начал с предоставления того же интерфейса - графического интерфейса, эквивалентного bcdedit, - позже интерфейс можно абстрагировать на более высоком уровне в зависимости от моделей использования. Структурированное представление BCD уже реализовано. Это базовый уровень абстракции.

Следующим уровнем абстракции будет концентрация на отношениях между объектами, поскольку эта тема не рассматривается Microsoft. Задача не из легких. Новая терминология приходит с абстракцией.

Тебе необходимо BCDEdit /set Команда для настройки загрузочного тома. Затем добавьте запись в меню операционной системы Windows Boot Manager, вызвав BCDEdit /displayorder команда.

bcdedit /set {ntldr} загрузка устройства

Он идентифицирует раздел другой ОС или следующую команду, а также

bcdedit /set {ntldr} раздел устройства =C:

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

bcdedit /displayorder {ntldr} /addlast

Вы можете убедиться, что новая запись появится в меню загрузки, выполнив команду bcdedit /enum ACTIVE и ищет запись загрузчика ОС Windows Legacy.

Примечание: /createКоманда используется для добавления ОС не из Microsoft в запись загрузчика.

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


Относительно вашего вопроса о "Разнице между загрузчиком Windows и менеджером загрузки"

Из википедии

Процесс запуска Windows NT начинается, когда компьютер находит загрузчик Windows, часть операционной системы Windows, которая отвечает за поиск Microsoft Windows и ее запуск. В системах IA-32 или x64 загрузчик называется Windows Boot Manager (BOOTMGR). До Windows Vista, однако, загрузчик был NTLDR.

Смотрите также на Technet.


Visual BCD Editor - это расширенная версия графического интерфейса утилиты Windows bcdedit.

Это первый инструмент с графическим интерфейсом, который реализует полное редактирование хранилища данных конфигурации загрузки Windows 7/Vista (BCD).

Страница загрузки для визуального редактора BCD.

Попробуйте исправить вариант в инструменте.

В ответ на конкретный вопрос автора, который повторяется в комментариях (хотя он и отличается от его первоначального вопроса о bcdedit.exe последовательности для достижения того же):

Возможно, что-то такое же простое, как msconfig, за исключением того, что оно позволяет вам перейти к другой установке Windows и добавит ее для вас.

EasyBCD - это именно то, что вы ищете (бесплатно для личного использования). Это визуальный инструмент менеджера двойной загрузки для Windows, и добавление новой записи для Windows производится по принципу "укажи и щелкни", в точности, как ты это описал.

В сети EasyBCD много ресурсов, поэтому я не буду здесь все повторять. В основном EasyBCD оборачивает сложность bcdedit.exe и расширяет его собственными модулями загрузчика, чтобы вы могли настроить двойную загрузку с другими (более новыми или более старыми) версиями Windows, а также с Linux, BSD и другими.

Полное раскрытие: я основной автор EasyBCD.

bcdedit
bcdboot
bcdedit /create

Это может быть указано на файл, подобный файлу.vhd, но созданный как раздел диска и инициализированный и прикрепленный, или смонтированный на лету и перезагруженный как ОС. ОС может быть скрыта внутри другого раздела. другой раздел может быть скрыт внутри другого раздела и ОС внутри него. когда ты бежишь bcdedit указывать на другой файл.vhd независимо от того, где он находится. Он загружается. Мой преподаватель показал это в классе, но не смог или отказался дать другие объяснения bcdedit, Но это работает, чтобы скрыть и управлять полностью функциональной ОС.

  1. bcdboot e:\windows
  2. bcdboot c:\windows
Другие вопросы по тегам