卡在grub?雙系統(tǒng)引導(dǎo)修復(fù)實(shí)戰(zhàn)全攻略)
直接講結(jié)論誤刪Ubuntu分區(qū)導(dǎo)致開機(jī)卡進(jìn)grub這個(gè)局是可以破的而且修復(fù)思路并不復(fù)雜。核心問題是引導(dǎo)鏈斷了Ubuntu刪了但電腦固件仍然優(yōu)先去找GRUBGRUB又找不到已消失的Ubuntu內(nèi)核于是停在這個(gè)黑底命令行界面等你手動(dòng)處理。我處理過不少這類雙系統(tǒng)事故從最初的滿頭大汗到后來(lái)十幾分鐘搞定中間踩過的坑和總結(jié)出的正確路徑都在這篇文章里。如果你正對(duì)著一個(gè)只有g(shù)rub提示符的黑屏發(fā)愁或者擔(dān)心以后遇到同樣問題這篇文章能幫你省下大量折騰時(shí)間。1. 事故現(xiàn)場(chǎng)還原為什么刪掉Ubuntu分區(qū)會(huì)黑屏進(jìn)grub先搞清楚你屏幕上到底是什么狀態(tài)。開機(jī)后沒有進(jìn)入系統(tǒng)選擇菜單而是直接進(jìn)入一個(gè)黑底白字的界面底部一行g(shù)rub或Grub rescue 之類的提示符這就是GRUBGrand Unified Bootloader在向你求救。它不是死機(jī)而是在等指令。雙系統(tǒng)引導(dǎo)的正常流程是這樣的電腦開機(jī)后主板固件UEFI或Legacy BIOS根據(jù)啟動(dòng)順序找到引導(dǎo)設(shè)備然后執(zhí)行引導(dǎo)加載器。安裝Ubuntu時(shí)它會(huì)接管引導(dǎo)權(quán)把GRUB寫入EFI系統(tǒng)分區(qū)或主引導(dǎo)記錄。GRUB啟動(dòng)后展示系統(tǒng)列表里面有Ubuntu和Windows你選哪個(gè)就加載哪個(gè)的內(nèi)核。問題出在你直接刪掉了Ubuntu的根分區(qū)或整個(gè)Ubuntu相關(guān)分區(qū)。此時(shí)電腦固件不知道Ubuntu已經(jīng)沒了仍然按既定路徑找到GRUBGRUB按配置文件去查找Ubuntu的內(nèi)核結(jié)果發(fā)現(xiàn)文件系統(tǒng)沒了、內(nèi)核文件也沒了。它找不到有效的啟動(dòng)項(xiàng)只能停在那里把命令行界面扔給你。也有一種變體你看到的是GRUB的正常菜單但選擇Ubuntu后提示error: no such partition或file not found這類信息。這種情況同樣是因?yàn)镚RUB指向的路徑不存在了。如果菜單里壓根沒有Windows條目說明GRUB的配置文件grub.cfg里雖然曾檢測(cè)到Windows Boot Manager但現(xiàn)在因?yàn)榉謪^(qū)變化它沒能力自動(dòng)更新也就沒把Windows項(xiàng)列出來(lái)。這里有個(gè)關(guān)鍵認(rèn)知GRUB不是操作系統(tǒng)它只是個(gè)引導(dǎo)器。它的工作就是找到內(nèi)核并加載它。如果找不到它不會(huì)自己去修復(fù)也不會(huì)幫你聯(lián)系Windows的引導(dǎo)程序。它的“保底設(shè)計(jì)”就是扔給你一個(gè)命令行允許你手動(dòng)輸入指令去指定內(nèi)核位置。這意味著所有“進(jìn)grub就完蛋了”的說法都是夸大其詞真正的問題是“怎么把引導(dǎo)權(quán)交還給Windows”。在動(dòng)手修復(fù)之前你必須做一個(gè)判斷你的電腦是UEFI啟動(dòng)還是Legacy BIOS啟動(dòng)這個(gè)判斷決定了后續(xù)操作的核心思路和命令差異。一般在開機(jī)時(shí)進(jìn)入主板BIOS/UEFI設(shè)置界面通常按Delete、F2或F10具體看主板品牌查看啟動(dòng)模式選項(xiàng)。如果顯示UEFI就走UEFI修復(fù)路徑如果是Legacy就走M(jìn)BR修復(fù)路徑。絕大多數(shù)近五年的新電腦都是UEFI模式下文會(huì)重點(diǎn)覆蓋但Legacy路徑也會(huì)一并交代。2. 修復(fù)方案的總分總思路先定位引導(dǎo)文件再重建引導(dǎo)項(xiàng)修復(fù)的核心邏輯可以這樣概括既然GRUB失去了工作能力找不到Ubuntu內(nèi)核我們需要讓它把引導(dǎo)權(quán)讓出來(lái)或者直接繞過GRUB讓電腦固件重新找到Windows的引導(dǎo)加載器。先說原理幫助你理解所有命令背后的意義。Windows在UEFI模式下的引導(dǎo)加載器是一個(gè).efi文件位于EFI系統(tǒng)分區(qū)ESP的EFI\Microsoft\Boot\bootmgfw.efi。主板固件通過NVRAM里的啟動(dòng)項(xiàng)記錄來(lái)定位這個(gè)文件。正常情況下你在BIOS啟動(dòng)菜單里能看到Windows Boot Manager這一項(xiàng)它指向的就是這個(gè)efi文件。但安裝了Ubuntu雙系統(tǒng)后GRUB可能把啟動(dòng)順序調(diào)整了讓GRUB排第一位。等你刪掉Ubuntu分區(qū)GRUB損壞NVRAM里可能還殘留著“先啟動(dòng)GRUB”的記錄于是你被卡在grub界面。有兩種修復(fù)路徑路徑A修復(fù)NVRAM啟動(dòng)項(xiàng)直接指向Windows引導(dǎo)文件。這是最干凈的方案。在GRUB命令行中手動(dòng)指定加載Windows引導(dǎo)器進(jìn)入Windows系統(tǒng)然后在Windows內(nèi)部用工具重建或調(diào)整啟動(dòng)項(xiàng)。這種方式的好處是不需要PE盤/U盤只要能進(jìn)入GRUB命令行就行。問題在于如果你對(duì)GRUB不熟手輸命令容易出錯(cuò)。路徑B用第三方介質(zhì)PE盤/Live USB引導(dǎo)重建Windows引導(dǎo)項(xiàng)。這是最穩(wěn)妥的方案。做一張Windows PE啟動(dòng)盤或Ubuntu Live USB從介質(zhì)啟動(dòng)然后在命令行里手動(dòng)重建Windows引導(dǎo)記錄和啟動(dòng)項(xiàng)。這個(gè)方法不依賴GRUB本質(zhì)上是讓W(xué)indows把引導(dǎo)權(quán)搶回來(lái)。我個(gè)人更推薦路徑B并會(huì)用一整節(jié)來(lái)講透它因?yàn)樗某晒β矢?、?duì)新手友好而且能覆蓋最壞的情況比如grub命令行都進(jìn)不去。但路徑A也很重要有些場(chǎng)景下你手邊恰好沒有第二臺(tái)電腦可以做啟動(dòng)盤學(xué)會(huì)A能解決燃眉之急。選擇修復(fù)路徑的依據(jù)就三條手頭有什么工具、是否能進(jìn)入grub命令行、Windows引導(dǎo)文件是否完好。如果Windows引導(dǎo)文件還在兩條路都能走通如果引導(dǎo)文件也壞了必須走路徑B甚至需要修復(fù)Windows引導(dǎo)文件本身。下面先講路徑A因?yàn)樗茏屇阕羁烀撾xgrub界面。3. GRUB命令行下手工引導(dǎo)Windows一條應(yīng)急出口如果你現(xiàn)在正盯著grub提示符不妨先試試這條路。GRUB自帶一套手動(dòng)命令機(jī)制可以指定分區(qū)、指定文件路徑來(lái)加載操作系統(tǒng)。在GRUB下引導(dǎo)Windows的常見步驟是這樣的grub set root(hd0,gpt1) grub chainloader /EFI/Microsoft/Boot/bootmgfw.efi grub boot這套命令的意思是設(shè)置根分區(qū)為(hd0,gpt1)然后鏈?zhǔn)郊虞dWindows引導(dǎo)管理器文件最后啟動(dòng)。問題在于(hd0,gpt1)這個(gè)寫法不是固定的你得先確認(rèn)Windows引導(dǎo)文件所在的EFI分區(qū)到底是哪個(gè)盤的第幾個(gè)分區(qū)??梢韵扔胠s命令列出所有分區(qū)grub ls (hd0) (hd0,gpt1) (hd0,gpt2) (hd1,gpt1) ...然后逐個(gè)檢查哪個(gè)分區(qū)里有EFI目錄grub ls (hd0,gpt1)/你會(huì)看到類似EFI/、System Volume Information/這樣的輸出說明這個(gè)分區(qū)大概率就是EFI系統(tǒng)分區(qū)。接著確認(rèn)一下grub ls (hd0,gpt1)/EFI/Microsoft/Boot/如果顯示bootmgfw.efi或bootmgfw.efi相關(guān)文件恭喜你引導(dǎo)文件完好的可能性很大。這時(shí)執(zhí)行前面那三條命令就能進(jìn)入Windows。不過有幾個(gè)坑我必須提醒你。第一GRUB的磁盤分區(qū)編號(hào)是從1開始的gpt1表示第一分區(qū)和Windows里的“分區(qū)1”概念不同別混淆。第二如果你的Windows引導(dǎo)文件是bootmgfw.efi路徑就是/EFI/Microsoft/Boot/bootmgfw.efi這個(gè)路徑在絕大多數(shù)Windows安裝中是一致的但偶爾有人把引導(dǎo)文件放在了其他目錄需要用ls逐步確認(rèn)。第三輸入命令時(shí)注意大小寫和路徑分隔符GRUB對(duì)路徑大小寫敏感efi和EFI是兩個(gè)概念。這套方法能讓你臨時(shí)進(jìn)入Windows但它治標(biāo)不治本。進(jìn)入Windows后NVRAM里的引導(dǎo)順序還是亂的下次開機(jī)可能還會(huì)卡grub。因此進(jìn)入Windows后你還得做一件事刪掉或禁用GRUB的殘留啟動(dòng)項(xiàng)或者重建Windows Boot Manager為第一位。這需要在Windows的管理員命令行里操作具體做法下一節(jié)會(huì)詳細(xì)講。如果GRUB命令行顯示error: unknown filesystem或ls看不到任何分區(qū)別慌。這通常意味著GRUB對(duì)磁盤分區(qū)表的解析出了問題可能是刪分區(qū)導(dǎo)致的殘留狀態(tài)。直接走路徑B吧不要再在這里耗時(shí)間因?yàn)槭謩?dòng)命令的前提是GRUB還能讀文件系統(tǒng)如果它讀不了手動(dòng)輸入也無(wú)濟(jì)于事。4. 用Windows PE重建引導(dǎo)項(xiàng)最穩(wěn)的一條修復(fù)路徑PE盤是目前成功率最高的修復(fù)方式。它不依賴你硬盤上任何系統(tǒng)是否完好只要主板能U盤啟動(dòng)就能干活。我來(lái)完整走一遍修復(fù)流程每一步都說清楚為什么這么做。4.1 準(zhǔn)備一個(gè)能啟動(dòng)的PE盤先準(zhǔn)備一個(gè)U盤建議8GB以上在另一臺(tái)正常的Windows電腦上下載PE制作工具。常見的方案有微PE、IT天空優(yōu)啟通、Hirens BootCD PE等。這類工具會(huì)把Windows預(yù)安裝環(huán)境寫入U(xiǎn)盤啟動(dòng)后得到一個(gè)精簡(jiǎn)版Windows桌面自帶命令提示符、磁盤管理、文件資源管理器等基礎(chǔ)工具。如果你手邊只有一臺(tái)能聯(lián)網(wǎng)的Ubuntu電腦也可以下載Ubuntu Desktop ISO用dd或Startup Disk Creator做一個(gè)Live USB從Live環(huán)境進(jìn)入后使用終端操作。但說實(shí)話Windows PE在處理Windows引導(dǎo)文件的場(chǎng)景下更直觀因?yàn)閎cdboot、bootrec這類工具是Windows原生的而且PE下可以直接打開磁盤管理確認(rèn)分區(qū)狀態(tài)。制作PE盤時(shí)注意一點(diǎn)U盤會(huì)被格式化務(wù)必提前備份U盤里的數(shù)據(jù)。制作過程中BIOS啟動(dòng)方式要選對(duì)如果你的硬盤是UEFIGPT模式PE盤的制作工具一般會(huì)同時(shí)支持UEFI和Legacy啟動(dòng)但燒錄完成后最好在BIOS設(shè)置里把U盤啟動(dòng)模式調(diào)整為UEFI避免啟動(dòng)PE時(shí)模式不匹配導(dǎo)致U盤起不來(lái)。4.2 進(jìn)入PE后先確認(rèn)磁盤分區(qū)布局從U盤啟動(dòng)進(jìn)入PE桌面后千萬(wàn)不要急著敲命令。先用PE自帶的磁盤管理或DiskGenius看一眼磁盤現(xiàn)狀。你要確認(rèn)三件事第一Windows系統(tǒng)分區(qū)的盤符第二EFI系統(tǒng)分區(qū)是否存在及其盤符第三是否有MSR分區(qū)微軟保留分區(qū)殘留。這里有個(gè)容易出錯(cuò)的點(diǎn)PE環(huán)境下盤符分配和正常Windows環(huán)境下不一樣C盤不一定是系統(tǒng)盤。比如U盤啟動(dòng)時(shí)U盤占用了一個(gè)盤符Windows系統(tǒng)分區(qū)可能變成D盤或E盤。你在注冊(cè)表、引導(dǎo)文件里看到的路徑符號(hào)必須是實(shí)際盤符所以每一步操作前都要核實(shí)清楚。我的習(xí)慣是打開磁盤管理記下系統(tǒng)分區(qū)的實(shí)際盤符假設(shè)為W、EFI分區(qū)盤符假設(shè)為S然后全程用這兩個(gè)盤符操作。如果PE里磁盤管理沒法給EFI分區(qū)分配盤符別急著跳先給它分配一個(gè)。方法是在磁盤管理里找到那個(gè)很小的FAT32分區(qū)100MB到500MB之間右鍵分配盤符。EFI分區(qū)一般顯示為“EFI系統(tǒng)分區(qū)”或“恢復(fù)分區(qū)”文件系統(tǒng)是FAT32。如果沒有這個(gè)分區(qū)說明你的系統(tǒng)可能不是標(biāo)準(zhǔn)的UEFIGPT布局那可能是LegacyMBR模式修復(fù)命令要換成bootsect或bootrec系列。4.3 核心命令diskpart激活EFI分區(qū)(如有必要) bcdboot重建引導(dǎo)文件進(jìn)入PE的命令行管理員模式按順序執(zhí)行下面的命令。先說diskpart這一步它負(fù)責(zé)把EFI分區(qū)設(shè)置為活動(dòng)分區(qū)并在必要時(shí)給它分配盤符。別小看這一步很多修復(fù)失敗都是因?yàn)镋FI分區(qū)沒有活動(dòng)標(biāo)記主板根本沒把它識(shí)別為可引導(dǎo)設(shè)備。diskpart list disk sel disk 0 list partition sel partition 1 assign letterS active exit解釋一下每條命令的含義list disk列出物理磁盤sel disk 0選擇系統(tǒng)所在的那塊盤根據(jù)大小和分區(qū)布局判斷是哪塊別選錯(cuò)list partition列出該磁盤分區(qū)sel partition 1選中EFI分區(qū)通常第一個(gè)分區(qū)就是assign letterS給它分配盤符Sactive設(shè)置活動(dòng)標(biāo)記。如果你的EFI分區(qū)本身已經(jīng)有盤符assign那步可以省略但active建議執(zhí)行一次確保萬(wàn)無(wú)一失。然后執(zhí)行bcdboot重建Windows引導(dǎo)文件。這一步是整個(gè)修復(fù)的核心它的作用是把當(dāng)前Windows系統(tǒng)的引導(dǎo)文件如bootmgfw.efi復(fù)制到EFI分區(qū)并在系統(tǒng)啟動(dòng)項(xiàng)里注冊(cè)對(duì)應(yīng)的Boot Manager。bcdboot W:\Windows /s S: /f UEFI參數(shù)說明W:\Windows指向?qū)嶋H的Windows系統(tǒng)目錄/s S:指定EFI分區(qū)的盤符/f UEFI強(qiáng)制以UEFI方式寫入。執(zhí)行成功后輸出“Boot files successfully created”表示引導(dǎo)文件已經(jīng)重建。如果輸出Failure when attempting to copy boot files通常是盤符搞錯(cuò)了或EFI分區(qū)空間不足幾乎不可能EFI分區(qū)默認(rèn)100M足夠重點(diǎn)檢查盤符。到這里硬盤上的引導(dǎo)文件就搭建好了。如果你是從GRUB卡死狀態(tài)直接進(jìn)PE到這里已經(jīng)把Windows引導(dǎo)項(xiàng)重建了把NVRAM里的垃圾啟動(dòng)項(xiàng)清一清就能生效。但如果你只是重建引導(dǎo)沒有清理舊啟動(dòng)項(xiàng)可能會(huì)出現(xiàn)多個(gè)啟動(dòng)項(xiàng)并存或順序不對(duì)的情況。別急下一節(jié)專門說清理這個(gè)事。4.4 用bootrec清理殘留啟動(dòng)項(xiàng)(如適用)如果你在用bcdboot之后重啟發(fā)現(xiàn)啟動(dòng)菜單里還有Ubuntu殘留項(xiàng)、或者又自動(dòng)進(jìn)了grub說明NVRAM里還留著GRUB的啟動(dòng)記錄。用bootrec清理一下。在管理員命令行里執(zhí)行bootrec /rebuildbcd這個(gè)命令會(huì)掃描所有磁盤把Windows系統(tǒng)添加到引導(dǎo)配置數(shù)據(jù)BCD里。執(zhí)行過程中它可能會(huì)讓你選擇是否把發(fā)現(xiàn)的Windows裝入啟動(dòng)列表選是Y即可。再執(zhí)行bootrec /fixmbr這個(gè)命令重寫主引導(dǎo)記錄主要針對(duì)Legacy BIOS模式在UEFI模式下其實(shí)用不上但執(zhí)行它也無(wú)害。然后執(zhí)行bootrec /fixboot這個(gè)命令重寫引導(dǎo)扇區(qū)。注意在PE下執(zhí)行fixboot可能會(huì)提示“拒絕訪問”這是因?yàn)椴糠諴E版本對(duì)引導(dǎo)扇區(qū)寫入有限制。真遇到的時(shí)候可以重啟進(jìn)入Windows后再以管理員身份運(yùn)行一次。最后在PE下重啟拔掉U盤。如果一切正常你會(huì)看到Windows啟動(dòng)管理器選擇Windows進(jìn)入系統(tǒng)。如果還是進(jìn)grub那大概率是BIOS啟動(dòng)順序里UEFI啟動(dòng)項(xiàng)沒把Windows Boot Manager排到第一位或者NVRAM里還殘留著GRUB啟動(dòng)項(xiàng)需要在BIOS設(shè)置里手動(dòng)調(diào)整啟動(dòng)順序或者進(jìn)入Windows后用bcdedit清理殘留。4.5 其他PE可用的修復(fù)命令上面三件套是最常見的但遇到復(fù)雜情況時(shí)還需要用到這些命令bcdedit /set {bootmgr} displaybootmenu yes開啟啟動(dòng)菜單顯示。有些Windows版本默認(rèn)不顯示啟動(dòng)菜單修復(fù)后如果發(fā)現(xiàn)直接進(jìn)系統(tǒng)界面但你想留一個(gè)選擇菜單可以用這條命令。bcdedit /delete {GUID} /f刪除指定啟動(dòng)項(xiàng)。GUID可以通過bcdedit /enum查看適用于清理里殘留的“Ubuntu”或“grub”啟動(dòng)項(xiàng)。dism /Get-WindowsInfo /Image:W:\檢查映像信息。PE損壞或系統(tǒng)文件異常時(shí)可以用來(lái)排查系統(tǒng)是不是健康。每個(gè)命令都有自己的適用場(chǎng)景不一定每條都用得上但知道它們的存在會(huì)讓你在處理異常時(shí)更從容。5. 從GRUB提示符直接搶救不依賴PE的備選戰(zhàn)術(shù)前面說過如果你能進(jìn)入GRUB命令行而且GRUB還能識(shí)別磁盤和分區(qū)那么可以直接通過GRUB啟動(dòng)Windows。但這種方式有兩個(gè)大前提GRUB能讀取EFI分區(qū)的文件系統(tǒng)以及Windows引導(dǎo)文件完好。在多數(shù)“刪掉Ubuntu”的案例里這兩個(gè)前提是滿足的因?yàn)閯h掉的是Ubuntu根分區(qū)EFI分區(qū)還在Windows引導(dǎo)文件也沒被動(dòng)過。如果你的GRUB版本較新還支持search --file定位文件那就更省心??梢灾苯舆@樣grub search --file /EFI/Microsoft/Boot/bootmgfw.efi grub set root第一行命令會(huì)直接輸出包含目標(biāo)文件的分區(qū)描述比如(hd0,gpt1)接下來(lái)設(shè)置根分區(qū)為它再做鏈?zhǔn)郊虞d。這比手動(dòng)猜分區(qū)號(hào)高效得多。還有一種特殊場(chǎng)景值得提一下如果你能看到GRUB菜單里面也有Windows條目但選擇Windows后會(huì)重新跳回grub菜單或報(bào)錯(cuò)。這種情況多數(shù)是GRUB配置文件指向的Windows引導(dǎo)器路徑不對(duì)或磁盤分區(qū)變化導(dǎo)致路徑失效。可以嘗試臨時(shí)在GRUB命令行里手動(dòng)引導(dǎo)或者直接進(jìn)入Windows后用工具重裝/修復(fù)GRUB比如用Boot-Repair讓它重新檢測(cè)引導(dǎo)項(xiàng)。但既然你要解決的是“Ubuntu被刪了”的殘留問題我反而建議別重裝GRUB理由很簡(jiǎn)單Ubuntu都不在了留著GRUB當(dāng)引導(dǎo)管理器要么沒用要么還會(huì)引起新的沖突直接把Windows Boot Manager設(shè)為唯一引導(dǎo)項(xiàng)才是最省心的狀態(tài)。如果你的GRUB是rescue模式提示grub rescue而不是grub說明GRUB連自己的配置文件grub.cfg都沒讀到文件系統(tǒng)解析失敗。此時(shí)用ls確認(rèn)哪個(gè)分區(qū)有EFI目錄然后insmod加載必要模塊再手動(dòng)引導(dǎo)。但說實(shí)話在rescue模式下折騰成功率遠(yuǎn)不如直接用PE盤。如果你手頭有PE盤直接跳去章節(jié)4別在rescue模式里死磕。6. 修復(fù)完成后的善后處理與預(yù)防建議修復(fù)完成后還有幾件善后工作要做否則會(huì)面臨“過幾天又出問題”的風(fēng)險(xiǎn)。6.1 進(jìn)入Windows后先做的事清理冗余引導(dǎo)項(xiàng)與備份引導(dǎo)記錄進(jìn)入Windows桌面后以管理員身份打開命令提示符執(zhí)行bcdedit /enum firmware這個(gè)命令會(huì)列出所有UEFI固件啟動(dòng)項(xiàng)里面可能有“Ubuntu”或“grub”項(xiàng)。如果看到記錄下它的GUID一長(zhǎng)串包含大括號(hào)的字符串然后執(zhí)行bcdedit /delete {GUID} /f把殘留的Ubuntu引導(dǎo)項(xiàng)清掉這樣以后開機(jī)就不會(huì)再有GRUB的干擾。這樣做還有一個(gè)附帶好處Windows啟動(dòng)菜單會(huì)變得干凈不再出現(xiàn)一個(gè)點(diǎn)了必報(bào)錯(cuò)的“Ubuntu”條目。接著備份引導(dǎo)記錄。打開“運(yùn)行”WinR輸入msinfo32在“系統(tǒng)摘要”里找到“BIOS模式”如果是UEFI就可以放心地把當(dāng)前狀態(tài)視為一個(gè)干凈的、可復(fù)現(xiàn)的基線。在PE下執(zhí)行過bcdboot后引導(dǎo)文件已經(jīng)重新生成所以現(xiàn)在最值得做的是用備份工具把這套引導(dǎo)狀態(tài)保存下來(lái)。Windows自帶的“備份和還原”或DISM命令都能做映像備份但更簡(jiǎn)單的方式是保留一份EFI分區(qū)的內(nèi)容復(fù)制到一個(gè)本地磁盤文件夾里。萬(wàn)一以后引導(dǎo)再出問題可以用PE盤重啟把備份內(nèi)容放回去。6.2 給還在用雙系統(tǒng)的人如何避免下次誤傷引導(dǎo)如果你修復(fù)完以后還想繼續(xù)用雙系統(tǒng)比如以后又重新安裝了Ubuntu這里有幾個(gè)防止再出事的習(xí)慣刪除Ubuntu分區(qū)前先用bcdedit /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi把默認(rèn)引導(dǎo)項(xiàng)改為Windows Boot Manager確保刪除Ubuntu后系統(tǒng)能直接引導(dǎo)Windows。這是我個(gè)人強(qiáng)烈推薦的一步操作很簡(jiǎn)單但能避免90%的grub卡死問題。刪除分區(qū)時(shí)只刪Ubuntu的根目錄分區(qū)例如掛載點(diǎn)為 / 的分區(qū)保留EFI系統(tǒng)分區(qū)里由Ubuntu創(chuàng)建的目錄通常是/EFI/ubuntu/讓它留在那里等確認(rèn)Windows正常后再清理。別一上來(lái)就把整個(gè)EFI分區(qū)格式化那樣會(huì)連Windows引導(dǎo)文件一起干掉麻煩得多。重要數(shù)據(jù)都裝在Windows分區(qū)里的Ubuntu分區(qū)保持輕量化這樣刪Ubuntu時(shí)只需面對(duì)系統(tǒng)文件不需要先搶救數(shù)據(jù)。如果你在Ubuntu里有重要文件刪分區(qū)前先轉(zhuǎn)移到U盤或Windows分區(qū)。養(yǎng)成每次重大系統(tǒng)變更前做完整磁盤備份的習(xí)慣。Windows下面可以用Macrium Reflect或傲梅備份免費(fèi)版就夠用。6.3 關(guān)于開機(jī)菜單的另一種解決思路在BIOS里直接設(shè)置啟動(dòng)順序如果你不想用命令行也不想進(jìn)Windows再做一遍還有一條更直接的路線開機(jī)進(jìn)BIOS/UEFI設(shè)置手動(dòng)把Windows Boot Manager調(diào)整為第一啟動(dòng)項(xiàng)把GRUB對(duì)應(yīng)項(xiàng)禁用或調(diào)后面。這樣開機(jī)就會(huì)直接進(jìn)Windows完全繞過GRUB。這個(gè)方法本質(zhì)上不是修復(fù)只是“繞過”但它確實(shí)解決了“開機(jī)進(jìn)grub”的表層問題。不建議作為唯一手段因?yàn)镹VRAM里的垃圾項(xiàng)還在以后會(huì)出現(xiàn)奇怪的啟動(dòng)項(xiàng)沖突但如果你的Windows引導(dǎo)文件本來(lái)就完好這方法又快又干凈。我一般把它用作“修復(fù)完成后的最后一道保險(xiǎn)”先修好引導(dǎo)文件再去BIOS里把Windows設(shè)為第一雙保險(xiǎn)。7. 虛擬機(jī)環(huán)境下的特殊場(chǎng)景VMware/VirtualBox里誤刪Ubuntu怎么辦如果你是在虛擬機(jī)里玩雙系統(tǒng)比如VMware中裝了Windows作為主系統(tǒng)又裝了Ubuntu結(jié)果操作失誤導(dǎo)致無(wú)法啟動(dòng)處理思路和實(shí)機(jī)相同只是進(jìn)入PE的方式稍有不同。VMware等虛擬機(jī)的BIOS固件可以設(shè)置為UEFI磁盤分區(qū)布局可能是GPT這時(shí)候修復(fù)步驟和實(shí)機(jī)一模一樣。區(qū)別在于“U盤啟動(dòng)”這一步。理論上VMware可以給虛擬機(jī)掛載U盤啟動(dòng)但兼容性時(shí)好時(shí)壞。更穩(wěn)妥的做法是創(chuàng)建一個(gè)新的虛擬機(jī)分配一個(gè)虛擬磁盤或者掛載舊虛擬磁盤然后把系統(tǒng)安裝ISO文件作為虛擬光驅(qū)引導(dǎo)從ISO啟動(dòng)進(jìn)入PE環(huán)境比如下載一個(gè)WinPE的ISO文件在PE里對(duì)原虛擬磁盤執(zhí)行diskpart和bcdboot修復(fù)。如果你用的是VirtualBox操作邏輯類似。虛擬機(jī)的啟動(dòng)管理器里可以調(diào)整光驅(qū)優(yōu)先引導(dǎo)然后把PE ISO掛載為光驅(qū)從它啟動(dòng)進(jìn)入PE環(huán)境。修復(fù)完成后把光驅(qū)卸載啟動(dòng)順序改回硬盤啟動(dòng)即可。這里有一個(gè)坑虛擬機(jī)的EFI分區(qū)可能比較小或沒被正確初始化。在VirtualBox的VBoxManage命令里可以設(shè)置EFI固件但默認(rèn)設(shè)置可能不嚴(yán)格按UEFI方式引導(dǎo)。如果你發(fā)現(xiàn)自己這臺(tái)虛擬機(jī)用的是Legacy BIOS引導(dǎo)那么修復(fù)命令也要跟著變采用bootsect或bootrec /fixmbr這類Legacy方式而不是bcdboot的UEFI參數(shù)。判斷方法是進(jìn)入BIOS/EFI設(shè)置看有沒有UEFI字樣或者看虛擬磁盤是不是GPT分區(qū)表。還有一個(gè)容易踩的坑是虛擬磁盤從Windows主機(jī)里復(fù)制粘貼導(dǎo)致引導(dǎo)漂移。如果你把虛擬磁盤VHD/VMDK文件換成移動(dòng)盤再用掛載方式修文件誘因往往就是分區(qū)盤符變化。所以無(wú)論是實(shí)機(jī)還是虛擬機(jī)修復(fù)前一定要用diskpart確認(rèn)每個(gè)分區(qū)的身份不要憑記憶猜。對(duì)于VMware用戶還有一個(gè)低級(jí)但煩人的錯(cuò)誤啟動(dòng)虛擬機(jī)時(shí)卡在GRUB命令行很多人以為是虛擬機(jī)壞了其實(shí)是VMware的UEFI啟動(dòng)順序里GRUB排在第一、Windows Boot Manager排在第二而GRUB功能損壞。這時(shí)候在VM里進(jìn)入虛擬機(jī)的BIOS開機(jī)按Esc/F2把Windows Boot Manager調(diào)成第一啟動(dòng)項(xiàng)往往就能直接繞過GRUB啟動(dòng)Windows。當(dāng)然這只適合Windows引導(dǎo)文件本身完好的情況只能臨時(shí)繞過。8. 最后的實(shí)操心得與幾點(diǎn)注意事項(xiàng)文章寫到這里我把整個(gè)修復(fù)過程按邏輯排了一遍。最后分享幾條我折騰多次后的真實(shí)體會(huì)它們比任何命令都更重要第一修復(fù)前先冷靜確認(rèn)分區(qū)布局。我見過太多人一進(jìn)grub界面就慌連盤符都沒核實(shí)就敲bcdboot結(jié)果輸出錯(cuò)誤以為系統(tǒng)徹底完了。其實(shí)多花兩分鐘把磁盤管理和分區(qū)表看清楚后面每一步都是順理成章。第二bcdboot是關(guān)鍵中的關(guān)鍵但它的執(zhí)行前提是EFI分區(qū)存在且格式正確。如果你的EFI分區(qū)因?yàn)檎`操作被格式化了重建引導(dǎo)文件的難度會(huì)直線上升。但也不是沒救在PE里用diskpart重新創(chuàng)建EFI分區(qū)需要壓縮其他分區(qū)騰空間或利用現(xiàn)有未分配空間再用bcdboot寫入。不過這種操作有數(shù)據(jù)風(fēng)險(xiǎn)如果遇到我的建議是找專業(yè)數(shù)據(jù)恢復(fù)工具先備份重要文件再做分區(qū)調(diào)整。第三如果你完全不熟悉命令行又不放心自己操作還有一個(gè)圖形化工具可以救急Boot Repair Disk。它是一個(gè)可啟動(dòng)的Linux Live CD啟動(dòng)后運(yùn)行Boot Repair會(huì)自動(dòng)掃描并修復(fù)引導(dǎo)問題。但請(qǐng)注意它是一個(gè)Linux環(huán)境的修復(fù)工具傾向于把GRUB重新裝回啟動(dòng)項(xiàng)首位。這正好和你的需求相反——你要的是讓W(xué)indows接管引導(dǎo)。所以建議在它生成的修復(fù)選項(xiàng)里手動(dòng)檢查“Restore MBR”或“Restore Windows boot loader”或者干脆用它進(jìn)Live環(huán)境再?gòu)腖ive環(huán)境里掛載EFI分區(qū)手動(dòng)清理。這個(gè)工具更適合“Windows引導(dǎo)壞了但Ubuntu還在”的場(chǎng)景而你現(xiàn)在是“Ubuntu沒了、Windows要接管”所以主要參考它的Live環(huán)境功能。第四修復(fù)完成后不要立刻刪除PE盤或Live U盤至少在正常進(jìn)入Windows并運(yùn)行了幾天、確認(rèn)引導(dǎo)穩(wěn)定后再清空。我遇到過修復(fù)完當(dāng)天啟動(dòng)正常第二天又進(jìn)grub的情況——最后查出來(lái)是主板NVRAM里殘留了多個(gè)啟動(dòng)項(xiàng)Windows Boot Manager和GRUB互相競(jìng)爭(zhēng)需要等Windows完全啟動(dòng)后執(zhí)行bcdedit清理才能根除。保存一個(gè)工具盤相當(dāng)于給自己留了一條退路。第五重要數(shù)據(jù)永遠(yuǎn)是第一優(yōu)先級(jí)。再怎么強(qiáng)調(diào)引導(dǎo)修復(fù)技巧都不如一句“修復(fù)前先備份數(shù)據(jù)”來(lái)得實(shí)在。不管是PE盤還是Live USB啟動(dòng)后第一時(shí)間把系統(tǒng)盤里的重要文件復(fù)制到外置設(shè)備然后再做引導(dǎo)修復(fù)。文件能回來(lái)系統(tǒng)可以重裝但數(shù)據(jù)丟了就是真的沒了。如果你現(xiàn)在正對(duì)著grub黑屏界面發(fā)愁按照這篇文章的流程走一遍先確認(rèn)GRUB能不能通過手工命令臨時(shí)引導(dǎo)Windows可以就先用起來(lái)不行就用PE盤重建引導(dǎo)項(xiàng)清理殘留設(shè)置啟動(dòng)順序。整個(gè)流程大約需要半小時(shí)熟練后十分鐘內(nèi)就能搞定。修復(fù)成功的那一刻你會(huì)覺得這事其實(shí)并不神秘——它只是引導(dǎo)鏈路里一環(huán)壞了接回去就好了。