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

Ian*_*oyd 36 bcd bcdedit

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

背景

我最近将 Windows 8 安装到单独的硬盘驱动器1 上。现在安装了 Windows 8,我想双引导回到 Windows 7。

我有我的两个2硬盘:

Windows 分区管理器屏幕截图

所以你可以看到我有两个磁盘,分区包含 Windows:

  • Windows 7 : \\PhysicalDisk0(分区 0 3 )
  • Windows 8 :(第\\PhysicalDisk21 部分)

我想弄清楚如何使用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
Run Code Online (Sandbox Code Playgroud)

我找不到有关Windows Boot ManagerWindows Boot Loader之间区别的任何文档

文档

有一些关于 的文档Bcdedit

但是他们没有解释如何编辑二进制启动配置数据。

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

如果是这种情况,我需要创建一个新的Windows 引导加载程序条目。

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

/创建

创建一个新的引导条目:

BCDEDIT [/存储 文件名] /创建[ ID ] / d 描述[/应用 的AppType | /继承[的AppType ] | /继承设备| /设备]

所以我假设一个语法:

>bcdedit /create /d "The old Windows 7" /application osloader
Run Code Online (Sandbox Code Playgroud)

whereapplication可以是以下类型之一:

Apptype     Description
BOOTSECTOR  The boot sector application
OSLOADER    The Windows boot loader
RESUME      A resume application
Run Code Online (Sandbox Code Playgroud)

不幸的是,唯一的文档osloader“Windows 引导加载程序”。我看不出这如何区分一个硬盘上的Windows 8和另一个硬盘上的Windows 7

/create引导加载程序的另一个可能参数是

>bcdedit /create /D "Windows Vista" /device "The Quick Brown Fox"
Run Code Online (Sandbox Code Playgroud)

不幸的是,缺少以下文档/device

/设备

可选的。如果 id 未设置为众所周知的标识符,则用于将新引导条目指定为附加设备选项条目的选项。

由于我没有设置id为众所周知的标识符,因此我必须将/device设置为“用于将新引导条目指定为附加设备选项条目的选项”。我知道所有这些话;他们都是英文的。但我不知道它在说什么;那个顺序的那些词似乎是荒谬的。

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

当我通过玩 BCDEdit 来冲洗我的机器时,我发现没有任何内容特别有用。这个帖子就OK了,如果有更多的细节尤其是在/ set命令osdevice的,等等。所以一旦我得到了我的机器固定的,我介绍的解决方案和信息是这里...

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

奖励阅读

脚注

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

sna*_*yob 17

这不是对“背景”之前问题的直接回答,而是指向创建加载程序条目以引导两个(或更多)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 和启动环境作为一个整体!

试剂c - 安装/卸载恢复环境 (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 来创建/修复双引导系统的所有引导实体。

我认为很多网站甚至在 Microsoft.com 上都很好地描述了 Vista 及更高版本的启动过程。

笔记:

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


小智 14

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

假设您在C:\Windows

  1. bcdboot e:\windows
  2. bcdboot c:\windows
    当您重新启动时,您将看到 Windows 启动菜单,其中包含两个适用于 Windows 7 的条目。如果您选择启动到 C:\Windows 的条目,您可以使用以下命令重命名该分区的条目:
  3. bcdedit /set {current} description "Windows 7 (Partition 1)"
    这使得在启动时启动的操作系统成为启动菜单中的默认条目:
  4. bcdedit /default {current}
    这会将默认操作系统在启动时放在启动菜单中的第一项
  5. bcdedit /displayorder {default} /addfirst
    或者您可以在启动时将操作系统设为启动菜单中的第一项:
  6. bcdedit /dispalyorder {current} /addfirst
    现在重新启动并选择启动菜单中应标记为“Windows 7”的第二项。一旦启动到 E:\Windows 重命名启动时启动的操作系统:
  7. bcdedit /set {current} description "Windows 7 (Partition 2)"
    测试启动菜单是否正常工作并将 bcd 数据保存到没有安装操作系统的分区:
  8. bcdedit /export D:\Saved_BCD_Settings\SavedBCD
    如果您稍后搞砸了,您可以使用以下命令恢复 bcd 启动菜单:
  9. bcdedit /import D:\Saved_BCD_Settings\SavedBCD


Sti*_*lez 7

虽然旧,但我想补充答案,因为上面的几个答案包含不正确的信息。它们可能有效,但您当然不需要外部程序,甚至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
Run Code Online (Sandbox Code Playgroud)

类似地,为了便于识别设备,它将使用类似 的格式\Device\HarddiskVolume2,但如果分配了字母(“C:”),它将通过字母(“C:”)识别分区。

生成的列表/enum all以可选的固件引导管理器部分开头(如果您的主板具有 EFI)。它的简写名称是"{fwbootmgr}"。它控制初始 EFI 启动选择(是使用通常的 Windows 启动管理器还是特定设备)。通常,您可以忽略 {fwbootmgr}(如果存在)。

下面是“Windows 启动管理器”(标识符“{bootmgr}”)。这是您将要使用的一种。它包含基本菜单的配置或您在启动时获得的任何其他内容(如果 Windows 启动管理器正在运行并且它可以首先找到 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}.
Run Code Online (Sandbox Code Playgroud)

这将创建一个具有正确名称的独立条目,现在您需要告诉它要做什么。由于最近的操作系统几乎没有任何变化,您只需将设备和 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 会找到该设备——为了方便起见,它从未真正保存过。


sna*_*yob 6

关于在 Visual BCD 中使用与 Microsoft 用于 bcdedit 相同的术语的原始问题中的评论家的一些说明。

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 加载程序” - 我认为每个说英语的人都能理解/点击/确认这样的操作还是我错了?

BCD 中对象和元素的复杂性是很自然的,因为该概念涵盖了启动新旧 Windows 操作系统以及 Linux、Unix 等外国操作系统。此外,它是在各种设备上进行 MBR 启动和 EFI 启动的一般概念。

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

BCD 概念与 Vista 相同 - Windows 7/8 中仅定义了新元素。

我认为选择 BCD 的注册表结构是因为 Windows 已经实现了这个接口,而且它是一个可靠的事务接口,多年来被证明可以工作。如果 Windows 注册表概念一般是好的或坏的概念是另一个主题。

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

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


avi*_*irk 4

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

bcdedit /set {ntldr} 设备启动

它将识别其他操作系统的分区或以下命令

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

以下行通过将其添加到菜单来使该条目可启动

bcdedit /displayorder {ntldr} /addlast

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

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

有关这方面的更多信息,您可以阅读这篇源文章


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

来自维基百科

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

另请参阅technet


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

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

可视化 BCD 编辑器的下载页面。

尝试使用工具中的修复选项。