2018/10/01 22:20 正在做 Arch Linux 升級系統 yay,中途突然當機(可能是CPU熱當吧!?),結果再也開不了機(開機kernel檔長度為0),費了一番功夫終於在10/3 23:00 修復,簡述修復方式如下
1. 開機(2選1)
- 2018年方式, 下載安裝 SystemRescueCD,使用它開機(因為我的grub2還能工作,實際上我平常就放一份備用)
- 2020年方式, grub2 無法運作, 因為 ntfs 改格式, 我 grub 沒有更新,檔案放在新版 ntfs 磁區,造成無法透過grub2直接以 iso 檔開機, 改用 rufus 先做出 Archlinux live usb 開機碟,再用它開機
2. 確認開機碟可以上網
3. 掛載舊 linux 磁區
- 2018年方式, 開機完畢,使用以下指令掛載硬碟(假設 Arch Linux Partition 在 /dev/sda6)
mkdir /mnt/arch
mount /dev/sda6 /mnt/arch
/mnt/arch/bin/arch-chroot /mnt/arch - 2020年方式, 照 Arch Linux 官方方式, 不另建目錄
lsblk -fs # 先看一下哪個磁區
mount /dev/sda6 /mnt # 假設原本根目錄在 sda6
mount /dev/sda5 /mnt/boot # 假設原本 /boot 在 sda5 (若沒有特別分割,可省略此步
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. 重開機
沒有留言:
張貼留言