在系統安裝好後用可支援GTP的磁碟克隆軟體把EFI[3]與OS磁區備份下來,之後因某種因素必須更換硬碟,新的硬碟分割方式同上,從備份檔將系統還原到新硬碟的EFI與OS磁區後重開機時出現類似BOOT ERROR 0xc00000e之類的錯誤訊息而無法開機。
我最初以reinstall windows 10 efi bootloader的方向做了些網路搜尋,看了幾篇談fix/repair UEFI Boot/bootloader的文章,大意就是使用安裝光碟開機,進入修復模式,利用幾個指令diskpart、bootrec與bcdboot來修復EFI啟動檔;或用啟動修復的功能 。這幾篇都提到了重點,但說明都不是很清楚,除了其中一篇[5]較為可靠之外,其它幾篇看起來還是抄襲而來的,令人懷疑作者是否實際操作過,事後發現其中的錯誤,更肯定了我的懷疑沒錯。試著查了bcdboot /?,但說明文字也不多。 自己實際照著操作了一下,發現沒用,平白浪費不少時間。試了啟動修復的功能也無用,後來想到應該是磁碟分割與Windows安裝的預設分割法不同有關。
之後有一次再試著還原 時也發現備份軟體不讓我把系統還原到另一顆硬碟的磁區 ,我開始懷疑是否搞錯方向。之後再以“UEFI 換硬碟”為關鍵字,看到 一篇[6]寫的較明確的。看了一下其中內容,發現與之前查到的那幾篇大同小異,但主要的不同是bcdboot指令的使用。當下決定從網路上找bcdboot指令正確完整的說明[9],這才搞清楚真正的用法,實際試一下馬上就成功了。
以下會把自己的作法整理一下並做說明,但先聲明幾點 :
- [6]的討論串中有人提到備份/還原時,以整個硬碟來做就不會有開不了機的問題,關於這點,自己沒實測過,但認為應該是正確的。這裡的情形則是當初以磁區方式備份,就只能以磁區還原,且新硬碟也有資料磁區,若不想動到其中資料時,也不適合用碟對碟方式的還原,只能磁區對磁區。所以重複強調一下,本文談的是磁區對磁區還原之後,修復啟動問題的作法。若能用碟對碟的還原,正常是可以免除本文所遇到的問題。
- 本文談的只適用於Windows 10的版本。
必備項目:
- Windows 10安裝媒體,即DVD或USB 。
- 前述分割好並已還原EFI與OS磁區的新GPT硬碟。
- 記得關閉BIOS中的Secure Boot。
簡單說明
Windows Boot Manager[4]放置在EFI磁區,必須要能夠存取到EFI磁區,才能修復其中的boot record,並重建BCD (Boot Configuration Data)[4]。工作步驟
1. 進入修復模式
機器中裝好新硬碟,此時建議只裝這顆硬碟 ,以避免弄錯。以開機媒體開機,進入修復電腦的環境,使用命令提示字元,這裡就不附上畫面了。以下命令列指令的字母不區分大小寫,但要注意某些參數可能有區分。
2. 指定EFI磁區的磁碟機代號
利用diskpart[7]來指定EFI磁區的磁碟機代號。DiskPart命令列選項可見參考,這裡不細談。diskpart中的指令可簡省,只要它可以辨識的話 ,如select volume可簡省為sel vol。執行diskpart
diskpart
列出磁碟
若照建議只裝一顆,就只顯示編號0磁碟,也沒必要執行這條指令了。
list disk
選定磁碟
要裝的硬碟通常是編號0,這裡就假定是0。
select disk 0
列出分割區
list vol
選定分割區
這裡要確實認好EFI磁區的編號,假定是3。
select vol 3
指定磁碟區代號給EFI磁區
必須先確定這個代號不是目前正在使用的,假定是k:。
assign letter=k:
離開
離開diskpart,才能更動EFI磁區。
exit
3. 修理boot record
cd /d k:\EFI\Microsoft\Boot\
bootrec /FixBoot
cd的/d參數可同時變更工作目錄,詳情請見cd /?。bootrec的使用可見參考[8]。4. 重建BCD
如果覺得有必要的話,可先將舊的改名。
ren BCD BCD.old
bcdboot c:\Windows /l zh-TW
bcdboot.exe的命令列選項可見參考[9],這裡就不過多解釋。在只一顆硬碟的情形下, /s參數預設就是這顆硬碟,故可以不用加此參數。 /f參數必須與/s一起用,故在這裡也用不著。
若真要用這二參數,在這裡的情況下的用法是:
bcdboot c:\Windows /l zh-TW /s k: /f ALL
這與上述省略/s與/f的方式是大約相當的,因省略會套用預設值。假定在另一種情況,想要寫到USB碟或其它硬碟,其磁碟代號為U:,則是:
bcdboot c:\Windows /l zh-TW /s u: /f ALL
5. 結束工作,重開機
執行完後離開。
exit
重開機,建議移除外接的開機裝置,若操作無誤就可正常開機了。可能的變通
- 上述指定磁碟機代號也可用其它工具做到,像DiskGenius。
- 若能把bootrec.exe工具加入自訂的Win10 PE中 ,也可以在PE中使用。要注意PE與所用系統的版本的位元數要一致。
- BOOTICE也可以用來修復UEFI引導[10],但這功能自己沒實測過。BOOTICE有不少功能,僅用過其中少數幾樣而已,不算熟悉,最近曾嘗試使用UEFI頁籤上的功能,但出了點問題,這是題外話了。
參考
- https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface
- https://en.wikipedia.org/wiki/GUID_Partition_Table
- https://en.wikipedia.org/wiki/EFI_system_partition
- https://en.wikipedia.org/wiki/Windows_Vista_startup_process
- http://www.dell.com/support/article/tw/en/twdhs1/sln300987/how-to-repair-the-efi-bootloader-on-a-gpt-hdd-for-windows-7--8--81-and-10-on-your-dell-pc?lang=en
- http://www.pcdvd.com.tw/showthread.php?t=1044157
- https://technet.microsoft.com/zh-tw/library/cc766465(v=ws.10).aspx
- https://support.microsoft.com/en-us/help/927392/use-bootrec-exe-in-the-windows-re-to-troubleshoot-startup-issues
- https://msdn.microsoft.com/zh-tw/library/hh824874.aspx
- http://www.itread01.com/articles/1490515023.html
沒有留言:
張貼留言