從損壞的Linux EFI安裝中恢復
在過去的十多年里,Linux 發行版在安裝前、安裝過程中、以及安裝后偶爾會失敗,但我總是有辦法恢復系統并繼續正常工作。然而,Solus 損壞了我的筆記本。
GRUB 恢復。不行,重裝。還不行!Ubuntu 拒絕安裝,目標設備的報錯一會這樣,一會那樣。哇。我之前還沒有遇到過像這樣的事情。我的測試機已變成無用的磚塊。難道我該絕望嗎?不,絕對不。讓我來告訴你怎樣你可以修復它吧。
問題詳情
所有事情都從 Solus 嘗試安裝它自己的啟動引導器 - goofiboot 開始。不知道什么原因、它沒有成功完成安裝,留給我的就是一個無法啟動的系統。經過 BIOS 引導之后,我進入一個 GRUB 恢復終端。
我嘗試在終端中手動修復,使用類似和我在我詳實的 GRUB2 指南中介紹的各種命令。但還是不行。然后我嘗試按照我在 GRUB2 和 EFI 指南中的建議從 Live CD 中恢復(LCTT 譯注:Live CD 是一個完整的計算機可引導安裝媒介,它包括在計算機內存中運行的操作系統,而不是從硬盤驅動器加載;CD 本身是只讀的。 它允許用戶為任何目的運行操作系統,而無需安裝它或對計算機的配置進行任何更改)。我用 efibootmgr 工具創建了一個引導入口,確保標記它為有效。正如我們之前在指南中做的那樣,之前這些是能正常工作的。哎,現在這個方法也不起作用。
我嘗試做一個完整的 Ubuntu 安裝,把它安裝到 Solus 所在的分區,希望安裝程序能給我一些有用的信息。但是 Ubuntu 無法完成安裝。它報錯:failed to install into /target。又回到開始的地方了。怎么辦?
手動清除 EFI 分區
顯然,我們的 EFI 分區出現了嚴重問題。簡單回顧以下,如果你使用的是 UEFI,那么你需要一個單獨的 FAT-32 格式化的分區。該分區用于存儲 EFI 引導鏡像。例如,當你安裝 Fedora 時,Fedora 引導鏡像會被拷貝到 EFI 子目錄。每個操作系統都會被存儲到一個它自己的目錄,一般是 /boot/efi/EFI/<操作系統版本>/。
在我的 G50 機器上,這里有很多各種發行版測試條目,包括:centos、debian、fedora、mx-15、suse、Ubuntu、zorin 以及其它。這里也有一個 goofiboot 目錄。但是,efibootmgr 并沒有在它的菜單中顯示 goofiboot 條目。顯然這里出現了一些問題。
- sudo efibootmgr -d /dev/sda
- BootCurrent: 0001
- Timeout: 0 seconds
- BootOrder: 0001,0005,2003,0000,2001,2002
- Boot0000* Lenovo Recovery System
- Boot0001* ubuntu
- Boot0003* EFI Network 0 for IPv4 (68-F7-28-4D-D1-A1)
- Boot0004* EFI Network 0 for IPv6 (68-F7-28-4D-D1-A1)
- Boot0005* Windows Boot Manager
- Boot0006* fedora
- Boot0007* suse
- Boot0008* debian
- Boot0009* mx-15
- Boot2001* EFI USB Device
- Boot2002* EFI DVD/CDROM
- Boot2003* EFI Network
- ...
P.S. 上面的輸出是在 LIVE 會話中運行命令生成的!
我決定清除所有非默認的以及非微軟的條目然后重新開始。顯然,有些東西被損壞了,妨礙了新的發行版設置它們自己的啟動引導程序。因此我刪除了 /boot/efi/EFI 分區下面除了 Boot 和 Windows 以外的所有目錄。同時,我也通過刪除所有額外的條目更新了啟動管理器。
- efibootmgr -b <hex> -B <hex>
***,我重新安裝了 Ubuntu,并仔細監控 GRUB 安裝和配置的過程。這次,成功完成啦。正如預期的那樣,幾個無效條目出現了一些錯誤,但整個安裝過程完成就好了。
額外閱讀
如果你不喜歡這種手動修復,你可以閱讀:
Boot-Info 手冊,里面有幫助你恢復系統的自動化工具
Boot-repair-cd 自動恢復工具下載頁面
總結
如果你遇到由于 EFI 分區破壞而導致系統嚴重癱瘓的情況,那么你可能需要遵循本指南中的建議。 刪除所有非默認條目。 如果你使用 Windows 進行多重引導,請確保不要修改任何和 Microsoft 相關的東西。 然后相應地更新引導菜單,以便刪除損壞的條目。 重新運行所需發行版的安裝設置,或者嘗試用之前介紹的比較不嚴謹的修復方法。
我希望這篇小文章能幫你節省一些時間。Solus 對我系統的更改使我很懊惱。這些事情本不應該發生,恢復過程也應該更簡單。不管怎樣,雖然事情似乎很可怕,修復并不是很難。你只需要刪除損害的文件然后重新開始。你的數據應該不會受到影響,你也應該能夠順利進入到運行中的系統并繼續工作。開始吧。
加油。
作者簡介:
我叫 Igor Ljubuncic。38 歲,已婚,但還沒有小孩。我現在是一個云技術公司的***工程師,前端新手。在 2015 年年初之前,我在世界上***的 IT 公司之一的工程計算團隊擔任操作系統架構師,開發新的基于 Linux 的解決方案、優化內核、在 Linux 上實現一些好的想法。在這之前,我是一個為高性能計算環境設計創新解決方案團隊的技術主管。其它一些頭銜包括系統專家、系統開發員或者類似的。所有這些都是我的愛好,但從 2008 年開始,就是有報酬的工作。還有什么比這更令人滿意的呢?
從 2004 到 2008 年,我通過在醫療圖像行業擔任物理專家養活自己。我的工作主要關注解決問題和開發算法。為此,我廣泛使用 Matlab,主要用于信號和圖像處理。另外,我已通過幾個主要工程方法的認證,包括 MEDIC Six Sigma Green Belt、實驗設計以及統計工程。