System Won't Boot / GRUB Rescue

Can't get into Linux? Here's how to fix the most common boot problems, from GRUB rescue to black screens.

Symptoms

"I see GRUB rescue>"

This means GRUB can't find its configuration files. Usually happens after resizing partitions, moving things around, or a failed update. Here's how to boot manually from the rescue prompt:

# Step 1: List available partitions
ls

# Step 2: Find which partition has your Linux install
# Try each one until you find it:
ls (hd0,gpt2)/
ls (hd0,gpt3)/
# You're looking for the one that shows directories like bin, etc, home, usr

# Step 3: Set the root and boot
set root=(hd0,gpt2)
set prefix=(hd0,gpt2)/boot/grub
insmod normal
normal

If that works, you'll get the normal GRUB menu. Boot into Linux, then reinstall GRUB properly (see below) so you don't have to do this again.

Quick tip: In the GRUB rescue prompt, use Tab for autocomplete. Type ls (hd0, and press Tab to see available partitions.

"I see a black screen"

A black screen at boot (not the same as GRUB rescue) is usually caused by a graphics driver issue or bad kernel parameters. This is different from an NVIDIA driver black screen which happens after you install drivers.

Try adding kernel parameters at boot

  1. At the GRUB menu, highlight your Linux entry and press E to edit
  2. Find the line starting with linux (it ends with quiet splash or similar)
  3. Add one of these to the end of that line:
# Try each of these one at a time:
nomodeset                    # Disables kernel mode setting (most common fix)
acpi=off                     # Disables ACPI (if nomodeset doesn't work)
nouveau.modeset=0            # Disables nouveau specifically
i915.modeset=0               # Disables Intel graphics KMS
  1. Press Ctrl+X or F10 to boot with those parameters
nomodeset is a temporary fix. It disables proper graphics drivers, so you'll get low resolution and no GPU acceleration. Use it to get in, then install the correct GPU drivers. See the NVIDIA troubleshooting page if you have an NVIDIA card.

"Windows boots but Linux doesn't"

This is very common after a Windows update. Windows likes to overwrite the UEFI boot order and put itself first, hiding GRUB. Your Linux installation is still there, Windows just pushed it aside.

Quick fix: Change boot order in UEFI

  1. Restart and enter your UEFI/BIOS setup (usually F2, F12, Del, or Esc during POST)
  2. Go to the Boot tab
  3. Look for "ubuntu", "fedora", or "Linux" in the boot entries
  4. Move it above "Windows Boot Manager"
  5. Save and exit

If Linux isn't in the boot list at all, you'll need to reinstall GRUB from a live USB (see below).

Prevention: See the Dual Boot page for how to prevent Windows from overwriting your boot order in the future.

How to Reinstall GRUB from a Live USB

This is the nuclear option that fixes most boot problems. You'll need a Linux live USB (Ubuntu, Fedora, or any distro).

UEFI systems (most modern computers)
# 1. Boot from the live USB

# 2. Open a terminal and find your partitions
lsblk
# Identify your Linux root partition (e.g., /dev/sda2 or /dev/nvme0n1p2)
# Identify your EFI partition (usually 512MB FAT32, e.g., /dev/sda1)

# 3. Mount your Linux root partition
sudo mount /dev/sda2 /mnt

# 4. Mount the EFI partition
sudo mount /dev/sda1 /mnt/boot/efi

# 5. Mount the necessary system directories
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run

# 6. Chroot into your system
sudo chroot /mnt

# 7. Reinstall GRUB
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

# 8. Exit and reboot
exit
sudo umount -R /mnt
sudo reboot
NVMe drives: If your disk is an NVMe SSD, the partition names look like /dev/nvme0n1p1, /dev/nvme0n1p2, etc. Replace /dev/sda1 and /dev/sda2 accordingly.
Legacy BIOS systems
# Same as above, but skip the EFI partition mount
# and use a different grub-install command:

sudo mount /dev/sda2 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt

# Install GRUB to the disk (not a partition!)
grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

exit
sudo umount -R /mnt
sudo reboot
Using boot-repair (Ubuntu-based, easy mode)

If you're on an Ubuntu live USB and don't want to type all those commands, there's a graphical tool:

# Add the boot-repair PPA and install it
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt update
sudo apt install boot-repair

# Run it
boot-repair

Click "Recommended repair" and it will try to fix everything automatically.

Switching to systemd-boot

Tired of GRUB breaking? systemd-boot (formerly gummiboot) is a simpler, lighter bootloader that's less likely to break. Pop!_OS and some Arch setups use it by default.

Why switch? Pros and cons

Pros:

  • Much simpler - just a few config files in /boot/efi
  • Faster boot times
  • Less likely to break during updates
  • Easy to understand and maintain

Cons:

  • Only works on UEFI systems (no legacy BIOS)
  • No theming or fancy boot menus
  • Less automatic - you manage kernel entries yourself (or use a hook)
  • Some distros don't officially support it
How to set up systemd-boot (Arch)
# Install systemd-boot to the EFI partition
sudo bootctl install

# Create a boot entry
sudo nano /boot/loader/entries/arch.conf

Add this content (adjust the root partition UUID):

title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options root=UUID=YOUR-ROOT-UUID-HERE rw quiet

Get your root UUID with:

blkid /dev/sda2   # or your root partition

Set the default loader:

sudo nano /boot/loader/loader.conf
default arch.conf
timeout 3
console-mode max

Remove GRUB if everything works:

sudo pacman -Rns grub

Kernel Panic / Initramfs Shell

What this means and how to fix it

If you see (initramfs) prompt or a "kernel panic" message, it usually means the kernel can't find or mount your root filesystem. Common causes:

  • Corrupted filesystem - try running fsck
  • Wrong UUID in fstab or GRUB config - partition UUID changed after resizing
  • Missing initramfs - kernel update went wrong
# At the (initramfs) prompt, try:
fsck /dev/sda2 -y    # Replace with your root partition
exit                 # Try to continue booting

# If that doesn't work, boot from a live USB and:
sudo mount /dev/sda2 /mnt
sudo chroot /mnt

# Rebuild initramfs
# Ubuntu/Debian:
update-initramfs -u -k all

# Arch:
mkinitcpio -P

# Fedora:
dracut --force

# Then check /etc/fstab for wrong UUIDs
blkid              # Shows actual UUIDs
cat /etc/fstab     # Shows what the system expects