Why did I end up with a fucked grub? I was stupid. It was entirely my fault. You see, I BELIEVED that this time, when I upgraded my Ubuntu installation from Natty to Oneiric, I wouldn't end up with an unresponsive pile of crap as the result. More fool me.
Because I am not a total buffoon, I made a drive image before attempting the upgrade. I thought I would give True Image Home 2011 another go at being an actual backup program rather than a pointless waste of time. Surprisingly it actually worked. Just about. It had a funny check box thing with some nonsensical question about hard drive ID or some such other thing. I didn't check it. In my experience checking boxes when you do not know what they do is a bad thing.
I now know what this box was asking. It was asking "do you want me not to fuck up your grub when I restore this image?". Oh dear.
So, I was left with a non-working grub. Helpfully I managed to sort it all out, by running these commands from a terminal window on a LiveUSB system.
First of all I mounted the recalcitrant drive into the LiveUSB environment. That's sounds scary. In practice, it means I clicked on the "Places" menu and selected the anonymous drive that was the same size as my Ubuntu, rather than Home, partition on the disk in question.
I then got my terminal window open, and found out where this partition had been mounted by running
mount | tail -1
This command prints the last line [tail -1] of the output of the command to tell you about all [mount]ed partitions. The partition we are interested in should be the last one, because we only just mounted it.
The output I got was along these lines:
/dev/[sdxy] on /media/[string of letters and numbers] type ext4 (rw,nosuid,nodev,uhelper=devkit)
That told me the name of the partition [/dev/[sdxy]] and where it was mounted [/media/[string of letters and numbers]]. That's all I need to know. The next job was to double check that this was the right partition. To do that I just [l]i[s]ted the contents of the [boot] folder on that partition as follows:
ls /media/[string of letters and numbers]/boot
This properly displayed the contents of the boot folder, so I knew I was on the right track. The last step was to run the command to fix everything. This was:
sudo grub-install --boot-directory=/media/[string of letters and numbers]/boot /dev/[sdx]
Please note that I was installing the grub to /dev/[sdx] and NOT /dev/[sdxy], for whatever x and y I got.
And then, surprisingly, it worked fine.
For every grub-problem like that - and I have them sometimes cause I use dual boot with windows (needs reinstalling from time to time) - you can just use any!!! live CD (with some recent kernel - this is important!) and (with root priviledges) use
ReplyDeletebind /dev /media/X/dev
bind /proc /media/X/proc
chroot /media/X
grub-install
This way it will always use the right grub version and paths - you are using grub belonging to your own system, so it cannot be wrong.