搶救並重建硬碟的 grub

前幾週,不知何故,電腦的 Grub 毀損,所以導致電腦無法開機。

搶救的原理,(1)先想辦法開機,(2)掛載原磁碟目錄進行檢查,看資料有無損毀,(3)若資料無問題,利用 chroot 原理,切回原系統,進行 grub 重建。

過程如下:

  1. 想辦法開機。
  2. 可以使用安裝光碟片或是 安裝 USB ,Live CD/USB 等等,開機後,進入「Rescue」模式。

  3. 掛載原磁碟目錄進行檢查,看資料有無損毀。
  4. 我的硬碟分割成四區,分別為:

    /dev/nvme0n1p1 ==> /boot/efi
    /dev/nvme0n1p2 ==> /home
    /dev/nvme0n1p3 ==> swap
    /dev/nvme0n1p4 ==> /

     

    又,我的硬碟為「固態硬碟」,採用 Btrfs 檔案系統的次磁碟區(subvolume)結構,因此會以 @ 開頭的次磁碟區來區分根目錄和家目錄。

    可用以下方法來確認根目錄次磁碟區名稱。
    sudo btrfs subvolume list /dev/nvme0n1p4

    如果結果顯示 @rootfs,則證明根目錄次磁碟區名稱是 @rootfs。

    確認根目錄後,在救援系統裡找個目錄,例如 /mnt ,在其底下目錄下建個空的目錄,再將原硬碟根目錄掛載上來,此時可以考慮用磁區名稱來命名,以免掛載上來時,搞混了。所以:

    sudo mkdir /mnt/nvme0n1p4

    ## /dev/nvme0n1p4 為 根目錄
    sudo mount -o subvol=@rootfs /dev/nvme0n1p4 /mnt/nvme0n1p4

    ## /dev/nvme0n1p2 為 /boot/efi ,所以要掛載到 /mnt/nvme0n1p4/boot/efi
    sudo mount -o subvol=@rootfs /dev/nvme0n1p1 /mnt/nvme0n1p4/boot/efi

     

  5. 利用 chroot 切回原系統
  6. 因為要利用 chroot 來切換回原來系統,所以要掛載必要檔案系統,再 chroot 過去:

    ##先掛載必要檔案系統
    sudo mount –bind /dev /mnt/nvme0n1p4/dev
    sudo mount –bind /proc /mnt/nvme0n1p4/proc
    sudo mount –bind /sys /mnt/nvme0n1p4/sys

    ##再chroot 過去原系統
    sudo chroot /mnt/nvme0n1p4

     

  7. 重建 grub 系統與選單。
  8. ##因為系統是 UEFI,所以指令如下:
    grub-install –target=x86_64-efi –efi-directory=/boot/efi –bootloader-id=debian

    ##更新 GRUB 配置文件,讓它能偵測到系統核心。
    update-grub

     

  9. 完成上述工作後,卸載剛剛掛載上的所有目錄,重新開機。
  10.  

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*