題 如何修復Windows 8 EFI Bootloader?


幾天前我在硬盤上安裝了Windows 7和Windows 8的EFI模式。今天,引導程序丟失/損壞。

我目前在閃存驅動器上安裝了Windows 8安裝程序並嘗試使用“自動修復”選項來修復引導加載程序,但它沒有做任何事情。 Windows 8安裝程序中也缺少“啟動修復”選項。

如何從命令提示符修復/重新創建EFI引導加載程序?

BCDEDIT 返回以下消息:

The requested system device cannot be found.

120
2017-08-12 18:06


起源


目前的解決方案有什麼問題? - soandos
@soandos我遇到了同樣的問題。我執行了你和harrymc的命令,現在一切正常!非常感謝你們兩位。 - ComFreek
就像僅供參考,但我們最近發布了適用於Windows 8的自動EFI修復工具: neosmart.net/blog/2013/... - Mahmoud Al-Qudsi
我沒想到人們會在UEFI windows 8上遇到這麼多麻煩......無論如何系統分區如何消失或腐敗?它甚至沒有正常安裝在Windows中,因此文件系統損壞不可能。並且所有當前的操作系統都沒有錯誤,不會破壞現有的Windows安裝。實際上,甚至Windows也沒有在UEFI上破壞Linux,令人意外的驚喜。 - Milind R
如果您使用的是動態磁盤,則不適用 - rainabba


答案:


克隆到新的SSD後,我花了很多時間試圖讓我的Windows 8 PC再次啟動,並試圖總結我最終如何將其全部工作 -

首先,從UEFI Windows 8恢復磁盤(CD / DVD / USB)啟動 - 我發現自動恢復過程沒有找到正確的Windows分區,當我設法將其添加到BCD設置時,它會使其可靠地啟動例如使用BCDEDIT我得到它來查找並啟動Windows分區,但它拒絕冷啟動或在第二次重啟或關機後不會“保持”設置。

進入高級選項並運行命令提示符。

輸入 diskpart 使用DiskPart工具確保您擁有所有正確的分區並識別您的EFI分區 - 這裡的關鍵是您的EFI分區格式為FAT32:

DISKPART> sel disk 0

Disk 0 is now the selected disk.

DISKPART> list vol

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     E                       DVD-ROM         0 B  No Media
  Volume 1     C                NTFS   Partition    195 GB  Healthy    Boot
  Volume 2         WINRE        NTFS   Partition    400 MB  Healthy    Hidden
  Volume 3                      FAT32  Partition    260 MB  Healthy    System

然後為EFI分區分配一個驅動器號:

DISKPART> sel vol 3

Volume 3 is the selected volume.

DISKPART> assign letter=b:

DiskPart successfully assigned the drive letter or mount point.

輸入以退出DiskPart工具 exit 並在命令提示符下運行以下:

cd /d b:\EFI\Microsoft\Boot\

bootrec /fixboot

刪除或重命名BCD文件:

ren BCD BCD.bak

使用 bcdboot.exe 重新創建BCD商店:

bcdboot c:\Windows /l en-gb /s b: /f ALL

/f ALL 參數更新BIOS設置,包括UEFI固件/ NVRAM, /l en-gb 是為英國/ GB語言環境本地化。本地化默認為美國英語,或使用en-US。

重新啟動並交叉手指。

這讓我很頭疼。我走了很長一段時間。在撰寫本文時,沒有很多關於修復UEFI / Windows 8的可靠信息。

[編輯]

要重新啟用Hyper-V,我還必須在重新啟動後從Windows中的管理員命令提示符運行以下命令:

bcdedit /set {default} hypervisorlaunchtype Auto
bcdedit /set {default} nx OptIn

181
2017-11-12 00:27



