问题:Windows 10 克隆到同一磁盘/不同 SSD 无法启动。
为什么:我有一个具有以下结构的 M.2 NVMe:
- 300 MB 恢复分区
- 100 MB EFI 系统分区
- Windows 8.1
- 未分配空间
- Windows 10(克隆源)
我想将 Windows 10 安装扩展到左侧,据我所知,这只能通过克隆/重新安装来完成。
尝试:我启动了 Linux 闪存盘,并在同一驱动器中未分配的空间中对新分区进行了 dd 克隆。然后我使用 Windows 恢复模式为新分区创建了一个条目。
它无法启动,屏幕变黑。尝试 bootrec、bcdboot 复制、删除和重建所有内容均无效。我尝试删除指向源 Windows 10 的条目并重命名其 Windows 文件夹,以便只有克隆保留在启动中,但这也无济于事。
然后,我尝试将源克隆到另一个 SSD,并使用新的 EFI 分区仅指向新的 Windows 10 克隆,同时从 NVMe 中删除 EFI 分区,因此只有一个可能的 EFI 系统分区可以启动,但它仍然不起作用,这次出现蓝屏。
我知道此时我应该移除 NVMe,但这需要拆开整个计算机,因为它位于主板底部一个非常紧密的 mini-itx 机箱内。
值得庆幸的是,撤消 bcd 更改非常简单,因此原始 8.1 和 10 安装可以正常启动。
问题:我怀疑这是 Windows 到处蔓延并变得混乱的情况之一,阻止其自身修复任何问题或创建正确的条目,直到它失去对它不应该接触的安装的访问权限。
有没有办法让源 Windows 10 安装在恢复模式/克隆安装中不可见,而无需物理移除磁盘或删除分区?我只想在确定克隆有效后删除源。
更新 1
事实证明,克隆的 Windows 10 的问题与 bcd 无关,或者说不仅仅是 bcd 的问题。尝试以安全模式启动它,我只能进入登录屏幕(!!!)。然后事情变得很奇怪。
尝试登录时出现“未知硬错误“ 经过系统管理员工具。光标不停闪烁和旋转。Ctrl+Shift+Esc 调出任务管理器,从那里我可以打开 cmd、explorer 等。
查看事件查看器日志会发现无数“DCOM 在尝试启动服务时出现错误“1084”ShellHW检测使用参数“不可用”来运行服务器”错误,我怀疑这是光标闪烁的原因。
Sfc 和 dism /online 未发现需要修复的错误。chkdsk 也未发现需要修复的错误。
另一方面,正常启动会导致屏幕甚至不显示登录屏幕,对所有尝试的快捷方式(Crtl+Shift+Esc、Win+P、Win+L、Win+Ctrl+Shift+B、Crtl+Alt+Del)都没有反应,右键单击时不会显示上下文菜单,并且通常会吃掉光标(直到移动后才可见,并在第二次空闲后消失,根本没有旋转图标)。
附言:在使用 gparted 之前,我也尝试过在新分区中进行全新安装,然后在其上克隆源 Win 10。没有成功,并提示我这与 BCD 无关。
答案1
由于其注册表项指向旧分区,因此克隆无法正确启动。
距离我上次克隆 Windows(到不同的驱动器)已经过去好几年了,但如果我没记错的话,克隆的 Windows 能够在第一次启动时自行纠正。当你将系统克隆到另一个分区时,这种情况不会发生同一驱动器因为它仍然可以看到旧分区,包括原始字母和所有内容,所以克隆没有理由认为它无法访问这些文件,直到它无法访问并陷入错误循环。
了解正在发生的事情可以使这个问题很容易解决!
要在同一驱动器上获取可运行的 Windows 克隆,您需要:
- 装有 Ubuntu 的 USB 驱动器
- 一个可用的恢复环境 (RE) 分区或一个 USB 驱动器,其中包含使用 Windows Media Creation Tool 创建的 Windows 映像(首选)
如果需要的话,互联网上有很多关于如何准备这些 USB 的指南。
本指南涵盖 GPT/EFI 启动,示例案例有一个 Windows 8.1 安装和一个将被克隆的 Windows 10 安装。我从未见过有关克隆到同一驱动器的任何指南(它们都告诉您删除带有源的驱动器),因此到目前为止,此解决方案仅由一人(01)测试过,你好 _o/,因此请谨慎行事。
问题的具体解决方案位于本答案的末尾。
如何在双启动 EFI 系统中将 Windows 10 克隆到同一磁盘上的另一个分区
克隆系统的准备
(可选,但不是一个坏主意)在继续之前,请更新您的 Windows 并创建系统还原点。
(可选安全措施)检查注册表项备份
\Windows\System32\config\RegBack
。此文件夹应包含 5 个文件:DEFAULT、SAM、SECURITY、SOFTWARE 和 SYSTEM,但从 Windows 10 版本 1803 开始,此操作不再自动完成。检查此文章了解详情。如果它是空的或包含零字节的文件,则需要运行 Windows 任务或手动备份它们,方法是使用 RE 中的命令提示符或登录其他系统时复制它们。我只是趁机在登录其他系统时复制它们。
关闭休眠模式。复制时,您需要确保 Windows 10 克隆源完全关闭。
确保所有操作系统均能顺利启动。
(可选安全措施)开始之前备份 BCD 文件,因为在此过程中您的启动可能会被破坏。您可能会重建它们而不是使用备份,但有它们也无妨。每个 Windows 安装都会有自己的启动文件
\Windows\System32\Boot
。磁盘上的隐藏 EFI 分区中还包含实际的启动文件。它通常为 100 MB,将被识别为“EFI 系统分区“。您需要使用 RE/不使用相同启动的其他系统的提升命令提示符来执行此操作。
首先,您将使用磁盘部分分配一个字母。指南中解释了如何进一步操作。然后您将使用xcopy
:
xcopy S:\ D:\EFI_Boot_BK /s /e
S:\
EFI 分区在哪里以及D:\EFI_Boot_BK
备份目标在哪里。
克隆 Windows 10 系统
在 Ubuntu 中克隆
- 从 Ubuntu USB 驱动器启动并选择“尝试 Ubuntu”。
- 打开
Gparted
。导航到包含克隆源的驱动器,格式化将放置克隆的新分区(如果尚未格式化),并记下包含克隆源和目标的分区的名称。 - 打开一个
Terminal
。
键入以下命令将 Windows 10 克隆到新分区:
sudo dd if=/dev/SOURCE of=/dev/TARGET status=progress bs=64K
bs
是块大小(64k 是一个很好的值),status=progress
将显示一条带有克隆进度的消息。
SOURCE
是您要复制的 Windows 的分区,也是TARGET
您放置它的位置。克隆前请仔细检查分区名称。此过程无法撤消;克隆到错误的目标分区将覆盖其数据。
我的系统中的示例:
(忽略分区混乱和 Fresh Win 10,它们是为了测试最终被证明是错误的建议而制作的)
完成后,克隆将具有与源系统相同的标签。您可以使用Gparted
它们将其重命名为其他名称。在本例中,我将源重命名为“Win 10 (BK)”。应用更改。
关于使用 dd 的更详细说明:
使用 RE cmd 通过 DISKPART 和 boot 命令修复启动
重新启动进入原始窗口之一并打开提升的命令提示符,进入 RE 或 Windows 10 USB 安装驱动器。我更喜欢后者,以避免意外触发自动修复,此时自动修复可能会弄乱您之前正常运行的 Windows 安装的启动。
如果使用 USB 工具,请选择 ,
Next
然后Repair your computer
进入恢复屏幕,然后Troubleshoot > Command Prompt
。在 RE 中,它将类似于Troubleshoot > Advanced options > Command Prompt
。使用 DISKPART 为 EFI 分区分配一个字母。利用这个机会记下分配给 Windows 分区的字母。
就我而言,使用的命令是:
> diskpart
> list disk
(figure out which disk contains your installations from their details)
> sel disk 2
(my windows disk)
> detail disk
(get details to find out installation letters and find boot partition)
>sel vol 9
(my boot partition's volume number)
> assign letter=S
(you can assign whatever free letter you want)
> exit
- 纠正克隆分区的主引导代码。
类型:
bootsect /nt60 C: /force
C:
是分配给克隆分区的字母。请将其替换为您的字母。
(可选安全措施)。输入
bcdedit
并拍摄所有条目的照片,以便稍后完全重新创建标志。Windows 在重建条目方面做得很好,但可能会分配错误的区域设置或遗漏一些原始标志,这不是问题,但并不理想。为克隆的分区重新创建 BCD 条目。此过程与 类似
bootrec /rebuildbcd
,其优点是即使在 /rebuildbcd 因“找不到指定路径”而失败的情况下也可以重新创建条目。
类型:
bcdboot C:\Windows /s S: /f UEFI
C:\Windows
是用于重建此条目的源;在本例中为克隆分区。S:
是目标,即 EFI 启动分区。此过程应仅重建克隆条目。/f UEFI
在本例中应用于 GTP、EFI 磁盘。
- (可能为可选)现在,我遇到的几乎每一份修复 BCD 问题的指南都建议使用以下命令。然而,它们似乎适用于 MBR 启动,而不是 EFI。它们不会损害 EFI 启动系统,但可能和往肩上撒盐一样有用。这样做会给你带来好运!
类型:
> bootrec /fixmbr
> bootrec /fixboot
(don't worry if it says "Access is denied")
> bootrec /rebuildbcd
(It'll probably return 0 installations found ¯\_(ツ)_/¯ )
键入
bcdedit
以确认所有 Windows 安装都有Windows 启动加载程序条目。您可以使用它bcdedit /set {identifer} flag flagvalue
来调整或添加条目标志。这是更改源窗口和克隆窗口描述的好机会,这样您就可以在启动时轻松区分它们。克隆的 Windows 现在很可能是默认操作系统。为了以防万一,我想将其更改为安全、可启动的 Windows。这可以在启动时在操作系统选择屏幕中完成,或者现在使用 完成
bcdedit /default {identifier}
。完成后,您可以使用shutdown -r
重新启动。要复制条目标识符(或任何其他值),请单击并拖动光标,然后右键单击以突出显示它。您可以再次右键单击进行粘贴。它看起来如下:
提示:有可能您现在意外触发了自动修复,并且您的原始 Windows 分区之一无法启动,您无法使用键盘选择操作系统或出现其他异常。您可以使用bootsect /nt60 all /force
修复所有分区扇区,然后按照bcdboot
步骤将受影响安装的 BCD 复制到启动分区。
其他有用的启动和 BCD 资源:
- 如何在 Windows 10 或 11 上修复 EFI/GPT 引导加载程序?(如果上述部分修复不起作用,请参阅本文末尾如何从头开始重新创建 BCD)
- BCDedit /设置标志(MS 文章详述参数)
- 启动错误循环 -> /rebuildbcd 错误并且无法设置活动卷(SE、DISM 从 Windows USB 映像源修复)
- 如何修复 Windows 10 中的启动修复(Youtube,bootsect 示例)
- 如何修复 Windows 10 中的自动修复循环 - 启动修复无法修复您的电脑(Youtube,如何使用注册表项备份)
修复克隆的 Windows 10 黑屏/sihost.exe 未知硬错误
这是我发帖问问题时卡住的步骤。
现在您还不应该尝试登录克隆的 Windows。如果您这样做,您将无法进入登录页面。您将看到一个黑屏,其中有一个光标,当您停止移动它时,它会不断消失。Windows 不会对您使用的任何快捷方式做出反应。我不建议尝试它,通过执行以下操作更容易确认并立即解决问题:
- 您可以使用
bcdedit /set {identifier} safebootalternateshell Yes
将克隆设置为安全模式或启动到原始 Windows 安装之一,然后使用Win+R
将跑步打开框,msconfig
从那里输入内容以更改设置。
选择克隆并检查Safe boot
。如果您使用的是源 Windows 10 安装,除了分配给源 Windows 的字母外,您还可以看到使用克隆安装本身时克隆所假定的字母。记下它们。
如果您还没有这样做,您也可以使用该屏幕将不同的 Windows 安装设置为默认安装。
- 启动克隆的 Windows 10。您应该能够顺利进入登录屏幕。登录后,您将看到类似以下内容(抱歉图片太差!):
等待屏幕变黑。光标应该会闪烁并疯狂加载,错误框将保留在那里。
在框上按“确定”。使用
Ctrl+Shit+Esc
打开任务管理器。转到File > Run new task
并输入cmd
,如果有选项,请选中“以管理员权限创建此任务”。您必须快速输入,因为 Windows 的错误状态会导致所有输入不断失去焦点。最小化任务管理器,这至少可以缓解在提示符下输入时失去焦点的问题。
(选修的)您可以通过检查事件查看器和磁盘管理进一步确认您的问题与我的完全一样。
要检查事件类型
eventvwr
并转到Windows Logs > System
。您应该看到每秒都会弹出多个 DistributedCOM 10005 错误,内容包括“DCOM 尝试启动服务 ShellHWDetection 并使用参数“Unavailable”以运行服务器时出现错误“1084”。要确认克隆正在访问源 Windows 分区,请
diskmgmt
在 cmd 中键入。您将看到Page File
并可能看到源分区上不应存在的其他标志。克隆将是启动系统,但缺少页面文件。这意味着克隆系统知道它位于与源系统不同的分区,分区号与源系统不同,它是当前启动的系统,它的注册表正在使用,但这些键仍然指向源系统。它很可能拒绝访问,导致黑屏和所有这些错误。
要修复此问题,您需要更改旧系统的字母,并将其原始字母分配给克隆,同时登录到克隆系统。不要通过磁盘管理来执行此操作。它会尝试更正注册表(如果字母互换,注册表已经正确了)并破坏所有内容。您必须重新克隆系统。
在此示例中原始源 Windows 10,位于分区 Win 10 (BK)有字母C:。 这克隆有字母F:。您希望源具有任何其他字母并且克隆为 C:。
要更正字母最小化所有内容,请返回 cmd 并键入
regedit
以打开注册表编辑器。转到HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
。您应该看到类似以下内容:
返回 cmd 并输入\DosDevices\(ANY LETTER NOT IN USE):
。例如:\DosDevices\X:
。突出显示它,然后右键单击以复制。不按 Enter。这样做的原因是提示失去焦点的次数比其他任何窗口都少。尝试直接在注册表项中输入该内容非常困难,但粘贴却很容易!
返回注册表窗口,右键单击带有源 Windows 10 安装分区字母的条目。在我的情况下是 C:。选择
Rename
并粘贴您刚刚在 cmd 中准备的字符串。重复 cmd 技巧,现在输入您想要克隆分区的字母,它应该是原始系统所拥有的并且您刚刚释放的字母。在我的情况下是
\DosDevices\C:
。复制、右键单击并重命名指向克隆系统的键(\DosDevices\F:
),粘贴新值。恭喜,您成功了!您可以打开
msconfig
、禁用安全启动并重新启动进入克隆系统。现在它应该可以正常运行。
有关通过 regedit 更改启动驱动器号的 MS 文章: