上週在更新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的啟動問題。