Articles

Install Grub to USB drive

 

Note: this HOWTO relates to Grub (legacy), not Grub2 or Grub4dos.

By Ahau

I found this thread useful, and based my process on the instructions provided there:

http://ubuntuforums.org/showthread.php?t=1163686


I used 2 USB drives to accomplish this (all commands were used on the first drive, running Porteus, to install grub on the second drive), but this could also be accomplished from a linux OS running on a hard drive. Steps 1 and 2 are not necessary if you are installing from a linux system that already uses Grub, as these files should already be on your system.


Steps:


1) Download the grub .txz package, here:
http://pkgs.org/slackware-13.1/slackware-extra-i386/grub-0.97-i486-9.txz.html

2) Right click on the .txz package you downloaded, and select “install”. This will install all of the necessary grub files to the system you are running, but it will not overwrite the MBR of the active drive (it will continue to boot as usual).

3) Insert the second USB drive, and mount it. I mounted mine like this:

mkdir /mnt/sdc1
mount /dev/sdc1 /mnt/sdc1

Replace sdc1 with whatever partition you are installing to. In my case, sdb1 was my active Porteus USB drive (which was already mounted), and sdc1 was the target drive.

4) Create a new directory to hold grub on the target drive:

mkdir /mnt/sdc1/boot/grub


5) Copy all of the files from /usr/lib/grub/i386-pc to /mnt/sdc1/boot/grub.

6) In your terminal, type ‘grub’ and hit enter. This will open a grub shell.

7) Enter the following into the grub shell:


find /boot/grub/stage1


This searches all partitions on your system, and will return a list of each instance where this file was found along the path /boot/grub. In my case, two entries were returned:

(hd 1,0)
(hd 2,0)


It is very important that you know which of these drives is the target drive. Note that Grub starts counting from "0" (not "1") for both drives and partitions. In my case, I knew that hd 0,0 was my hard drive, with windows installed (it was not shown, because it does not contain the /boot/grub/stage1 file). The second drive (hd 1,0) was the USB drive running porteus, and the third drive (hd2,0) was the target drive.

8 ) enter the following:


root (hd1,0)

 

but replace hd1,0 with the device/partition to which you want to install grub. This tells grub to look in this partition (your target partition) for the files necessary to boot. On my first install, I didn't include this, and grub would hang on boot-up, because it was looking for the files on another device.

9) enter the following:

setup (hd1)

Again, replace hd1 with the device to which you want to install grub. This will overwrite the MBR of this device, so again, it is highly important that you know which device you are dealing with, or you could mess up your ability to boot your computer! Note--if you are looking to install grub to the bootsector of a partition (rather than to the MBR), enter, for example, 'setup (hd1,1) to install to the second partition of the second drive.

If you receive an error message from the setup command, try running it again, with the same parameters.

10) create a file in /mnt/sdc1/boot/grub named menu.lst (that is a letter l in .lst, not a number 1)
This file will direct grub to boot your OS. Ignore this step if you already have a menu.lst file here.

11) copy (or replace) the following into menu.lst:

# This is a sample menu.lst file. You should make some changes to it.
# The old install method of booting via the stage-files has been removed.
# Please install GRLDR boot strap code to MBR with the bootlace.com
# utility under DOS/Win9x or Linux.
color blue/green yellow/red white/magenta white/magenta
timeout 30
default /default

title Porteus, no changes, copy to RAM
root (hd0,0)
kernel /boot/syslinux/vmlinuz vga=791 copy2ram
initrd /boot/syslinux/initrd.xz

title Porteus w/changes
root (hd0,0)
kernel /boot/syslinux/vmlinuz vga=791 changes=/porteus/
initrd /boot/syslinux/initrd.xz

title commandline
commandline

title floppy (fd0)
chainloader (fd0)+1
rootnoverify (fd0)

title back to dos
quit

title reboot
reboot

title halt
halt

You can make additional entries to the menu.lst to boot from other partitions, iso image files, etc. for example:

title Porteus v1.1 i486
map (hd0,0)/ISO/Porteus-v1.1-i486.iso (hda3)
map --hook
chainloader (hda3)
boot

Thanks to Ponce, for helping me with the menu.lst entries!

12) I already had Porteus installed to this drive, so /boot and /porteus were already in place. If you've not already installed Porteus, you will need to extract the contents of the Porteus ISO to your drive as described in the Official Porteus Install Guide (but don't install the bootloader, or it will overwrite your grub install).  Now, reboot and you should be in grub!