5.7 KiB
title, date, tags
| title | date | tags |
|---|---|---|
| Never Get Trapped in Grub Rescue Again! | 2022-03-03 03:46:00 +0300 | linux grub partition uefi |
Anytime I install a new system on my machine, I pray God for nothing bad happens. But it usually happens. When I reboot, I find myself in the "Grub rescue" menu and I don't know how to fix things from that point.
I go into the live environment and run some random commands that I found on the internet and hope for the best.
What a nice way to shoot myself in the foot! But this time is different. This time, I f*cked up so much that even the random commands on the internet could not help me. I was on my own and I needed to figure out what is wrong with my system. Let me tell you what I did:
I decided to install another OS just to try it in a real machine. I wanted to shrink one of my partitions to create a space for the new system. I run fdisk /dev/sdb, the very first message that it tells me was
This disk is currently in use - repartitioning is probably a bad idea. It's recommended to umount all file systems, and swapoff all swap partitions on this disk.
Yes, it just screams "Do not do it!" but come on. I will not try to shrink the partition I am using (sdb3). So it should not be a problem. I ignored the message and shrink it anyway. No problem. Installed and tested the new OS a little bit. Time to reboot and hope for the best. And of course it did not boot. What would I even expecting?
As always, I booted into a live environment and run boot-repair command. It was always working but this time... Even after finishing the operation successfully I could not boot into neither Arch nor Ubuntu (the two systems I had previously).
Arch was originally mounted in sdb3 and Ubuntu was in sda2. Considering the fact that I only messed with sdb, I should be able to boot Ubuntu, right? Well, yeah. Technically I did boot into Ubuntu but I didn't see the login screen. It was dropping me into something called "Emergency mode" which just makes me panic! sudo update-grub... Nope. Nothing changes. Arch does not boot and Ubuntu partially boots.
Let me tell you what the problem was and how my ignorance made it worse:
-
While installing the new system, I saw a partition labelled "Microsoft Basic Data". I deleted it thinking it is not required because I don't use W*ndows. It turns out, it was my boot partition for Arch, just labelled incorrectly... Big lolz :D But we will see this is not even important because I had to rewrite my boot partition anyway.
-
My Arch was installed in
sdb3. When I created a new partition and installed the new system,sdb3was shifted tosdb5even though I did not ask for it. But the grub configuration to boot my system was still pointing tosdb3. That was the reason why Arch does not boot. It was trying to boot fromsdb3. So I had to recreate grub configuration and reinstall grub to fix it. I run the following commands that I found here in a live Arch environment:mkdir /mnt/arch mount -t auto /dev/sdb5 /mnt/arch arch-chroot /mnt/arch mount -t auto /dev/sdb4 /boot/efi os-prober grub-mkconfig > /boot/grub/grub.cfg grub-install --efi-directory=/boot/efi --target=x86_64-efi /dev/sdb exit rebootAnd it fixed my grub. I can now boot into Arch, hooray!
-
Ubuntu was not still booting properly. I checked the logs with
journalctl -xband saw something related withsdb. Ubuntu was installed insda2, whysdbshould be a problem? Then I remembered something. Back in times when I was using Ubuntu, I was usingsdb1as a secondary storage. So I had a configuration where it automatically mountssdb1on startup. Since I messed withsdb1, it was failing to mount it. I opened/etc/fstab, and deleted the related line. Bingo! It started booting properly. -
I started feeling like Hackerman, and I said to myself "You know what, Imma fix everything." I had a very sh*tty grub menu with useless grub entries from old systems that I don't use anymore. The UEFI also had the same problem. It had ridiculous amount of boot entries that most of them are just trash.
These are the pictures I took for reference while trying to figure out which boot options are useless. Sorry for the bad quality. I didn't think I would use them in a blog post.
- While trying to fix the previous problems, I've spent enough time in the
/boot/efidirectory that make me understand where these grub entries are coming from. There were a lot of files belong to old systems. I simply deleted them and updated grub. All of the bad entries were gone. I want to draw your attention here: I did not search for how to delete the unused grub entries. I just knew deleting their directories from/boot/efiwill do the job. I am doing this sh*t! (Another hackerman moment :D ) - In order to delete useless boot options from UEFI menu, I used
efibootmgr. I searched for it on the internet, of course!
efibootmgr -v # Check which entries you want to delete, say it is 0003. sudo efibootmgr -b 0003 -B # This will delete third boot option. - While trying to fix the previous problems, I've spent enough time in the
And finally! I know everything about how all these work. Another shady part of Linux is clear for me. Now:




