A simple Grub Restore script to Restore Debian based system for UEFI based systems
This commit is contained in:
commit
85ed8ca6a2
189
README.md
Normal file
189
README.md
Normal file
|
|
@ -0,0 +1,189 @@
|
|||
|
||||
# 🛠️ GRUB EFI Repair Script
|
||||
|
||||
If you run Windows on Dual Boot with Linux, you may have faced issues like your windows partition overwrites the linux boot loader forcing user to log in on windows.
|
||||
|
||||
This script was created to solve that issue in UEFI based Linux systems.
|
||||
|
||||
A simple Bash script to reinstall GRUB on UEFI-based Linux systems and set the correct boot order.
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Requirements & Conditions
|
||||
|
||||
Before running this script, ensure your system meets **all** of the following conditions.
|
||||
|
||||
### **1. UEFI System Required**
|
||||
|
||||
This script works **only on UEFI systems**.
|
||||
Legacy BIOS systems are **not supported**.
|
||||
|
||||
It uses:
|
||||
|
||||
```
|
||||
grub-install --target=x86_64-efi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **2. EFI Partition Must Be Mounted at `/boot/efi`**
|
||||
|
||||
Your system must have an EFI System Partition (ESP) mounted at:
|
||||
|
||||
```
|
||||
/boot/efi
|
||||
```
|
||||
|
||||
The script expects this directory to exist:
|
||||
|
||||
```
|
||||
/boot/efi/EFI
|
||||
```
|
||||
|
||||
If your distribution uses a different mount point (such as `/efi` or `/boot`), adjust the script accordingly.
|
||||
|
||||
---
|
||||
|
||||
### **3. GRUB Must Be Installed and Used**
|
||||
|
||||
This script only works with **GRUB**.
|
||||
|
||||
It does **NOT** support:
|
||||
|
||||
* systemd-boot
|
||||
* rEFInd
|
||||
* LILO
|
||||
* vendor-specific boot managers
|
||||
|
||||
Running it on these setups will result in errors.
|
||||
|
||||
---
|
||||
|
||||
### **4. `update-grub` Must Exist**
|
||||
|
||||
The script uses:
|
||||
|
||||
```
|
||||
update-grub
|
||||
```
|
||||
|
||||
This command is available only on **Debian-based** systems:
|
||||
|
||||
* Debian
|
||||
* Ubuntu
|
||||
* Linux Mint
|
||||
* Kali
|
||||
* MX Linux
|
||||
|
||||
It will **not** work on:
|
||||
|
||||
* Fedora / RHEL / CentOS / Rocky / AlmaLinux
|
||||
* Arch Linux / Manjaro
|
||||
* OpenSUSE
|
||||
|
||||
Those use `grub2-mkconfig`.
|
||||
|
||||
---
|
||||
|
||||
### **5. Bootloader ID Defaults to “Debian”**
|
||||
|
||||
The GRUB installation uses:
|
||||
|
||||
```
|
||||
--bootloader-id=Debian
|
||||
```
|
||||
|
||||
Different distros use different EFI bootloader IDs:
|
||||
|
||||
* Ubuntu → `ubuntu`
|
||||
* Fedora → `fedora`
|
||||
* Linux Mint → `LinuxMint`
|
||||
* Arch Linux → `arch`
|
||||
|
||||
Update this value if needed.
|
||||
|
||||
---
|
||||
|
||||
### **6. Requires `efibootmgr` Support**
|
||||
|
||||
The script modifies UEFI boot order using:
|
||||
|
||||
```
|
||||
efibootmgr -o
|
||||
```
|
||||
|
||||
This requires:
|
||||
|
||||
* Firmware that allows BootOrder modification
|
||||
* Root access
|
||||
|
||||
Some cloud/VPS providers restrict this capability.
|
||||
|
||||
---
|
||||
|
||||
### **7. Must Be Run as Root**
|
||||
|
||||
You must run the script with `sudo` or as root because it executes privileged commands:
|
||||
|
||||
* `grub-install`
|
||||
* `update-grub`
|
||||
* `efibootmgr`
|
||||
|
||||
---
|
||||
|
||||
### **8. Multi-Boot Systems**
|
||||
|
||||
If multiple OSes are installed (e.g., Windows + Linux), this script will set **Debian GRUB as the first boot entry**, overriding others.
|
||||
|
||||
---
|
||||
|
||||
### **9. Risk Warning**
|
||||
|
||||
Changing GRUB/EFI settings can make a system unbootable if misconfigured.
|
||||
|
||||
Recommended:
|
||||
|
||||
* Keep a bootable USB handy
|
||||
* Confirm your EFI mount point
|
||||
* Back up important data
|
||||
|
||||
---
|
||||
|
||||
## 📜 Usage
|
||||
|
||||
Make the script executable:
|
||||
|
||||
```
|
||||
chmod +x grub-fix.sh
|
||||
```
|
||||
|
||||
Run the script:
|
||||
|
||||
```
|
||||
sudo ./grub-fix.sh
|
||||
```
|
||||
|
||||
Reboot when done.
|
||||
|
||||
---
|
||||
|
||||
## ✔ What the Script Does
|
||||
|
||||
1. Verifies EFI directory presence
|
||||
2. Lists available EFI boot entries
|
||||
3. Reinstalls GRUB to the EFI System Partition
|
||||
4. Updates GRUB configuration
|
||||
5. Detects the Debian boot entry
|
||||
6. Sets Debian as the first boot option
|
||||
7. Completes cleanly
|
||||
|
||||
---
|
||||
|
||||
## 📌 Notes
|
||||
|
||||
This script is designed for **Debian-based Linux systems** with a standard EFI layout.
|
||||
It is **not guaranteed to work on all Linux distributions**.
|
||||
|
||||
---
|
||||
|
||||
|
||||
34
restore-grub.sh
Normal file
34
restore-grub.sh
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== Checking EFI directories ==="
|
||||
ls /boot/efi/EFI || { echo "EFI partition not mounted!"; exit 1; }
|
||||
|
||||
echo "EFI entries found:"
|
||||
ls /boot/efi/EFI/
|
||||
|
||||
echo "=== Reinstalling GRUB to EFI partition ==="
|
||||
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Debian
|
||||
|
||||
echo "=== Updating GRUB ==="
|
||||
sudo update-grub
|
||||
|
||||
echo "=== Fixing boot order (setting Debian to first) ==="
|
||||
# Find Debian boot entry number
|
||||
DEBIAN_BOOTNUM=$(sudo efibootmgr | grep -i debian | grep -oP 'Boot\K[0-9A-Fa-f]{4}')
|
||||
|
||||
if [ -z "$DEBIAN_BOOTNUM" ]; then
|
||||
echo "Error: Could not find Debian entry in efibootmgr!"
|
||||
sudo efibootmgr
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Found Debian entry: Boot$DEBIAN_BOOTNUM"
|
||||
echo "Setting Debian as first boot option..."
|
||||
|
||||
sudo efibootmgr -o $DEBIAN_BOOTNUM
|
||||
|
||||
echo "=== Done! ==="
|
||||
echo "Reboot your system and GRUB should load first."
|
||||
|
||||
Loading…
Reference in New Issue
Block a user