修復UEFI模式下Manjaro Linux啟動問題

apocelipes發表於2018-12-28

上週在更新Manjaro Linux的時候誤觸了電源鍵,導致核心更新了一半系統強制關機,重啟時正常進入grub但無法正常引導進入系統。

由於不想重灌系統(一大堆環境和工具的配置還是相當繁瑣的),加上初步判斷應該僅僅是核心引導映象沒能正常安裝導致的問題,所以決定先用liveUSB進行急救。

需要準備的工具:

  • 一個使用較新版本Manjaro Linux的liveUSB(可以使用dd將映象直接寫入u盤)
  • 待修復裝置需要聯網環境(沒有其實也不用擔心,不過最好還是需要聯網環境)

下面開始修復啟動。

首先通過liveUSB啟動,在liveUSB的中我們原先的系統檔案是儲存在電腦的磁碟上的,預設不會被掛載,所以我們先要把除了/home以外的系統目錄掛載到當前的任意目錄,我們選擇掛載在/mnt中:

sudo mkdir /mnt/manjaro
sudo mount /dev/sda2 /mnt/manjaro # sda2為/分割槽所在裝置,可以使用lsblk檢視

隨後是關鍵的一步,因為在UEFI下安裝Manjaro Linux時我們都額外為/boot/efi/進行了單獨的分割槽,所以我們這裡也需要掛載它。預設掛載根目錄時並不會掛載這個目錄,因為它們不在同一個分割槽,我的efi目錄根據lsblk顯示位於/dev/sda1:

$ lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk
├─sda1   8:1    0   200M  0 part /boot/efi
├─sda2   8:2    0  50.8G  0 part /
└─sda3   8:3    0 414.8G  0 part /home

所以我們把efi目錄也掛載進檔案系統,否則核心無法重新安裝:

sudo mount /dev/sda1 /mnt/manjaro/boot/efi

另外對於一些虛擬目錄,例如/dev和/sys,我們也需要手動繫結,否則chroot後執行pacman會出錯:

sudo mount --bind /dev /mnt/manjaro/dev
sudo mount --bind /proc /mnt/manjaro/proc
sudo mount --bind /sys /mnt/manjaro/sys

這樣系統檔案就準備完成了,現在我們在掛載目錄下chroot,然後重新安裝核心:

cd /mnt/manjaro
chroot .
pacman -S linux # 如果這一步報錯,檢查自己系統目錄是否正確掛載,如果正確掛載則先執行pacman -S archlinux-keyring
# 核心重灌完成後繼續上次未完成的系統更新
pacman -Syu

如果你安裝了不同版本的核心的話,這樣只能修復系統預設版本的核心,對於Manjaro 18.0來說是4.14.x。
所以在grub引導介面我們需要選擇對應的版本才能正常啟動,如果想恢復其他版本的核心,可以在用預設版本核心啟動後去Manjaro Settings Manager中重新安裝。

這樣就避免了重灌修復了Manjaro的啟動問題。

相關文章