如何使用BCDEdit进行双启动Windows安装?


29

bcdedit在不同的Windows安装之间设置双启动所需的命令是什么?

背景

我最近将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 ManagerWindows Boot Loader之间差异的任何文档

文档

有一些文档Bcdedit

但他们没有解释如何编辑二进制引导配置数据。

如果我不得不猜测,我认为Windows启动管理器会指示BIOS 应该运行哪个程序。该程序将为用户提供一组启动选项。这使得Windows Boot Loader成为特定的启动选择,代表Windows的特定安装。

如果是这种情况,我需要创建一个新的Windows Boot Loader条目。

这意味着我可能想要使用/create参数:

/创造

创建一个新的启动项:

bcdedit [/ store filename ] / create [ id ] / d description [/ application apptype | / inherit [ 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设置为“用于指定新引导条目的选项作为附加设备选项条目”。我知道所有这些话; 他们都是英国人。但我不知道它在说什么; 按顺序排列的那些词似乎是荒谬的。

所以我有点受阻。我不想像微软的Dan Stolts那样摧毁了他试图使用BCDEdit的硬盘

当我通过玩BCDEdit来给我的机器冲洗时,我发现没有特别有用的内容。如果有特别的/ set命令osdevice的,等等。所以一旦我得到了我的机器固定的,我介绍的解决方案和信息更加详细的这篇文章就OK了这里...

我的意思是,如果一个微软的家伙甚至无法弄清楚如何使用BCDEdit来编辑他的BCD,那么我有什么机会呢?

奖金阅读

脚注

  • 1由于Windows 8安装程序会损坏我的Windows 7安装,因此我决定在安装过程中拔下我的“主”硬盘驱动器。对于Windows 8安装程序未检测到现有Windows 7安装的原因,这是一个冗长的解释。通常,安装程序会自动为双启动创建所需的条目。不是我问这个问题的原因很重要。
  • 2真的有三个驱动器,但第三个只是大容量存储。第三个硬盘的存在与问题无关。我只提到它,以防有人想知道为什么屏幕截图有3个硬盘,当我只提两个。
  • 3我随意开始在“零”处编号分区; 不要暗示分区从零开始编号。我只提到分区,因为我不知道任何启动加载器如何在不知道哪个分区以及Windows安装位于哪个文件夹的情况下完成其工作。
  • 4我在问BCDEdit。我试过Visual BCD Editor。它似乎是一个视觉 BCD编辑器。也就是说它是一个GUI,但仍然使用与BCDEdit相同的术语,并且需要BCD不记录的相同知识。
  • 5为简单起见,我们假设我想要在Windows Vista之间进行双启动的所有Windows安装都是Windows Vista或更高版本,这使得它们与BCDEdit和二进制引导加载程序兼容。替代方案需要深入研究旧的复杂性ntloader。我也不问双启动到Linux; 或如何启动虚拟硬盘驱动器(vhd)映像。只是现有版本的Windows在同一台机器上的现有硬盘驱动器上。

Answers:


16

这不是“背景”之前的问题的直接答案,而是指向用于创建用于启动两个(以及更多)Windows Vista和更高版本操作系统的加载程序条目的替代解决方案。 请参阅下面的第二个答案,关于Visual BCD中使用的术语评论。

没有guids,设备,对象,元素和等等,等等,等等。

我的背景(如果不感兴趣,请跳过并转到下面的解决方案):

我已经实现了Visual BCD编辑器。

在实现过程中,我必须阅读bcdedit和WMI BCD Provider接口上的所有可用源代码(编程接口,可以与C ++,C#一起使用)。微软的文档非常糟糕。

在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启动顺序中的第一个磁盘!)

最后但并非最不重要的是,有用于编写MBR和PBR(主和分区引导记录)的bootsect实用程序 - 现在是Windows 8中的标准(仅在WinRE中可用)。

因此,仅使用bootsect和bcdboot可以创建/修复双引导系统的所有引导实体。

我认为Vista和更高版本的启动过程在许多互联网网站上都有很好的描述,甚至在Microsoft.com上也是如此。

注意:

有关Windows BCD的最佳网站之一是Geoff Chappell的网站 - 其中有比Microsoft.com更详细的信息。感兴趣的用户可以在那里找到非常有用的信息和关于bcdedit文档的一些重要说明。


9

当我格式化我的C:驱动器以重新安装Windows时,主引导记录被删除,Windows 7安装程序无法恢复它。我可以使用像GUI BCD编辑工具这样的GUI bcdedit工具,但是为什么在bcdedit consol程序中应该有一个简单的命令可以完成这项工作时我必须安装一些东西?经过大量搜索在线帮助文​​件后,我放弃了bcdedit,发现这里的答案埋没在离题中。要为第二个分区创建引导条目,必须使用bcdboot

假设你在C:\ Windows:

1. bcdboot e:\ windows

2. bcdboot c:\ windows

重新启动时,将显示Windows启动菜单,其中包含两个Windows 7条目。如果选择引导至C:\ Windows的条目,则可以使用以下命令重命名此分区的条目:

bcdedit / set {current} description“Windows 7(分区1)”

这使得启动时启动的操作系统成为启动菜单中的默认条目:

bcdedit / default {current}

这会将默认操作系统置于启动菜单中启动的第一项

bcdedit / displayorder {default} / addfirst

或者您可以在启动时使操作系统成为启动菜单中的第一项:

bcdedit / dispalyorder {current} / 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


我的Motorcycleboy你只是在几个月前重复我的回答。-1。
snayob 2013年

@snayob,我重视你的答案(+1),但在创建引导后,Motorcycleboy会更详细地介绍命令。现在,一些在这整个的讨论缺少的是什么等效命令bcdeditbcdboot e:\windows(看到这里的问题)
达沃尔约西波维奇

我认为没有相当于“bcdboot e:\ windows”的bcdedit命令,因为bcdboot会复制并修复整个启动环境(bootmgr + \ boot文件夹+修复BCD +为指定的操作系统添加一个条目)
snayob

{current}不起作用。
东方

5

关于在微软用于bcdedit的Visual BCD中使用相同术语的原始问题中的批评者的一些注释。

BCD概念由Microsoft开发。它有自己的术语。我认为我不能改变它。我只能扩展它。

Microsoft提供了两种访问/编辑BCD的方法:

  1. 使用bcdedit.exe - 命令行界面
  2. BCD WMI Provider接口 - 编程接口

两个接口都讨论BCD对象和元素。这是在编程/计算机中使用的一般概念,与在其他人类领域中一样。我们甚至可以使用哲学,它使用对象,属性和关系的术语来描述世界和宇宙。

BCD WMI提供程序访问更加灵活,因为它使程序员可以访问BCD中的每个对象和元素并自由地对其进行操作。

Visual BCD充分利用BCD WMI Provider Interface,并使用与使用regedit.exe访问Windows注册表相同的方式实现访问。此外,该工具可自动执行两项主要任务 - 创建加载程序和双启动修复没有其他工具提供这样的一键自动功能。我想说这是新的术语和新的抽象层次。我不会改变微软创建的基础,我只能建立它。

新手用户只需单击一个按钮即可执行复杂的操作!不需要背景! 您甚至不必知道已安装了多少个Windows版本 - 该工具会尝试查找所有这些版本,然后如果BCD中尚未存在相应的加载器,则为它们创建加载器 - 使用的术语 - “创建缺少的Windows加载器” - I认为每个说英语的人都能理解/点击/确认这样的操作,还是我错了?

BCD中对象和元素的复杂性是很自然的,因为这个概念包括引导较新的和较旧的Windows操作系统以及Linux,Unix等国外的操作系统。此外,它是在各种设备上进行MBR引导和EFI引导的一般概念。

BCD最复杂的部分是设备概念。你有分区设备,ramdisk设备,文件设备,定位设备 - 你必须花一些时间了解它,我不认为这是为普通的Windows用户。论坛充满了关于磁盘分区的问题,这是一个远不那么复杂的话题。例如,许多Windows用户甚至不知道主分区和逻辑分区之间的区别。如果要进行双/多启动,则必须了解分区。如果你想建造第二套房子,你必须购买土地。

自Vista以来,BCD概念是相同的 - 在Windows 7/8中只定义了新元素。

我认为BCD的注册表结构已经被选中,因为Windows已经实现了这个接口,它是一个可靠的事务接口,经过多年的验证。如果Windows注册表概念一般是好的或坏的概念是另一个话题。

程序员/开发人员可以创建更友好的用户界面。我开始提供相同的界面 - 一个相当于bcdedit的GUI - 稍后可以根据使用模式在更高级别上抽象界面。已经实施了BCD的结构化视图。这是基础抽象层。

下一级抽象将集中于对象之间的关系,因为Microsoft未涵盖此主题。这不是一件容易的事。新术语带有抽象。


我知道BCD包含一个非常强大的系统,有很多复杂的选项。另一方面,我认为我有一个非常简单的问题,很多人多年来一直在问这个问题 - 但从来没有得到解决。“我Windows在这里,另一个Windows在那里。我如何在他们之间启动?”。我没有关于BCDEdit所有选项的完整教程,而是希望能够解决这个(看似简单)问题的命令。也许几乎一样简单msconfig,除了它让你浏览到另一个Windows安装,它会为你添加它。
伊恩·博伊德

我必须说,你的工具比EasyBCD强大得多。
Milind R 2014年

3

您需要一个BCDEdit /set命令来配置启动卷。然后通过调用该BCDEdit /displayorder命令将该条目添加到Windows Boot Manager操作系统菜单。

bcdedit / set {ntldr}设备启动

它还将识别其他OS的分区或以下命令

bcdedit / set {ntldr}设备分区= C:

以下行通过将其添加到菜单使该条目可引导

bcdedit / displayorder {ntldr} / addlast

您可以通过运行命令bcdedit /enum ACTIVE并查找Windows Legacy OS Loader条目来验证新条目是否将出现在引导菜单上。

注意/create命令用于将非Microsoft OS添加到引导加载程序条目。

有关此内容的更多信息,请阅读此源文章


关于“ Windows启动加载程序和启动管理器之间的区别 ”的问题

来自维基百科

Windows NT启动过程在计算机找到Windows启动加载程序时启动,Windows启动加载程序是Windows操作系统的一部分,负责查找Microsoft Windows并启动它。在IA-32或x64系统上,引导加载程序称为Windows引导管理器(BOOTMGR)。然而,在Windows Vista之前,引导加载程序是NTLDR。

另见technet


Visual BCD Editor是Windows bcdedit实用程序的高级GUI版本。

它是第一个实现Windows 7 / Vista引导配置数据(BCD)存储的完整编辑的GUI工具。

可视BCD编辑器的下载页面

尝试修复工具中的选项。


关于Windows启动管理器Windows启动管理器基本上是一个控制启动体验的小型操作系统,可让您选择要运行的启动应用程序。有各种启动应用程序(例如,Windows Boot Loader),每个应用程序都有不同的功能。例如,Windows Boot Loader应用程序加载Windows。[...]例如,如果在不同分区上安装了两个不同版本的Win7,则会看到两个Windows Boot Loader条目。(摘自此处
Davor Josipovic 2013年

3

虽然陈旧,但我想添加答案,因为上面的几个答案包含不正确的信息。他们可能会工作,但你当然不需要外部程序,甚至bcdboot不需要。供参考,正确的信息如下:

如果是新的快速BCD背景

BCD是Windows启动配置。它包含许多部分,每个部分由一个名称(称为“描述”)和一个看起来有点像这样的标识符标识:“{0743bb44-fda6-11e3-90c8-e3ee27f3aec6}”。

有几个“众所周知的标识符”,bcdedit将尽可能地使用它们(除非你使用/v (详细)选项/enum)。它们看起来像这样:“{bootmgr}”,“{memdiag}”。这些只是完整标识符的简写名称,但更容易使用。你可以使用其中之一。

可以列出与下面的命令(下称“所有”是可选的,但是没有它,你不会看到一个完整列表)以下部分:bcdedit /enum all

典型输出:

C:\Windows\system32>bcdedit /enum all

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启动管理器正在运行,它可以首先找到BCD)。

{bootmgr}下面是任意数量的“Windows Boot Loader”部分,可能还有其他部分,每个部分控制一个操作或引导选项。

使用bcdedit设置双启动(你不需要任何其他东西)

要进行双启动,请告诉bcdedit 您的第一个操作系统/copy的现有已知良好的Windows Boot Loader条目。

  • /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分区,它可能会工作。如果需要,请在正常启动Win7时查看/ enum的输出,并复制它似乎期望的条目。但通常只是暂时为你的第二个操作系统分配一个字母,比如“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的输出也包含它们,则是安全的。

要清楚,当“应该是C:”时,您不必担心新设备被识别为Q :(或其他任何东西)。bcdedit存储硬盘ID,而不是字母。这纯粹是接受并展示Q:乐于助人。如果设备有一个字母,它将默认显示该字母而不是设备ID,以方便您。您可以通过删除或分配来自DISKPART或DISKMGMT.MSC中的第二个操作系统的字母来查看此信息,/ enum的输出将立即恢复为\ Device。它实际上保存了正确的硬盘驱动器ID,当它用于启动时,Windows将找到该设备 - 该信件是为了方便而且从未实际保存过。


你是从哪里来{0743bb44-fda6-11e3-90c8-e3ee27f3aec6}的?您已经复制了{current} Windows Boot Loader ; 你正在复制的另一件事是什么?(不是我假设的Windows启动管理器
Ian Boyd

谢谢。我可以确认这个工作就像这个Windows 10版本1903(build 18362)。我有一个Windows 10 OS NTFS分区的映像我恢复到另一台机器上的分区,我从安装介质重新启动到Windows恢复并使用diskpart分配了驱动器号。然后将{default}的bcdedit /副本(WinRE中没有{current})和bcdedit / set of device和osdevice复制到新驱动器。在重新启动时,我被选择运行的操作系统,它重新启动旧图像就好了。它是Windows 10,无论硬件完全变化,都可以非常灵活地启动。
Marko Kohtala

2

回应作者在评论中重申的具体问题(虽然它与他关于bcdedit.exe完成相同的序列的最初问题不同):

也许几乎像msconfig一样简单,除了它允许你浏览到另一个Windows安装,它会为你添加它。

EasyBCD正是您所需要的(免费供个人使用)。它是适用于Windows的可视化双启动管理器工具,添加新的Windows条目只需点击即可完全按照您的描述进行操作

EasyBCD在线有很多资源,所以我不会在这里重复所有内容。基本上,EasyBCD bcdedit.exe通过自己的引导加载程序模块来弥补其复杂性并扩展它,以便您可以与其他(较新或较旧)版本的Windows以及Linux,BSD等设置双启动。

完全披露:我是EasyBCD的主要作者。


Mahmoud Al-Qudsi:你介意看看这个问题:superuser.com/questions/881363 / ...
Jamie Hanrahan 2015年

-1
bcdedit
bcdboot
bcdedit /create

这可以指向像.vhd文件这样的文件,但是作为分区diskpart创建并初始化和附加,或者即时安装并作为操作系统重新启动。操作系统可以隐藏在另一个分区中。另一个分区可以隐藏在其中的另一个分区和操作系统内。当你运行bcdedit指向另一个.vhd文件时,无论它位于何处。它加载。我的导师在课堂上展示了这一点,但未能或拒绝给出另一种解释bcdedit。但这可以隐藏和操作功能齐全的操作系统。

  1. bcdboot e:\windows
  2. bcdboot c:\windows
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.