這是從Windows 10下載ISO。起初沒有工作,但之後在GUI菜單中運行了啟動修復,這樣做了,謝謝G-d。 :-)我很感激幫助:-) - Abbafei
這個食譜感覺最有希望,但我打了 BFSVC Error: Could not open the BCD template store. STatus = [c000000f ] :( - Dusan Bosnjak 'pailhead'


其他答案是有幫助的,但這是我必須做的修復我的。

我有一個安裝了Windows 7的1.5 TB硬盤。然後我將Windows 8安裝到我購買的150 GB SSD上。 1.5 TB的硬盤驅動器發生故障,我聽到它發出噪音,我的電腦不再啟動,說“請插入系統盤”。我認為引導加載程序丟失了,因為它必須在1.5 TB磁盤上。事實證明這是問題,但問題是我遵循的指南不會重建引導加載程序或其他任何調用,因為我在較小的150 GB磁盤上沒有EFI分區(這可能存在於故障磁盤上),它只有1個分區填滿了整個磁盤。

我不想丟失所有數據,所以我通過從Windows 8安裝USB驅動器啟動進入命令提示符(注意如果出現你無法啟動它的UEFI版本,選擇從沒有啟動的USB驅動器啟動UEFI出現在它之前)。

進入命令提示符後(請參閱其他答案以獲取說明),您需要縮小分區。為此,請按,輸入以下命令 輸入 每一個之後:

diskpart

list disk

select disk 0

list partition

select partition 1

shrink desired=200 minimum=200

create partition efi

list partition

select partition 2

format fs=fat32

這些命令將創建EFI分區。通過鍵入來仔細檢查所有內容 list vol。你應該看到一個200 MB的分區。你現在需要給它分配一個字母。通過鍵入來完成此操作 assign, 然後 list vol 再次看看分配了什麼字母。

現在,您需要將引導文件複製到此新創建的分區:

bcdboot C:\Windows /l en-gb /s B: /f ALL

注意: 你必須更換 C: 使用包含Windows的分區的驅動器號,和 B: 將字母分配給剛剛創建的EFI分區。

我還輸入了以下命令:

bootrec /fix

bootrec /fixmbr

這兩個都成功了,不知道他們是否真的做了什麼,只關心誰。 Windows現已完全恢復。


20
2017-12-12 06:01



bootrec / fix似乎不是Windows 8上的有效命令,但其他說明工作並解決了我的所有問題。謝謝! - Ciaran Fisher
i:是我的EFI分區(首先在磁盤上),但它是空的。當我跑 bcdboot c:\windows /s i: /f ALL我得到“BFSVC錯誤:無法設置emement應用程序設備。狀態= [c00000bb]”我已經打了幾個月的戰鬥,每次嘗試,最後都有一個似乎包含我的EFI啟動文件的閃存驅動器,因為II可以啟動它,但如果我刪除它,我無法啟動。 - rainabba
非常感謝!這節省了我的一天。我幾乎嘗試了一切,沒有任何效果。我缺少的步驟是格式化EFI卷。格式化EFI卷後。 bcd boot命令成功運行,我的Windows 10備份並重新運行。 - Sahil
+1告訴我選擇Windows驅動器號而不是通常的C: - ptetteh227


好的,我有時間在這裡整理一個合適的大綱。它很長,但它非常完整,應該可以幫助你了解正在發生的事情。

首先,這可能發生的一種方式:

  1. 您的BIOS丟失了其設置。
  2. 沒問題,所有這些東西都存儲在EFI分區中。
  3. ...除了SATA IDE和AHCI設置外,原因很明顯。
  4. 你使用的是SATA-AHCI嗎?你現在可能正在使用SATA-IDE。
  5. 在你想出來之前,你是否嘗試過啟動?
  6. 如果你這樣做了,那就失敗了。你有沒有讓Windows試圖修復它?
  7. 如果你這樣做了,BLAM,很可能已經破壞了引導配置數據庫。
  8. 確保您使用的是上次使用的正確SATA設置。

這是你現在可能已經完成的事情。如果這些內容不匹配,請仔細評估是否存在您的問題,並閱讀此內容以獲取創意,但如果不先考慮就不要遵循它。

  1. 您已經HOPEFULLY忽略了有關修復主引導記錄(MBR),分區表,分區標誌和其他不適用於EFI引導方案的垃圾的所有廢話。 在所有。充其量,你將能夠完全重建一個新的, 無關,NON-EFI啟動解決方案。然而,這可能不是微不足道的,因為:

  2. 您已經發現Windows確定它沒有引導配置數據庫,但遺憾的是,它完全無能為力或非常確定它的位置 - 您無法確定哪個。

  3. 你知道啟動存儲通常(某處)\ Boot \ BCD,文件是HIDDEN;使用“dir / a:hs”查看它。

  4. 您已經熟悉了BCDEDIT.EXE,並發現它可以讓您使用“/ CREATESTORE”在暫存文件中“模擬”引導配置數據庫(請不要將其命名為“BCD”),您可以使用“/ STORE”選項顯式使用暫存文件,您可以使用“/ CREATE {bootmgr}”為Windows啟動管理器添加菜單項,並且您應該能夠使用“/ IMPORT”導入它...

  5. ......但是當你試圖這樣做時,你做不到。你查看/ SYSSTORE選項,這聽起來是正確的,但你不能讓它使用另一個商店,因為它是“模糊的”。你有一種預感,它知道商店在哪裡 - 或應該是 - 但你找不到它。

  6. 您已嘗試使用“MOUNTVOL”來安裝EFI分區,但它甚至沒有顯示在列表中,因此您不能。

如果所有這些都非常適合您,那麼可能會發生以下情況:

  1. Windows可以告訴您已設置EFI(您已通過UEFI啟動啟動DVD,您有EFI分區等)。

  2. 因此,它知道在哪裡查看BCD文件 - 但是,它要么以某種方式錯誤地定位(不是這個問題,而是相似)或者BCD已被刪除。

  3. 顯然,因為它知道它應該在哪裡,這會打破/ SYSSTORE--實際上,這可能是正確的行為,因為否則你會把它放在錯誤的地方。

  4. 就像我所知,MOUNTVOL故意隱藏EFI分區(或者某種程度上無法注意到它)。這可以防止掛載文件系統,從而阻止查找正確的子目錄,驗證數據庫是否存在等。

所以,最後,這是你需要做的事情。好消息是它可能比你現在希望的要簡單得多。

  1. 您確實必須安裝EFI分區。

實際上,我有預感並非如此 嚴格 正確 - 我強烈懷疑EFI分區是 已經 由一些內部子系統安裝,這就是為什麼BCDEDIT變得暴亂 - 它沒有看到數據庫,但它知道應該去哪裡。然而,無論它沒有什麼,都是一封驅動器。那麼該怎麼辦?

那麼......你的DOS根源有多遠?你還記得ASSIGN命令嗎?你猜怎麼著。

  1. 啟動DISKPART。

  2. 如果您不熟悉DISKPART,它的基本工作方式是集合的層次結構;您必須在一個級別選擇一個元素才能繼續下一個元素。所以,“LIST DISKS”,然後是“SELECT DISK n”,其中n是適合你的。

  3. 使用“LIST PARTITION”和“LIST VOLUME”(注意非複數)來獲得一些見解並識別您的EFI分區。

它通常是標記為“SYSTEM”的100MB FAT32分區。請記住,您的磁盤現在應該使用GPT分區表,因此您可能會看到相當多的分區。其中一些用於緊急恢復 - 他們為EFI問題做了很多好事,是嗎?那好吧。

請注意,EFI分區和其他一些分區沒有驅動器號。如果您如此傾向,您還可以查看GPT分區屬性,這可能會為您提供一些與切向相關的“Aha”時刻。

  1. “SELECT PARTITION n”,其中n是EFI分區。 (如果需要,我希望您可以選擇音量。)

  2. “分配”。而已。不要指定驅動器號;只是“分配”。

  3. “LIST VOLUME”。您現在應該看到分配給EFI分區的驅動器號。

  4. “退出”DISKPART。

現在......一個很大的警告。您可能會直接轉到S :(或從ASSIGN獲得的任何內容)並註意/ Boot分區。 “啊哈!”你會說。 “這裡沒有BCD文件!”首先......記住該文件是隱藏的。第二...再挖一點,你會發現雖然有:

S:\ EFI \啟動

還有:

S:\ EFI \微軟\啟動

您需要檢查這兩個問題。

S:\ EFI \ Boot適用於 母板,並包含Windows啟動 LOADER (可能還有其他操作系統的其他東西)。這有這個名字,因為主板不知道你是否會有Windows,並且需要一條有意義的固定路徑。

  1. 檢查S:\ EFI \ Boot。對於Windows 7 Professional,64位,您應該看到:

bootx64.efi

如果您已經安裝了EFI shell(總是一個好主意),您可能還會看到“shellx64.efi”。

注意:使用“chainloader + 1”的雙啟動Linux用戶不會在此處看到額外的條目。

  1. 使用檢查S:\ EFI \ Microsoft \ Boot  “dir”和“dir a:h”。對於Windows 7 Professional,64位,您應該看到一堆語言模板(“en_US”等)和以下文件:

的bootmgr.efi bootmgfw.efi memtest.efi BCD BCD.Backup.001 BCD.Backup.002

...除了你可能沒有看到BCD,你呢?但那些備份文件肯定看起來很誘人。

  1. 確定要使用的備份文件。無論最近發生什麼變化,它都沒有引導系統的能力那麼重要,所以選擇最完整的。可能你會看到一個大的和一個相當小的一個。小的已經損壞,並且是修復過程失敗的工件 - 不要使用它。如果它們都很大,請使用較舊的。在任何情況下,製作額外的備份副本 作者: 別的地方。

  2. 將您決定使用的備份複製到“BCD”。

  3. 退出shell,乾淨地關閉,然後重新啟動。

  4. 告訴Windows啟動NORMALLY。此時,它應該開始。

問:如果你沒有備份BCD怎麼辦?

A:嗯,那個  不應該發生。這可能意味著您要么位於錯誤的目錄中,支持EFI但實際上並未使用它,或者以某種方式重建了整個EFI分區而沒有所有必需的Windows材料(可能,尤其是在使用多個版本的Windows時)。在這種情況下,您需要從DVD複製EFI材料,然後使用BCDEDIT修改或重建引導配置數據庫。

問:你能舉個例子說明在EFI系統中可以使用“BCDEDIT / SYSSTORE”來做任何事嗎?

答:到目前為止,沒有。

無論如何,希望這有助於解決一些人的問題,或者至少讓他們思考。作為一個非常重要的最後一點,請注意您可以安裝和檢查您的EFI分區 通常在Windows下 使用上面的DISKPART ASSIGN技術。您應至少執行一次此操作,以獲得EFI分區的完整備份, 之前 你遇到了這種麻煩。我建議將一個備份放入C:驅動器的子目錄中,另一個放在USB閃存驅動器上。

對不起,這太囉嗦了。我需要在某些時候把它變成一篇合適的文章,但有很多人都很沮喪,我覺得有必要盡可能快地記錄我的經歷。

乾杯,    馬特“斷點”哎呀


8
2017-11-28 03:14



實際上,MOUNTVOL確實讓你安裝了ESP。你使用MOUNTVOL字母:/ S. - Yuhong Bao
因此,當您掛載該EFI分區並且根本找不到任何內容時,如何繼續?我在想 bcdboot c:/windows /s i: /f ALL或者這會讓我開始,但這只是讓我“BFSVC錯誤:無法設置元素應用程序設備。狀態= [c00000bb]” - rainabba
儘管單次出現錯誤,現在看來我在那個驅動器上有EFI文件夾,而我之前沒有。如果沒有錯誤仍然無法做很多事情並且無法啟動,但至少這是件事。 - rainabba
決定完全嘗試另一條路線。我插入另一個閃存驅動器,擦拭它,給它一個驅動器號,然後重複使用它作為目標而不是我的EFI分區。簡而言之,我沒有啟動進入我的Windows安裝,而是啟動了該閃存驅動器。我無法從我的EFI分區啟動,儘管它有文件,它是我的第一個驅動器上的第一個分區(EFI,fat32,有文件)。在好的方面,這是一個有趣的方法來阻止某人我的系統。我只是把這個“鑰匙”從我的系統中取出而且它無法啟動。 - rainabba


Windows 8仍然沒有以最終形式出現,因此存在問題。 您所在的區域是我們大多數人的新區域,我們以前使用的命令可能不再適用。 對於@soandos列出的命令,我添加了一個完全重建BCD的命令:

bootrec /rebuildbcd

還嘗試使用Windows 8的高級啟動菜單,讓我們知道會發生什麼。

如果沒有任何作用,文章 無法啟動時修復Windows 7 對使用有一些建議 BCDEDIT 糾正啟動錯誤。無論如何它會很有趣 查看計算機上bcdedit的輸出是什麼。

[編輯]

這些鏈接可能包含一些有用的想法:

從DVD恢復Windows Bootloader
Windows 7啟動管理器恢復問題
Windows 7突然無法啟動 - 修復Windows 7 Bootloader


5
2017-08-25 20:45



雖然屬於Windows 7,但我添加了一些可能有用的鏈接。 - harrymc


最簡單的方法:

  • 按照上面帖子中的步驟找到BCD文件並轉到其目錄。

  • 如果隱藏了BCD文件,請鍵入 attrib bcd -s -h -r 並按 輸入。這將允許您修改和覆蓋該文件。

  • 類型 ren bcd bcd.old 並按 輸入。這將重命名當前的BCD文件。

  • 類型 Bootrec /RebuildBCD 並按 輸入 強制Windows 8從頭開始重建啟動菜單。

  • 退出命令提示符並關閉。刪除Windows恢復介質並重新啟動。你完成了!


3
2017-11-29 01:17





在DISKPART下我只有vol 0或D(DVD)和vol 1或C(Windows NTFS分區)。在我做出第1卷活動之前,沒有什麼對我有用。

退出DISKPART後我只輸入:

bootrec /fixboot
bootrec /rebuildbcd

然後系統得到了適當的修復。我沒用過

bootrec /fixmbr

因為我在MBR上使用GAG(gestor dearranquegràfico)進行多重啟動。


2
2018-02-06 11:50





經過6個小時的掙扎,我設法修復了我的Windows 8啟動問題。

今天,經常重啟後,我收到了消息 MBR not found 或類似的,我不記得了。我試過了 bootrec 命令,Windows自動修復(它無法找到任何已安裝的Windows),一百萬個其他方式,沒有。

問題出在我執行的時候 bootrec /rebuildbcd 它是正常的,然後當我不得不進入 yes 如果我想保存配置,我收到消息, the file is not accessible because it is used by a another process

經過數小時的思維破解,我終於解決了它。

按此順序......

  • 首先,我啟動了緩釋分區主機和FORMATED系統保留卷,我稍後將其指定為活動狀態(我的啟動文件夾是)。當我重新啟動時,我收到了一個錯誤 NTLDR missing

  • 然後我在Windows恢復啟動,打開命令提示符並輸入 bootrec /fixmbr/fixboot/scanos/rebuildbcd(現在執行得很好:])

  • 我退出了 cmd 並點擊自動修復。

  • 然後,我能夠選擇Windows 8.當我重新啟動時,我可以看到Windows 8徽標。


