GRUB legacy is the predecessor of GRUB2, recently I have been doing backups of a HDD and need to transfer the contents into a new HDD. The previous HDD was using CentOS 6.2, CentOS is using grub 0.97 which is grub legacy.
http://pkgs.org/centos-6-rhel-6/centos-rhel-i386/grub-0.97-75.el6.i686.rpm.html gives insights on where the files are if the location is at its default states.
Here I will document how to install grub into MBR using chroot.
Mount the hard disk
you need a liveCD. After you have booted with the liveCD do the below, this example has three partitions.
/dev/sda1 / ext4
/dev/sda3 /home ext4
mount /dev/sda1 /mnt/
mount /dev/sda3 /mnt/home/
Mount proc and bind the mounted hdd to /dev
mount -t proc none /mnt/proc
mount -o bind /dev /mnt/dev/
Change root from / to /mnt/
chroot /mnt /bin/bash
This will transfer from “/” to the root mounted on /mnt/, now you can execute bash commands on the mounted harddisk just like it is loaded on your system, whichever you changed will be updated and stored in the mounted hard disk.
As from http://pkgs.org/centos-6-rhel-6/centos-rhel-i386/grub-0.97-75.el6.i686.rpm.html, the default path for grub is in /sbin/.
grub> prompt appears.
find /boot/grub/stage1, this step is optional, executing this command will output the partition where the vmlinuz and initrd files are located.
Since /dev/sda1 is the / directory, /root/ is under / as well as there are no additional partition for /root.
/dev/sdXY = hdX,Y, where X is the harddrive number and Y is the partition number for /dev/sda1 the equivalent is hence hd0,0. 0 is the first number of the harddisk and partition.
This installs the grub into MBR.
My system encountered kernel panic and stopped. This is because the previously backup grub.conf file points to UUID and the UUID does not exist.
My way of doing it is to remove the UUID and statically define the partition like this:
kernel /boot/vmlinuz-version root=/dev/sda1 ro
UUID is a dynamic way to figure out which partition is which, however it gives problem in my situation. So the kernel line in the grub.conf may look like this:
kernel /boot/vmlinuz-2.6.38-8-generic root=UUID=c2bb0352-8fa3-457a-8bcd-00a35a2783fc ro
To check your partitions’ UUID do this:
For my situation the UUIDs presented by blkid command were all different from UUIDs in /etc/fstab as well as in grub.conf.
Note that /boot/grub/menu.lst is a symbolic link of /boot/grub/grub.conf, changing grub.conf also changes menu.lst.