2018/10/03

Arch Linux 升級中電腦當機恢復經驗談

2020/05/31 06:34 正在做 Arch Linux 升級系統, 同時一邊瀏覽網頁,可能是記憶體耗盡,系統當機,結果開機失敗
2018/10/01 22:20 正在做 Arch Linux 升級系統 yay,中途突然當機(可能是CPU熱當吧!?),結果再也開不了機(開機kernel檔長度為0),費了一番功夫終於在10/3 23:00 修復,簡述修復方式如下
1. 開機(2選1)

  1. 2018年方式, 下載安裝 SystemRescueCD,使用它開機(因為我的grub2還能工作,實際上我平常就放一份備用)
  2. 2020年方式, grub2 無法運作, 因為 ntfs 改格式, 我 grub 沒有更新,檔案放在新版 ntfs 磁區,造成無法透過grub2直接以 iso 檔開機, 改用 rufus 先做出 Archlinux live usb 開機碟,再用它開機
2. 確認開機碟可以上網
3. 掛載舊 linux 磁區

  1. 2018年方式, 開機完畢,使用以下指令掛載硬碟(假設 Arch Linux Partition 在 /dev/sda6)
    mkdir /mnt/arch
    mount /dev/sda6 /mnt/arch
    /mnt/arch/bin/arch-chroot /mnt/arch
  2. 2020年方式, 照 Arch Linux 官方方式, 不另建目錄
    lsblk -fs # 先看一下哪個磁區
    mount /dev/sda6 /mnt           # 假設原本根目錄在 sda6
    mount /dev/sda5 /mnt/boot   # 假設原本 /boot 在 sda5 (若沒有特別分割,可省略此步

4. 檢查哪些套件毀損

pacman -Qkk 2>&1 |grep err  # try to reinstall all packages in this listing
pacman -Qkk 2>&1 |grep warn  # try to reinstall all packages in this listing

5. 因為故障套件多達10多個,所以產生列表重建較容易

pacman -Qkk  2>&1 | grep error: > /tmp/1
cat /tmp/1 | awk '{print $6}' | awk -F/ '{print $6}' > /tmp/2
cat /tmp/2 | sed 's/-[0-9.]*-[0-9]*$//' > /tmp/3
vim /tmp/3 # 手動挑除設定檔不能使用內定值的套件
pacman -S `cat /tmp/3` --no-confirm --overwrite '*'  # 強迫重裝


2020年經驗, 發現出現訊息 /usr/lib/libcryptsetup.so.12.6.0  empty, 打算重裝 cryptsetup 時,又出PGP 驗證失敗,強迫驗證方式是將 /etc/pacman.conf 中的暫時改成 SigLevel = Never, 然後再下 pacman -S --overwrite '*' cryptsetup 想不到又出現 sqlite 錯誤, 只好先更新 sqlite, 更新成功後,把 SigLevel 改回原本設定.

pacman -Syu # 重新更新一下系統


6. grub 更新

grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

5. 重開機

沒有留言: