29

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

Фон

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

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

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

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

  • Windows 7: \\PhysicalDisk0 (раздел 0 3)
  • 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 apptype | /наследовать [ тип приложения ] | /наследовать УСТРОЙСТВО | /устройство ]

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

>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 не установлен общеизвестный идентификатор, этот параметр используется для указания новой загрузочной записи в качестве дополнительной записи параметров устройства.

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

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

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

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

Бонус Чтение

Сноски

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

7 ответов7

16

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

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

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

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

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

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

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

В 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.

9

Когда я отформатировал диск 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

5

Некоторые замечания по поводу критики в оригинальном вопросе об использовании той же терминологии в 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 в целом хороша или плоха, это другая тема.

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

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

3

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

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

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

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

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

bcdedit /displayorder {ntldr} /addlast

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

Примечание . Команда /create используется для добавления операционной системы не-Microsoft в запись загрузчика.

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


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

Из википедии

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

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


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

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

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

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

2

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

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

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

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

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

1

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

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

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

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

Вы можете перечислить эти разделы с помощью следующей команды ("all" является необязательным, но без него вы не увидите полный список): 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 найдет это устройство - буква для удобства и никогда не сохраняется.

-1
bcdedit
bcdboot
bcdedit /create

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

  1. bcdboot e:\windows
  2. bcdboot c:\windows

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .