C.3 The GRUB Loader

Most PCs can be booted from a floppy drive or hard drive; most recently manufactured computers can be booted from a CD-ROM drive. The first sector of a disk, diskette, or partition is known as the boot sector. The boot sector associated with a disk or diskette (the first sector of the disk or diskette) is known as the Master Boot Record (MBR). In order for a diskette or disk to be bootable, it must contain a boot loader, which can reside in:

  • The boot sector of the floppy diskette

  • The MBR of the first hard disk or the first CD-ROM drive, if the PC supports booting from a CD-ROM

  • The boot sector of a Linux filesystem partition on the first hard disk

  • The boot sector of an extended partition on the first hard disk

GRUB is a sophisticated boot loader that can load Linux, Microsoft Windows 3.x and 9x, NT, 2000, XP, and other popular operating systems. Most users install GRUB on the MBR of their system's first hard disk. That way, when the system is started, it boots GRUB, which can be used to load Linux, Microsoft Windows, or another operating system.

Unless you direct otherwise, the Red Hat Linux installation procedure automatically installs GRUB. So you don't need to install GRUB; you just need to configure it.

Similarly, when you boot by using GRUB, you can also boot parameters to control the boot process; you can specify GRUB's boot parameters by selecting an operating system from GRUB's menu and pressing e. In response, GRUB displays an editor screen that shows the commands associated with the selected operating system, as shown in Figure C-1.

Figure C-1. The GRUB editor screen
figs/rh3_ac01.gif

Commands that can be used in the editor screen are listed in Table C-1.

Table C-1. GRUB editor commands

Command

Meaning

b

Boot the currently selected operating system.

e

Edit the currently selected GRUB command.

c

Open a screen for interactively entering and executing GRUB commands.

o

Enter a new command after the currently selected command.

O

Enter a new command before the currently selected command.

d

Delete the currently selected command.

Esc

Return to the main GRUB menu.

The principal GRUB commands are:

chainloader

Used to load a Microsoft operating system, including DOS, Windows 3.x, 9x, NT, or 2000.

initrd

Specifies the file containing an initial RAM disk used in loading Linux. This command is necessary, for instance, when booting Linux from a SCSI drive.

kernel

Specifies the file containing the Linux kernel to be booted.

root
rootnoverify

Specifies the partition to be mounted as the root partition. The root command causes the filesystem to be verified before the partition is mounted.

GRUB refers to hard disks using the syntax (hdn), where n specifies the device number assigned by the system BIOS. For example, (hd0) refers to the first hard drive. Partitions are designated by the related syntax (hdn,m), where m is the number of the partition. For example, (hd1,0) refers to the first partition of the second hard drive.

GRUB can refer to the disk blocks that comprise a file by using a special syntax known as a blocklist. A blocklist consists of a comma-separated list of block ranges, each of which consists of a starting block number, followed by a plus sign (+), followed by the number of blocks in the range. For example, the blocklist 0+1,10+20 refers to a block range beginning at block 0 and including 1 block and a block range beginning at block 10 and including 20 blocks.

If the starting block number of a block range is omitted, the block range is implied to begin with block 0. For example, the block range +1 begins at block 0 and includes 1 block.

A blocklist can appear after a reference to a partition; if no partition is identified, the partition identified by the preceding root command is implied. For example, in:

root (hd0,0)
chainlist +1

the blocklist +1 is implicitly associated with (hd0,0) and is equivalent to the blocklist (hd0,0)+1.

A typical GRUB entry for booting Linux resembles the following:

root (hd0,0)
kernel /boot/vmlinuz-2.4.18-14 root=LABEL=/
initrd /initrd-2.4.18-14.img

This entry boots the specified kernel residing on partition 0 of the first hard drive, mounting the partition labelled "/" as the root partition. Linux boot parameters, such as those described in the upcoming Section C.4, can be specified by using the kernel command.

If the kernel requires access to special drivers residing on a RAM disk, a RAM disk can be identified as in this entry:

root (hd0,0)
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /initrd-2.4.18-14.img

Notice that the name of the RAM disk file is specified as though the file resides in the root directory, whereas it actually resides in the /boot directory. This is necessary because GRUB initially mounts the /boot filesystem, as specified in the preceding root command. The mounted filesystem is treated by GRUB as its root filesystem.

A typical GRUB entry for booting a Microsoft operating system has this form:

rootnoverify (hd0,0)
chainloader +1

This entry boots the Microsoft operating system residing on partition of the first hard drive. The blocklist +1 points to the first block of the root partition. Microsoft operating systems place their boot file at this location.

To boot your system, GRUB uses your system's BIOS, which may not be able to load a Linux kernel (or other program) stored beyond cylinder 1023 of your hard drive. Booting a kernel stored beyond cylinder 1023 requires a motherboard that supports logical byte addressing (LBA). Most motherboards manufactured in the last several years are supposed to support LBA. Unfortunately, some motherboards that claim to support LBA do not. If you're installing Linux on a preexisting hard drive, you may not be able to place your Linux kernel in an appropriate location. In that case, you won't be able to use GRUB to boot your system.

To learn more about GRUB, see the following resources:

  • The manpage for GRUB

  • The GRUB home page, http://www.gnu.org/software/grub

  • The Multiboot-with-GRUB mini HOWTO, http://www.redhat.com/mirrors/LDP/HOWTO/mini/Multiboot-with-GRUB.html