筆記:本來以為是BCD的問題,結果錯了。
我最初的筆記型電腦設定如下:
- 具有 OS X 10.10 和本機全磁碟機加密 (FileVault) 的 300 GB 分割區。
- 具有 Windows 10 和本機全磁碟機加密 (BitLocker) 的 200 GB 分割區。
- 安裝在 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,而且我現在還能夠從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%。