2022年10月1日 星期六

重新安裝 grub 的程序步驟

  1.  以任一款 Linux OS (與你要修復的 Linux OS 同款最好) 的 Live USB 開機。

  2.  查看硬碟分區狀態:
    $sudo fdisk -l

    Disk /dev/sda: 232.89 GiB, 250059350016 bytes, 488397168 sectors
    Disk model: WDC WD2500AAJS-0
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0xd273611e

    Device     Boot  Start           End     Sectors     Size  Id        Type
    /dev/sda1  *       2048     206847     204800  100M   ef    EFI (FAT-12/16/32)
    /dev/sda2       206848 61646847 61440000 29.3G   83   Linux

  3. 全程使用超級使用者身分

    home@mint: ~$ sudo -s (或 sudo -i )
    root@mint: /home@mint# cd (注意粗體部份的變化)

  4. 掛載磁區
    root@mint: /home@mint# mkdir /mnt/boot
    root@mint: /home@mint# mkdir /mnt/boot/efi
    root@mint: /home@mint# mount /dev/sda2 /mnt
    root@mint: /home@mint# mount /dev/sda1 /mnt/boot/efi

  5. 將 /mnt 暫時虛擬為根目錄

    為防止在 chroot 时,出現下面的警告:
    chroot: failed to run command '/bin/bash': No such file or directory
    root@mint: ~# for dir in /root /opt /proc /dev /sys /etc /bin /sbin /var /usr /lib /lib64 /tmp; do  mkdir /mnt$dir && mount  -B $dir /mnt$dir; done

    為防止在 grub-install 时,出現下面的警告:
    Installing for x86_64-efi platform.
    grub-install: warning: EFI variables are not supported on this system.
    root@mint: ~# for dir in /sys/firmware/efi/efivars; do mount  -B $dir /mnt$dir; done

    root@mint: ~# chroot /mnt(
    注意粗體部份的變化)

  6. 刪除既有 grub
    root@mint: ~#  dpkg --configure -a
    root@mint: ~# apt-get install -fy
    root@mint: ~# apt-get purge --allow-remove-essential -y grub-com*
    root@mint: ~# apt-get purge --allow-remove-essential -y grub2-com*
    root@mint: ~# apt-get purge --allow-remove-essential -y shim-signed
    root@mint: ~# apt-get purge --allow-remove-essential -y grub-common:*
    root@mint: ~# apt-get purge --allow-remove-essential -y grub2-common:*

  7. 重新安裝 grub
    root@mint: ~# apt-get install -y grub-efi

  8. UEFI 啟動用(有兩個作法都可採用)
    root@mint: ~# grub-install --target=x86_64-efi --efi-directory=/boot/efi /dev/sda

    root@mint: ~# grub-install /dev/sda

    如果出現下面,就一切OK
    Installing for x86_64-efi platform.
    Installation finished. No error reported.

  9. 更新 grub 產生/boot/grub/grub.cfg

    /boot/grub/grub.cfg=/etc/grub.d/01~ + /etc/default/grub + others
    先編寫 /etc/grub.d/40_custom,加入 menuentry
    再修改 /etc/default/grub,加入 GRUB_DISABLE_OS_PROBER=false、變動預設啟動順序及選單是 hidden (不出現) 或 menu (出現)

    root@mint: ~# update-grub


    root@mint: ~# grub-mkconfig -o /boot/grub/grub.cfg

  10. 離開
    Ctrl + D 先跳出 chroot /mnt 環境
    Ctrl + D 再跳出超级使用者環境
    reboot
參考資料:Debian Wiki