One of the most important things to understand before using GRUB is how
the program refers to devices, such as hard drives and partitions. This
information is particularly important when configuring GRUB to boot
multiple operating systems.
When referring to a specific device with GRUB, do so using the following
format (note that the parentheses and comma are very important
syntactically):
(<type-of-device><bios-device-number>,<partition-number>)
The <type-of-device> specifies the
type of device from which GRUB boots. The two most common options are
hd for a hard disk or fd for a
3.5 diskette. A lesser used device type is also available called
nd for a network disk. Instructions on configuring
GRUB to boot over the network are available online at https://www.gnu.org/software/grub/manual/.
The <bios-device-number> is the BIOS
device number. The primary IDE hard drive is numbered
0 and a secondary IDE hard drive is numbered
1. This syntax is roughly equivalent to that used
for devices by the kernel. For example, the a in
hda for the kernel is analogous to the
0 in hd0 for GRUB, the
b in hdb is analogous to the
1 in hd1, and so on.
The <partition-number> specifies the
number of a partition on a device. Like the
<bios-device-number>, most types of
partitions are numbered starting at 0. However, BSD
partitions are specified using letters, with a
corresponding to 0, b
corresponding to 1, and so on.
| Tip |
---|
| The numbering system for devices under GRUB always begins with
0, not 1. Failing to make this
distinction is one of the most common mistakes made by new users.
|
To give an example, if a system has more than one hard drive, GRUB
refers to the first hard drive as (hd0) and the
second as (hd1). Likewise, GRUB refers to the first
partition on the first drive as (hd0,0) and the
third partition on the second hard drive as
(hd1,2).
In general the following rules apply when naming devices and
partitions under GRUB:
It does not matter if system hard drives are IDE or SCSI, all
hard drives begin with the letters hd. The
letters fd are used to specify 3.5 diskettes.
To specify an entire device without respect to partitions,
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 MBR on the first
device and (hd3) specifies the MBR on the
fourth device.
If a system has multiple drive devices, it is very important
to know how the drive boot order is set in the BIOS. This is a
simple task if a system has only IDE or SCSI drives, but if there
is a mix of devices, it becomes critical that the type of drive
with the boot partition be accessed first.
When typing commands to GRUB that reference a file, such as a menu list,
it is necessary to specify an absolute file path immediately after the
device and partition numbers.
The following illustrates the structure of such a command:
(<device-type><device-number>,<partition-number>)</path/to/file>
In this example, replace
<device-type> with
hd, fd, or
nd. Replace
<device-number> with the integer for
the device. Replace </path/to/file>
with an absolute path relative to the top-level of the device.
It is also possible to specify files to GRUB that do not actually
appear in the file system, such as a chain loader that appears in the
first few blocks of a partition. To load such files, provide a
blocklist that specifies block by block where
the file is located in the partition. Since a file is often comprised
of several different sets of blocks, blocklists use a special
syntax. Each block containing the file is specified by an offset
number of blocks, followed by the number of blocks from that offset
point. Block offsets are listed sequentially in a comma-delimited
list.
The following is a sample blocklist:
This sample blocklist specifies 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 which require chain loading. It is possible to leave
off the offset number of blocks if 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:
The following shows the chainloader command with a
similar blocklist designation at the GRUB command line after setting
the correct device and partition as root:
The use of the term root file system has a
different meaning in regard to GRUB. It is important to remember that
GRUB's root file system has nothing to do with the Linux root file
system.
The GRUB root file system is the top level of the specified
device. For example, the image file
(hd0,0)/grub/splash.xpm.gz is located within the
/grub/ directory at the top-level (or root) of
the (hd0,0) partition (which is actually the
/boot/ partition for the system).
Next, the kernel command is executed with the
location of the kernel file as an option. Once the Linux kernel boots,
it sets up the root file system that Linux users are familiar
with. The original GRUB root file system and its mounts are forgotten;
they only existed to boot the kernel file.
Refer to the root and kernel
commands in Section 2.6 GRUB Commands for more information.