The GNU GRand Unified Boot loader (GRUB) is a
program which enables the selection of the installed operating
system or kernel to be loaded at system boot time. It also allows the user to
pass arguments to the kernel.
GRUB loads itself into memory in the following stages:
The Stage 1 or primary boot loader is read into
memory by the BIOS from the MBR[1]. The primary boot loader exists on less
than 512 bytes of disk space within the MBR and is capable of
loading either the Stage 1.5 or Stage 2 boot loader.
The Stage 1.5 boot loader is read into memory by the
Stage 1 boot loader, if necessary. Some hardware
requires an intermediate step to get to the Stage 2 boot
loader. This is sometimes true when the
/boot/ partition is above the 1024 cylinder
head of the hard drive or when using LBA mode. The Stage 1.5
boot loader is found either on the /boot/
partition or on a small part of the MBR and the
/boot/ partition.
The Stage 2 or secondary boot loader is read into
memory. The secondary boot loader displays the GRUB
menu and command environment. This interface allows the user to
select which kernel or operating system to boot, pass arguments
to the kernel, or look at system parameters.
The secondary boot loader reads the operating system
or kernel as well as the contents of
/boot/sysroot/ into memory. Once
GRUB determines which operating system or kernel to start, it
loads it into memory and transfers control of the machine to
that operating system.
The method used to boot Red Hat Enterprise Linux is called direct
loading because the boot loader loads the operating system
directly. There is no intermediary between the boot loader and the
kernel.
The boot process used by other operating systems may differ. For
example, the Microsoft®
Windows® operating system, as
well as other operating systems, are loaded using chain
loading. Under this method, the MBR points to the first
sector of the partition holding the operating system, where it finds
the files necessary to actually boot that operating system.
GRUB supports both direct and chain loading boot methods, allowing it
to boot almost any operating system.
Warning
During installation, Microsoft's DOS and Windows installation
programs completely overwrite the MBR, destroying any existing boot
loaders. If creating a dual-boot system, it is best to install the
Microsoft operating system first.
GRUB contains several features that make it preferable to other boot
loaders available for the x86 architecture. Below is a partial list of
some of the more important features:
GRUB provides a true command-based, pre-OS
environment on x86 machines. This feature affords the
user maximum flexibility in loading operating systems with
specified options or gathering information about the system. For
years, many non-x86 architectures have employed pre-OS
environments that allow system booting from a command
line.
GRUB supports Logical Block Addressing
(LBA) mode. LBA places the addressing
conversion used to find files in the hard drive's firmware,
and is used on many IDE and all SCSI hard devices. Before LBA,
boot loaders could encounter the 1024-cylinder BIOS
limitation, where the BIOS could not find a file after the
1024 cylinder head of the disk. LBA support allows GRUB to
boot operating systems from partitions beyond the
1024-cylinder limit, so long as the system BIOS supports LBA
mode. Most modern BIOS revisions support LBA mode.
GRUB can read ext2 partitions. This
functionality allows GRUB to access its configuration file,
/boot/grub/grub.conf, every time the system
boots, eliminating the need for the user to write a new version of
the first stage boot loader to the MBR when configuration changes
are made. The only time a user needs to reinstall GRUB on the MBR
is if the physical location of the /boot/
partition is moved on the disk. For details on installing GRUB to
the MBR, refer to Section 2.3 Installing GRUB.