I have a desktop with two SATA hard drives installed. On one I have Windows, on the other I have Ubuntu 12.04. Everything works fine. Now, I want to install one more hard drive. This is an IDE drive. After installing the IDE drive, Grub no longer points to the correct hard drive and doesn't find the boot directory, so I end up in grub rescue. In my grub.cfg the Ubuntu installation is on hd1. It seems that the new IDE drive becomes hd0. Does that mean that my Ubuntu (and the boot directory) now is on hd2 (and Windows on hd1)? If so, how can I change this in Grub so that it points to the correct hard drive? Can it be done from the grub rescue prompt? Can I boot without the IDE drive installed, edit grub.cfg, torn off the computer, connect the IDE drive and boot? If I go wrong here, can I edit grub.cfg from a live CD? Or is there a better way to do this?
4 Answers
Grub command line have some commands that will help you to debug this issue. Check for the list of them here: https://www.gnu.org/software/grub/manual/grub/html_node/Command_002dline-commands.html
In your case you must identify the drive and the partition where your Grub files are located. Try ls
command. Bear in mind that partition naming convention is different in Grub. For example, 2nd partition of the 1st drive will be called (hd0,1)
(drives and partitions are counted starting from zero). Check "Device syntax" section in the help for ls
command using the mentioned link.
As soon as you'll know exactly where /boot/grub
folder is located, you can try to boot your system using the next commands (I'm using the previous example with Drive 1, Partition 2 - change them appropriately):
grub> set root=(hd0,1)
grub> set prefix=(hd0,1)/boot/grub
grub> insmod normal
grub> normal
Now your system should boot normally. Log in and restore your boot loader from the terminal:
sudo update-grub
sudo grub-install /dev/sda
(use appropriate /dev/sdX name for the drive, where your GNU/Linux installation is located).

- 5,810
- 3
- 33
- 46
You must have an old, broken grub install on the IDE disk that is now being booted instead of the one on the original disk, which will still work fine if you tell your BIOS to boot from that drive instead of the IDE one.
The bios always assigns (hd0) to whichever drive it is trying to boot from since DOS/Windows can not boot from any other drive.

- 37,551
-
Thanks. I already checked the boot order in BIOS and the IDE drive is not in the list. There isn't much I can do in BIOS to solve this. However, whtyger's solution works. – Bambino Jul 19 '13 at 14:40
-
About a broken Grub install, good hunch! There used to be one, but the drive is repartitioned and reformatted, so it should be gone. – Bambino Jul 19 '13 at 15:05
-
@Bambino, reformatting and repartitioning lead to the error you saw because the grub core is still on the disk, but it can't find the grub files in /boot ( since you blew them away ). – psusi Jul 19 '13 at 17:36
-
"The bios always assigns (hd0) to whichever drive it is trying to boot from" thanks, that helped me. I tried to boot from a secondary drive by pressing F8 during boot and selecting that one. Unfortunately grub looked for my encrypted LUKS partition on hd0 instead of the secondary drive. Changing the boot order and actually making it hd0 helped. – das Keks Sep 26 '20 at 11:22
I manage to solve the issue by changing boot flag on my partition it was pointing to wrong partition /dev/sda6
this happened after I remove Swap partition , and my partition table order changed so my boot partition become /dev/sda5
I use fdisk
to fix this I type command as followed :-
fdisk /dev/sda
a
5
w

- 133
- 8
I had the same issue and could not get it resolved using Grub-Rescue
Booting off the Ubuntu live media (DVD or USB) and installing the boot-repair-tool resolved it for me

- 390
sudo grub-install /dev/sdb
. – whtyger Jul 19 '13 at 15:35