Linux-Kernel

更新時休眠後 rEFInd 找不到 Linux

  • July 15, 2021

不幸的是,在更新的安裝部分,我的筆記型電腦在執行更新時因電量不足而休眠。

在啟動時 rEFInd 只顯示 Windows 而不是 Manjaro。

該更新的規模相當大,其中包括 Linux 核心。

在閱讀了 rEFInd 的文件後,作者指出它在查找核心方面做得非常好。我也知道 Linux 可以在執行時自我更新,而且對於大多數(如果不是全部)程序可以繼續執行,並在重新啟動後開始使用更新的文件。

我的想法是執行系統,即更新前的系統,在記憶體中,而更新被寫入磁碟並安裝在正確的位置。知道休眠會將 RAM 寫入我的交換分區,我正在嘗試引導的系統(應該在 RAM 中的系統)現在已換出。

我的問題是,知道我在 USB 上有基於 Linux 的發行版,是否可以以恢復上一個會話的方式啟動並且更新恢復,就好像什麼都沒發生一樣?

如果沒有,我能否安全地 chroot 進入 Manjaro,更新它,清除交換,然後正常啟動它,因為一切都安裝了一半?Pacman 將如何應對呢?

chroot我可以使用可啟動的 USB 記憶棒從實時作業系統修復此問題。我現在將逐步描述我為解決此問題所做的工作。

  1. 獲得一個可啟動的 U 盤 ===============

任何基於 Linux 的作業系統都可以,只要它具有基本實用程序(大多數都具有),例如chrootfsck.

2.啟動實時作業系統

將 USB 記憶棒或任何你有實時作業系統的地方插入你的電腦並從它啟動,無論是從引導載入程序還是從 BIOS。

  1. chroot 進入你損壞的系統 ==================

現在我們正在一個外部系統中工作,我們將使用它直接從終端訪問我們損壞的系統。

3.1。手動方式

此過程或多或少是通用的,您可能必鬚根據分區佈局進行更改,並且需要特權訪問,在此範例中使用sudo.

首先讓我們創建一個目錄,我們將在其中掛載損壞的系統/目錄:

mkdir broken-root

現在我們必須將文件系統掛載到該文件夾中。使用任何可以讓您查找應該預安裝在您的實時作業系統中的所有可用分區(例如:gparted)的工具,查找您損壞的作業系統的根分區。在這個例子中,讓我們考慮根分區是 /dev/sda2

sudo mount /dev/sda2 broken-root

現在我們還必須掛載引導分區。此步驟將取決於您如何引導系統。如果您使用的是 EFI,並假設您的引導分區是由給定的, /dev/sda1則使用以下命令安裝它:

sudo mount /dev/sda1 broken-root/boot/efi

如果您的系統沒有使用 EFI,請尋找安裝引導分區的正確方法。

我們還必須綁定係統目錄:

sudo mount --bind /proc /broken-root/proc
sudo mount --bind /dev /broken-root/dev
sudo mount --bind /sys /broken-root/sys

最後啟用網路:

sudo cp /etc/resolv.conf /broken-root/etc/

我們現在可以chroot進入系統:

sudo chroot broken-root

3.2. 自動化方式

有一些工具可以為您自動執行此過程。我發現的是arch-chrootmanjaro-chroot,但可能有更多的自動化工具可用於不同的作業系統。

4.檢查文件系統是否有錯誤

執行sudo fsck /dev/sda2以檢查根分區中的錯誤並修復它們。我在更新後這樣做了,但在更新時發現了一些錯誤,所以之前這樣做可能是一個更好的主意。

  1. 執行更新 =======

現在您已進入損壞的系統,您現在可以進行更新。因為我的系統在更新中休眠,pacman 鎖定了自己,所以你必須刪除位於的文件/var/lib/pacman/db.lck才能繼續。

解除鎖定後,使用sudo pacman -Syu.

即使在這之後可能會有問題,至少我有,所以我跑去sudo pacman -Qkk列出有問題的包,當然,核心就是其中之一。然後重新安裝所有顯示問題的軟體包。

**注意:**該-Qkk標誌非常冗長,它列出了預期的內容,只查找最相關的內容!

6.擦乾淨交換

我忘了做這件事,遇到了一個試圖恢復其先前狀態的系統,但在它睡眠時進行了更改,最後出現了一個充滿錯誤的黑屏,並通過拔掉電源強制我的電腦關機它。

要解決此問題,請在仍在您的實時作業系統中時,禁用從交換恢復,這就是我所做的,或者清除您的交換文件或分區。它應該以任何一種方式工作,但我建議從交換中禁用恢復,然後在您現在修復的作業系統中將其擦乾淨,僅僅是因為它對我有用。

7.就是這樣!

現在再次啟動我的電腦後,Manjaro 出現在我的引導載入程序中。我像往常一樣從它啟動,它沒有顯示任何錯誤,一切似乎都按預期工作。

參考

ArchWiki - chroot

Manjaro Wiki - Grub/恢復 GRUB 引導程序

TecMint - 如何使用“fsck”修復 Linux 中的文件系統錯誤

Arch 論壇 - 關於 pacman -Qk 和 -Qkk 輸出的問題

引用自:https://unix.stackexchange.com/questions/658412