Next: The role of a boot loader, Previous: Differences from previous versions, Up: Introduction to GRUB [Contents][Index]

### 1.4 GRUB features

The primary requirement for GRUB is that it be compliant with the Multiboot Specification, which is described in Motivation in The Multiboot Specification.

The other goals, listed in approximate order of importance, are:

- Basic functions must be straightforward for end-users.
- Rich functionality to support kernel experts and designers.
- Backward compatibility for booting FreeBSD, NetBSD, OpenBSD, and Linux. Proprietary kernels (such as DOS, Windows NT, and OS/2) are supported via a chain-loading function.

Except for specific compatibility modes (chain-loading and the Linux piggyback format), all kernels will be started in much the same state as in the Multiboot Specification. Only kernels loaded at 1 megabyte or above are presently supported. Any attempt to load below that boundary will simply result in immediate failure and an error message reporting the problem.

In addition to the requirements above, GRUB has the following features (note that the Multiboot Specification doesn’t require all the features that GRUB supports):

Recognize multiple executable formats

  Support many of the a.out variants plus ELF. Symbol tables are also loaded.

Support non-Multiboot kernels

  Support many of the various free 32-bit kernels that lack Multiboot compliance (primarily FreeBSD, NetBSD2, OpenBSD, and Linux). Chain-loading of other boot loaders is also supported.

Load multiples modules

  Fully support the Multiboot feature of loading multiple modules.

Load a configuration file

  Support a human-readable text configuration file with preset boot commands. You can also load another configuration file dynamically and embed a preset configuration file in a GRUB image file. The list of commands (see The list of available commands) are a superset of those supported on the command-line. An example configuration file is provided in Writing your own configuration file.

Provide a menu interface

  A menu interface listing preset boot commands, with a programmable timeout, is available. There is no fixed limit on the number of boot entries, and the current implementation has space for several hundred.

Have a flexible command-line interface

  A fairly flexible command-line interface, accessible from the menu, is available to edit any preset commands, or write a new boot command set from scratch. If no configuration file is present, GRUB drops to the command-line.

  The list of commands (see The list of available commands) are a subset of those supported for configuration files. Editing commands closely resembles the Bash command-line (see Command Line Editing in Bash Features), with `TAB`-completion of commands, devices, partitions, and files in a directory depending on context.

Support multiple filesystem types

  Support multiple filesystem types transparently, plus a useful explicit blocklist notation. The currently supported filesystem types are Amiga Fast FileSystem (AFFS), AtheOS fs, BeFS, BtrFS (including raid0, raid1, raid10, gzip and lzo), cpio (little- and big-endian bin, odc and newc variants), Linux ext2/ext3/ext4, DOS FAT12/FAT16/FAT32, exFAT, F2FS, HFS, HFS+, ISO9660 (including Joliet, Rock-ridge and multi-chunk files), JFS, Minix fs (versions 1, 2 and 3), nilfs2, NTFS (including compression), ReiserFS, ROMFS, Amiga Smart FileSystem (SFS), Squash4, tar, UDF, BSD UFS/UFS2, XFS, and ZFS (including lzjb, gzip, zle, mirror, stripe, raidz1/2/3 and encryption in AES-CCM and AES-GCM). See Filesystem syntax and semantics, for more information.

Support automatic decompression

  Can decompress files which were compressed by `gzip` or `xz` 3. This function is both automatic and transparent to the user (i.e. all functions operate upon the uncompressed contents of the specified files). This greatly reduces a file size and loading time, a particularly great benefit for floppies.4

  It is conceivable that some kernel modules should be loaded in a compressed state, so a different module-loading command can be specified to avoid uncompressing the modules.

Access data on any installed device

  Support reading data from any or all floppies or hard disk(s) recognized by the BIOS, independent of the setting of the root device.

Be independent of drive geometry translations

  Unlike many other boot loaders, GRUB makes the particular drive translation irrelevant. A drive installed and running with one translation may be converted to another translation without any adverse effects or changes in GRUB’s configuration.

Detect all installed RAM

  GRUB can generally find all the installed RAM on a PC-compatible machine. It uses an advanced BIOS query technique for finding all memory regions. As described on the Multiboot Specification (see Motivation in The Multiboot Specification), not all kernels make use of this information, but GRUB provides it for those who do.

Support Logical Block Address mode

  In traditional disk calls (called CHS mode), there is a geometry translation problem, that is, the BIOS cannot access over 1024 cylinders, so the accessible space is limited to at least 508 MB and to at most 8GB. GRUB can’t universally solve this problem, as there is no standard interface used in all machines. However, several newer machines have the new interface, Logical Block Address (LBA) mode. GRUB automatically detects if LBA mode is available and uses it if available. In LBA mode, GRUB can access the entire disk.

Support network booting

  GRUB is basically a disk-based boot loader but also has network support. You can load OS images from a network by using the TFTP protocol.

Support remote terminals

  To support computers with no console, GRUB provides remote terminal support, so that you can control GRUB from a remote host. Only serial terminal support is implemented at the moment.

Next: The role of a boot loader, Previous: Differences from previous versions, Up: Introduction to GRUB [Contents][Index]