1
2017-12-05 14:29



抬頭:這個答案似乎是一個MBR磁盤。在GPT磁盤上,diskpart.exe在標記卷活動時返回此消息:“ACTIVE命令只能用於固定的MBR磁盤。” - zacharydl


我的情景;我沒有放棄EFI系統分區,但是切換驅動器和安裝Windows似乎搞砸了Windows Boot Manager UEFI啟動項 第一次開車;必須使用指向驅動器的UEFI條目直接啟動。我想我 通過更正/添加“device partition = \ Device \ HarddiskVolumeX”設置來修復它(在我的情況下X = 2;我的第二個分區是EFI系統分區,映射到Z:with diskpart.exe):

Bcdedit / set {bootmgr}設備分區= Z:

查看: bcdedit.exe / enum firmware


0
2017-12-19 14:57





使用: bootrec /fixmbr (更新MBR,在這種情況下可能不會做任何事情,但也不會受到傷害)

bootrec /fixboot 重寫系統分區的引導扇區。

bootrec /scanos 掃描驅動器上的操作系統並將其添加到引導加載程序。

只需按順序運行命令即可。


-1
2017-08-13 00:06



Downvoter關注評論? - soandos
該 bootrec /fixmbr 命令不適用於作者的問題或情況。 - Ramhound


我已經設法通過在恢復控制台中使用以下命令來修復它:

 bootcfg C:\Windows /l en-us

-4
2017-08-25 20:41



此工具僅適用於適用於Windows XP和較舊版本的boot.ini。 - Elmo
這與EFI引導加載程序無關。 - Mahmoud Al-Qudsi