简洁版本

简洁版本

简洁版本

bcdedit在不同的 Windows 安装之间设置双重启动需要哪些命令? 5

长版本

我最近在单独的硬盘1上安装了 Windows 8。现在 Windows 8 已安装完毕,我想双启动回到 Windows 7。

我有两个硬盘

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 启动管理器Windows 启动加载程序

研究成果

有一些关于以下内容的文档Bcdedit

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

如果我不得不猜测,我认为Windows 启动管理器指示 BIOS 什么程序它应该运行。该程序将为用户提供一组启动选项。剩下的Windows 启动加载程序做一双特别的靴子选择,代表 Windows 的特定安装。

如果是这样的话,我需要创建一个新的Windows 启动加载程序入口。

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

/创造

创建一个新的启动项:

bcd 编辑[/店铺 文件名] /创造[ID] /d 描述[/应用 应用类型| /继承[应用类型] | /继承设备| /设备]

因此我假设语法为:

>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为众所周知的标识符,因此我必须设置/设备“用于将新启动项指定为附加设备选项项的选项”。我认识所有这些单词;它们都是英语。但我不知道它在说什么;这些单词的顺序似乎毫无意义。

所以我有点不知所措。我不想像微软的 Dan Stolts 在尝试使用 BCDEdit 时损坏了他的硬盘

当我使用 BCDEdit 弄坏我的机器时,我没有找到特别有用的内容。如果这篇文章有更多细节,尤其是关于 /set 命令 OSDevice 等,那就好了。所以,一旦我的机器修好了,我就记录了解决方案,信息如下这里...

我的意思是,如果微软员工甚至不知道如何使用 BCDEdit 来编辑他的 BCD,那么我还有什么机会呢?

额外阅读

脚注

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

答案1

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

没有引导、设备、对象、元素等等。

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

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

在实现过程中,我必须阅读有关 bcdedit 和 WMI BCD 提供程序接口(编程接口,可用于 C++、C#)的所有可用资源。Microsoft 的文档确实很差。

BCD 中有对象(加载器、设置、设备元素)。尽管存在依赖关系,但没有关于对象之间连接的文档。

Windows 7 中的 BCD 对象有超过 140 个(!)元素(属性)。我不知道某些元素的含义——根本没有文档。

Windows 8 中有一些新元素 - 我猜现在总数已经接近 180 个了 (!!)。没有文档。

另一方面,有两个非常强大的实用程序可用于操作 BCD:bcdboot 和 agentc。

启动- 创建/修复默认加载器以及 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(主引导记录和分区引导记录)的实用程序 - 现在是 Windows 8 中的标准(以前仅在 WinRE 中可用)。

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

我认为 Vista 及更高版本的启动过程在许多互联网站点(甚至在 Microsoft.com 上)上都有很好的描述。

笔记:

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

答案2

当我格式化C:驱动器以重新安装 Windows 时,主引导记录被删除,Windows 7 安装程序无法恢复它。我可以使用 GUIbcdedit工具(如 Visual BCD Edit 工具),但为什么我必须安装某些东西,而一个简单的命令就可以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 /displayorder {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

答案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 启动管理器”(标识符“{启动管理器}”)。这是您将要使用的。它包含基本菜单的配置或启动时获得的其他任何内容(如果 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}.

这将创建一个具有正确名称的独立条目,现在您需要告诉它要做什么。由于最近的操作系统几乎没有任何变化,您只需将设备和操作系统设备设置为您的 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 的输出包含它们也是安全的。

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

答案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 NT 启动过程开始,Windows 引导加载程序是 Windows 操作系统的一部分,负责查找 Microsoft Windows 并启动它。在 IA-32 或 x64 系统上,引导加载程序称为 Windows 引导管理器 (BOOTMGR)。然而,在 Windows Vista 之前,引导加载程序是 NTLDR。

另请参阅技术网


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

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

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

尝试该工具中的修复选项。

相关内容