笔记:我原本以为BCD是问题所在,但结果却是错误的。
我最初的笔记本电脑设置如下:
- 一个 300 GB 的分区,带有 OS X 10.10 和本机全驱动器加密(FileVault)。
- 一个 200 GB 的分区,带有 Windows 10 和本机全驱动器加密(BitLocker)。
- 在 ESP 上安装的 rEFInd 启动管理器
/EFI/boot
。 - 在 ESP 上安装的 Microsoft 启动管理器
/EFI/Microsoft/Boot
。
两天前,我将 OS X 分区缩小到 200GB,并在中间添加了一个 100GB 的分区,并在其中安装了 Ubuntu。
从那时起,我就无法启动 Windows。
进入 Windows 启动管理器时,系统仍会提示我输入密码,但之后,屏幕上会显示
您的电脑/设备需要维修
发生意外的错误。
错误代码:0xc000000e
然后,我插入了 Windows 10 安装驱动器,并从命令行 ( ShiftF10) 检查了分区。
但diskpart
事实证明无法安装该分区,因为它显然在 MBR 上运行。
(我确保以 EFI 模式启动了安装驱动器(通过 rEFInd 中的手动启动节),因此我希望diskpart
在 GPT 上运行,但是哦,好吧......)
MBR 最初包含四个分区:
- ESP
- 麦金塔高清
- 高清恢复
- 新兵训练营
GPT 在 BOOTCAMP 之后还包含一个 BitLocker 恢复分区。
结果发现,添加 Linux 分区后,BOOTCAMP 被从列表中移除,而“Linux HD”成为第四个分区。
我只需调整 MBR,让最后一个入口点再次指向 BOOTCAMP,这样就“跳过”了 Linux 分区。
之后,我仍然可以启动 OS X 和 Ubuntu,现在我也可以从 挂载 Windows 分区diskpart
。
我设法使用以下方法解锁分区:
manage-bde -unlock W: -Password
证明 1) 我没有弄乱 MBR,并且 2) 分区仍然完好无损。
鉴于此,我很确定问题出在 BCR 上。
由于我仍不清楚的原因,我无法从安装驱动器安装 ESP - 尝试为磁盘 0 的第一个分区分配驱动器号时,系统提示“未指定卷”,但list volume
只列出已安装的所有内容。
bootrec /rebuildbcd
同样失败了,删除了 BCD 文件从安装驱动器。
但是,我可以简单地将 BCD 复制到安装驱动器并bcdedit
在其上使用它。
bcedit /store BCD
印刷:
Windows Boot Manager
--------------------
identifier {bootmgr}
device unknown
path \EFI\Microsoft\Boot\bootmgfw.efi
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {default}
resumeobject {cc3e7046-4857-11e5-a015-f353893f9a4c}
displayorder {default}
toolsdisplayorder {memdiag}
timeout 30
Windows Boot Loader
-------------------
identifier {default}
device unknown
path \Windows\system32\winload.efi
description Windows 10
locale en-US
inherit {bootloadersettings}
recoveryenabled No
custom:16000060 Yes
custom:17000077 352321653
osdevice unknown
systemroot \Windows
resumeobject {cc3e7046-4857-11e5-a015-f353893f9a4c}
nx OptIn
custom:250000c2 1
现在这些unknown
对我来说看起来不太好,所以我把它们改成了partition=W:
使用
bcdedit /store BCD /set {default} device partition=W:
bcdedit /store BCD /set {default} osdevice partition=W:
并且我验证了结果:
Windows Boot Manager
--------------------
identifier {bootmgr}
device unknown
path \EFI\Microsoft\Boot\bootmgfw.efi
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {default}
resumeobject {cc3e7046-4857-11e5-a015-f353893f9a4c}
displayorder {default}
toolsdisplayorder {memdiag}
timeout 30
Windows Boot Loader
-------------------
identifier {default}
device partition=W:
path \Windows\system32\winload.efi
description Windows 10
locale en-US
inherit {bootloadersettings}
recoveryenabled No
custom:16000060 Yes
custom:17000077 352321653
osdevice partition=W:
systemroot \Windows
resumeobject {cc3e7046-4857-11e5-a015-f353893f9a4c}
nx OptIn
custom:250000c2 1
但是,在将该 BCD 文件推回到我的 ESP 后,Windows 启动管理器甚至不再提示我输入密码,而是立即显示一个不同的错误,说
您的电脑/设备需要修理。
无法加载应用程序或操作系统,因为所需文件缺少或包含错误。
文件:\Windows\system32\winload.efi 错误代码:0xc0000225
我尝试在解密驱动器之前和之后设置device
和,结果相同。 设置也没有任何区别。现在,我很确定这是退步,因为它甚至不再要求我输入密码。osdevice
W:
device
{bootmgr}
我还注意到,即使运行 也会bcdedit /store BCD
对文件进行大量更改,因为实际上没有数据更改。
除其他事项外,该文件显然会包含自己的路径,既有Volume1\EFI\Microsoft\Boot\BCD
原始 BCD 文件的路径,也??\C:\BCD
有我修改过的文件的路径。
起初我担心这会以某种方式“污染”文件,但我进行了测试,将 更改为description
,这再次导致文件发生大量更改,但 Windows 启动管理器在使用该文件时仍要求我输入密码,因此自定义文件位置不会“污染”文件,我使用的 也不会损坏。{default}
Windows 42
bcdedit
现在,最后我的问题来了:
我该如何修复我的 BCD?
或者如果这不是问题,那么问题是什么?我该如何修复它?
附加信息:
diskutil list
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.3 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_CoreStorage 200.4 GB disk0s2
3: Apple_Boot Recovery HD 650.1 MB disk0s3
4: Microsoft Basic Data 99.0 GB disk0s4
5: Microsoft Basic Data 199.7 GB disk0s5
6: DE94BBA4-06D1-4D40-A16A-BFD50179D6AC 363.9 MB disk0s6
/dev/disk1
#: TYPE NAME SIZE IDENTIFIER
0: Apple_HFS Macintosh HD *200.0 GB disk1
Logical Volume on disk0s2
4A45027B-2703-4C7D-816E-3419DE0F0F61
Unlocked Encrypted
sudo gpt show -l /dev/disk0
gpt show: /dev/disk0: Suspicious MBR at sector 0
start size index contents
0 1 MBR
1 1 Pri GPT header
2 32 Pri GPT table
34 6
40 409600 1 GPT part - "EFI System Partition"
409640 391334208 2 GPT part - "Customer"
391743848 1269760 3 GPT part - "Recovery HD"
393013608 1688
393015296 193355776 4 GPT part - "Linux HD"
586371072 2048
586373120 390019148 5 GPT part - "BOOTCAMP"
976392268 1972
976394240 710656 6 GPT part - ""
977104896 131
977105027 32 Sec GPT table
977105059 1 Sec GPT header
sudo fdisk /dev/disk0
Disk: /dev/disk0 geometry: 60821/255/63 [977105060 sectors]
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: EE 0 0 2 - 1023 254 63 [ 1 - 409639] <Unknown ID>
*2: DA 1023 254 63 - 1023 254 63 [ 409640 - 391334208] <Unknown ID>
3: AF 1023 254 63 - 1023 254 63 [ 391743848 - 1269760] HFS+
4: 07 1023 254 63 - 1023 254 63 [ 586373120 - 390019148] HPFS/QNX/AUX
带有原始 BCD 的 Windows 启动管理器:
输入我的密码后,带有原始 BCD 的 Windows 启动管理器:
修改了 BCD 的 Windows 启动管理器:
更新 1:
我尝试在 MBR 中将 BOOTCAMP 标记为“可启动”,但没有任何变化。
答案1
BCD 实际上是没有问题的,是 MBR 导致了所有的麻烦。
我已经解密了我的驱动器[1]并试图重新安装 Windows,但在选择驱动器时弹出一个窗口,上面写着“此硬盘使用 MBR,但基于 EFI 的系统只能安装在 GPT 驱动器上”。
因此,显然在 Windows 上,MBR 优先于 GPT。
我继续用“保护性” MBR 替换我的 MBR,使用
sudo gdisk /dev/disk0 # On Linux, use /dev/sda
r # Recovery/transformation
x # Expert mode
n # New protective MBR
w # Write changes to disk
y # Yes (confirm)
(在 Linux 上,gdisk
应该默认安装(否则尝试sudo apt-get install gdisk
),在 Mac 上你可以从这里。
这最终解决了我的问题。
[1]这似乎实际上不是必需的,但根据记录:假设您的加密驱动器标有W:
,首先从安装驱动器命令行将其解锁,然后运行manage-bde -off W:
,不时使用检查进度manage-bde -status W:
,并在加密达到 0% 后重新启动。