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.