Skip to content

How to Fix GRUB Boot Failure in Linux Pop!_OS

  • Linux

My Journey from GRUB to Systemd-boot

So, I ran into a pretty frustrating issue with my laptop a while back. I’ve been dual-booting Pop!_OS and Windows for ages, and I was using GRUB to pick between the two at startup. But one day, Pop!_OS just wouldn’t boot. I’d turn on my laptop, and instead of seeing the usual GRUB menu to choose my OS, I got stuck at this weird screen that said:

GRUB version 2.06

Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists possible device or file completions.

grub>

 

I had no idea what to do at first. It was like GRUB forgot how to load my system and just dumped me into this rescue shell thing. After some digging and a lot of trial and error, I figured out how to get back into Pop!_OS, and eventually, I ditched GRUB for systemd-boot, which Pop!_OS is supposed to use anyway. I want to share my experience here so you can avoid the same headache if you’re dual-booting Pop!_OS and Windows too.

Caption: The GRUB rescue shell I got stuck at, showing “GRUB version 2.06” and “Minimal BASH-like line editing is supported.”

What Went Wrong

I’ve got Pop!_OS and Windows set up on my laptop, both installed on an SSD. I used GRUB to manage the dual-boot because it let me pick between Pop!_OS and Windows every time I started the laptop. But when GRUB failed, it didn’t show the menu at all. Instead, it dropped me into that rescue shell with “grub>” staring at me. From what I learned, this happens when GRUB can’t find its config files or something goes wrong with the boot partition. Since Pop!_OS normally uses systemd-boot (starting from version 20.04), I figured GRUB might not be the best fit anymore, especially for my setup. My goal was to get back into Pop!_OS, replace GRUB with systemd-boot, and make sure I could still boot into Windows.

How I Fixed It: Step by Step

1. Getting Back into Pop!_OS with the Boot Menu

I started by trying to get into Pop!_OS somehow. After some Googling, I found out I could access my laptop’s boot menu by pressing Ctrl + F11 right when it starts up (you might need a different key like F11, F12, or Esc, depending on your laptop – check the manual if you’re not sure). That brought up a menu where I could pick a partition to boot from. I saw Pop!_OS listed (something like “Pop!_OS on /dev/nvme0n1p6”), selected it, and boom, I was in! It wasn’t a permanent fix, but it got me into the system so I could start figuring things out.

Caption: The boot menu I got by pressing Ctrl + F11, showing the Pop!_OS partition I picked to get in.

2. Figuring Out the GRUB Problem

Once I was in Pop!_OS, I wanted to confirm what was going on with GRUB. I opened a terminal and checked the EFI System Partition (ESP), which is where the bootloader lives:

ls /boot/efi/EFI

Sure enough, there was a “grub” folder there, meaning GRUB was definitely the bootloader I was using for my dual-boot setup. I also checked the system logs to see if there were any clues:

sudo dmesg | grep -i error

Nothing super helpful showed up, but the fact that GRUB kept failing at boot told me it was time to try something else.

3. Backing Up My Stuff (Just in Case!)

Before I messed with the bootloader, I wanted to make sure I wouldn’t lose anything important. I had a ton of stuff in my Pop!_OS home folder (like 32.4 GB and 376,601 files!), so I decided to back it up. I ran this command to create a compressed backup:

sudo tar -zcvf /path/to/your/partition/Backup_home_dir/home-backup-$(date +%Y%m%d).tar.gz /home/yourusername

It took about 20-25 minutes to finish, and the backup ended up being around 19 GB. I copied it to an external hard drive later, which took about 5 minutes. If you’re dual-booting, I’d also suggest backing up your Windows stuff too, just to be safe – you can use Windows Backup for that.

Caption: The terminal while I was backing up my home folder with the tar command.

4. Swapping GRUB for systemd-boot

