One of the most important things to understand before using GRUB is how
the program refers to devices, such as your hard drives, and
partitions. This information is very important if you want to configure
GRUB to boot multiple operating systems.
The first hard drive of a system will be called
(hd0) by GRUB. The first partition on that drive is
called (hd0,0) by GRUB, and the fifth partition on
the second hard drive is called (hd1,4). In
general, the naming convention for filesystems when using GRUB breaks
down in this way:
(<type-of-device><bios-device-number>,<partition-number>) |
The parentheses and comma are very important in the name. The
<type-of-device>
refers to whether a hard disk (hd) or floppy disk
(fd) is being specified.
The
<bios-device-number>
is the number of the device according to your system's BIOS, starting
with 0. The primary IDE hard drive is numbered
0, while the secondary IDE hard drive is numbered
1. The ordering is roughly equivalent to the way
the Linux kernel arranges the devices by letters, where the
a in hda relates to
0, the b in
hdb relates to 1, and so on.
 | Note |
|---|
| | Remember that GRUB's numbering system for devices starts at
0, and not 1. This is one
of the most common mistakes made by new GRUB users.
|
The
<partition-number>
relates to the number of a specific partition on that device. Like the
<bios-device-number>,
the numbering of partitions starts at 0. While
most partitions are specified by numbers, if your system uses BSD
partitions, they are signified by letters, such as
a or c.
GRUB uses the following rules when naming devices and partitions:
It does not matter if your hard drives are IDE or SCSI. All hard
drives start with hd. Floppy disks start with
fd.
To specify an entire device without respect to its partitions,
simply leave off the comma and the partition number. This is
important when telling GRUB to configure the MBR for a particular
disk. For example, (hd0) specifies the first
device and (hd3) specifies the fourth device.
It is very important, if you have multiple hard drives, to know
their order according to the BIOS. This is rather simple to do if you
have only IDE or SCSI drives, but if you have a mix of them, things
get a bit more tricky.
When typing commands to GRUB involving a file, such as a menu list to
use when allowing the booting of multiple operating systems, you must
include the file immediately after the specifying the device and
partition. A sample file specification to an absolute filename is
organized like this:
(<type-of-device><bios-device-number>,<partition-number>)/path/to/file |
Most of the time, you will be specifying files by their path on that
partition plus the file's name. This is rather straightforward.
You can also specify files to GRUB that do not actually appear in the
filesystem, such as a chain loader that appears in the first few
blocks of a partition. To specify these files, you have to provide a
blocklist, which tells GRUB, block by block,
where the file is located in the partition. As a file can be comprised
of several different sets of blocks, there is a specific way to write
blocklists. Each file's section location is described by an offset
number of blocks and then a number of blocks from that offset point,
and the sections are put together in order, separated by commas.
In other words, consider the following blocklist:
This blocklist tells GRUB to use a file that starts at the first block
on the partition and uses blocks 0 through 49, 99 through 124, and
199.
Knowing how to write blocklists is useful when using GRUB to load
operating systems that use chain loading, such as Microsoft
Windows. You can leave off the offset number of blocks if you are
starting at block 0. As an example, the chain loading file in the
first partition of the first hard drive would have the following name:
You can also use the chainloader command with a
similar blocklist designation at the GRUB command line after setting
the correct device and partition as root:
Some users are confused by the use of the term "root filesystem" with
GRUB. It is important to remember that GRUB's root filesystem has
nothing to do with the Linux root filesystem.
The GRUB root filesystem is the root partition for a particular
device. GRUB uses this information to mount the device and load files
from it, among other things.
With Red Hat Linux, once GRUB has loaded its root partition that contains the
Linux kernel, the kernel command can be executed
with the location of the kernel file as an option. Once the Linux
kernel boots, it sets its own root filesystem, and that is the one
most people associate with Linux. The original GRUB root filesystem
and its mounts are forgotten. They only existed to boot the kernel
file.
See the notes given for the root and
kernel commands in the section called Commands for more information.