Since Pop!_OS is built to use systemd-boot, I figured switching to that might solve my problem. Here’s what I did to get rid of GRUB and set up systemd-boot instead:

    • First, I removed GRUB completely: sudo apt remove --purge grub* sudo rm -rf /boot/grub
    • Then, I installed systemd-boot: sudo apt install systemd-boot
    • Finally, I set up systemd-boot in the ESP: sudo bootctl installThat puts systemd-boot in the right spot (you’ll see it in /boot/efi/EFI/systemd/) and makes it the default bootloader.

I checked to make sure it worked by looking at the ESP again:

ls /boot/efi/EFI

I saw folders for “systemd”, “BOOT”, and “Microsoft” (that last one’s for Windows), so I knew it was installed properly.

Caption: What I saw in /boot/efi/EFI after setting up systemd-boot – notice the “systemd” and “Microsoft” folders.

5. Setting Up systemd-boot for Dual-Booting

systemd-boot automatically picked up my Pop!_OS kernels from the /boot folder, which was great. But it doesn’t automatically add Windows to the menu, so I had to do that myself. I created a new entry for Windows by making a file:

sudo nano /boot/loader/entries/windows.conf

And I added this to it:

title Windows
efi /EFI/Microsoft/Boot/bootmgfw.efi

I also tweaked the main systemd-boot config to set a timeout so I could choose between Pop!_OS and Windows:

sudo nano /boot/loader/loader.conf

Here’s what I put in there:

default pop-os
timeout 5
editor 0

I made sure Pop!_OS had its own entry in /boot/loader/entries/ (it was already there as pop-os.conf, which was nice).

6. Testing the New Setup

I rebooted to see if it worked:

sudo reboot

This time, I didn’t need to press Ctrl + F11! systemd-boot popped up with a simple menu showing Pop!_OS and Windows. I could boot into Pop!_OS without any hassle, and when I picked Windows, it loaded up just fine too.

Caption: The systemd-boot menu showing Pop!_OS and Windows as options – finally working!

7. Keeping an Eye on Things

After switching to systemd-boot, I wanted to make sure everything was stable. I checked the ESP to see if there were any issues:

sudo fsck /dev/nvme0n1p5

I did notice a small boot sector mismatch (something about “65:01/00”) and a dirty bit warning, but it said it was “mostly harmless” and didn’t mess with booting. To avoid problems down the road, I started making sure to shut down properly every time:

sudo shutdown -h now

What I Learned

    • GRUB Can Be a Pain for Dual-Booting: GRUB worked fine for a while, but it’s not always the best for Pop!_OS and Windows setups. Switching to systemd-boot made things way smoother.
    • Your Laptop’s Boot Menu Is a Lifesaver: Figuring out that Ctrl + F11 trick got me back into Pop!_OS so I could fix things.
    • Back Up Everything First: I was so glad I backed up both Pop!_OS and Windows stuff before touching the bootloader. Better safe than sorry!

Tips for Anyone Else

    • Find Your Boot Menu Key: If GRUB fails, try to get into your laptop’s boot menu (check the manual for the right key – maybe F11, F12, or Esc) so you can pick a partition and get in.
    • Save Space on Backups: When you’re backing up, skip big folders you don’t need:sudo tar -zcvf /path/to/your/partition/Backup_home_dir/home-backup-$(date +%Y%m%d).tar.gz --exclude='.cache' --exclude='Downloads' /home/yourusername
    • Double-Check Windows: After switching to systemd-boot, make sure you can still boot into Windows. That manual entry I added was key.

Wrapping Up

Getting rid of GRUB and moving to systemd-boot fixed my boot issues for good, and I didn’t have to mess with Ctrl + F11 anymore. It was a bit of a process – getting into Pop!_OS, backing up my stuff, setting up the new bootloader, and making sure Windows still worked – but it was worth it. I hope my story helps if you’re stuck with a similar dual-boot problem! If you’ve got questions or hit a snag, leave a comment below. I’d be happy to help out.

Leave a Reply

Your email address will not be published. Required fields are marked *