mirror of
https://git.proxmox.com/git/grub2
synced 2025-05-28 16:16:32 +00:00
7555 lines
303 KiB
Plaintext
7555 lines
303 KiB
Plaintext
This is grub.info, produced by makeinfo version 6.3 from grub.texi.
|
||
|
||
This manual is for GNU GRUB (version 2.06, 10 May 2021).
|
||
|
||
Copyright (C)
|
||
1999,2000,2001,2002,2004,2006,2008,2009,2010,2011,2012,2013 Free
|
||
Software Foundation, Inc.
|
||
|
||
Permission is granted to copy, distribute and/or modify this
|
||
document under the terms of the GNU Free Documentation License,
|
||
Version 1.2 or any later version published by the Free Software
|
||
Foundation; with no Invariant Sections.
|
||
INFO-DIR-SECTION Kernel
|
||
START-INFO-DIR-ENTRY
|
||
* GRUB: (grub). The GRand Unified Bootloader
|
||
* grub-install: (grub)Invoking grub-install. Install GRUB on your drive
|
||
* grub-mkconfig: (grub)Invoking grub-mkconfig. Generate GRUB configuration
|
||
* grub-mkpasswd-pbkdf2: (grub)Invoking grub-mkpasswd-pbkdf2.
|
||
* grub-mkrelpath: (grub)Invoking grub-mkrelpath.
|
||
* grub-mkrescue: (grub)Invoking grub-mkrescue. Make a GRUB rescue image
|
||
* grub-mount: (grub)Invoking grub-mount. Mount a file system using GRUB
|
||
* grub-probe: (grub)Invoking grub-probe. Probe device information
|
||
* grub-script-check: (grub)Invoking grub-script-check.
|
||
END-INFO-DIR-ENTRY
|
||
|
||
|
||
File: grub.info, Node: Top, Next: Introduction, Up: (dir)
|
||
|
||
GNU GRUB manual
|
||
***************
|
||
|
||
This is the documentation of GNU GRUB, the GRand Unified Bootloader, a
|
||
flexible and powerful boot loader program for a wide range of
|
||
architectures.
|
||
|
||
This edition documents version 2.06.
|
||
|
||
This manual is for GNU GRUB (version 2.06, 10 May 2021).
|
||
|
||
Copyright (C)
|
||
1999,2000,2001,2002,2004,2006,2008,2009,2010,2011,2012,2013 Free
|
||
Software Foundation, Inc.
|
||
|
||
Permission is granted to copy, distribute and/or modify this
|
||
document under the terms of the GNU Free Documentation License,
|
||
Version 1.2 or any later version published by the Free Software
|
||
Foundation; with no Invariant Sections.
|
||
|
||
* Menu:
|
||
|
||
* Introduction:: Capturing the spirit of GRUB
|
||
* Naming convention:: Names of your drives in GRUB
|
||
* OS-specific notes about grub tools::
|
||
Some notes about OS-specific behaviour of GRUB
|
||
tools
|
||
* Installation:: Installing GRUB on your drive
|
||
* Booting:: How to boot different operating systems
|
||
* Configuration:: Writing your own configuration file
|
||
* Theme file format:: Format of GRUB theme files
|
||
* Network:: Downloading OS images from a network
|
||
* Serial terminal:: Using GRUB via a serial line
|
||
* Vendor power-on keys:: Changing GRUB behaviour on vendor power-on keys
|
||
* Images:: GRUB image files
|
||
* Core image size limitation:: GRUB image files size limitations
|
||
* Filesystem:: Filesystem syntax and semantics
|
||
* Interface:: The menu and the command-line
|
||
* Environment:: GRUB environment variables
|
||
* Commands:: The list of available builtin commands
|
||
* Internationalisation:: Topics relating to language support
|
||
* Security:: Authentication, authorisation, and signatures
|
||
* Platform limitations:: The list of platform-specific limitations
|
||
* Platform-specific operations:: Platform-specific operations
|
||
* Supported kernels:: The list of supported kernels
|
||
* Troubleshooting:: Error messages produced by GRUB
|
||
* Invoking grub-install:: How to use the GRUB installer
|
||
* Invoking grub-mkconfig:: Generate a GRUB configuration file
|
||
* Invoking grub-mkpasswd-pbkdf2::
|
||
Generate GRUB password hashes
|
||
* Invoking grub-mkrelpath:: Make system path relative to its root
|
||
* Invoking grub-mkrescue:: Make a GRUB rescue image
|
||
* Invoking grub-mount:: Mount a file system using GRUB
|
||
* Invoking grub-probe:: Probe device information for GRUB
|
||
* Invoking grub-script-check:: Check GRUB script file for syntax errors
|
||
* Obtaining and Building GRUB:: How to obtain and build GRUB
|
||
* Reporting bugs:: Where you should send a bug report
|
||
* Future:: Some future plans on GRUB
|
||
* Copying This Manual:: Copying This Manual
|
||
* Index::
|
||
|
||
|
||
File: grub.info, Node: Introduction, Next: Naming convention, Prev: Top, Up: Top
|
||
|
||
1 Introduction to GRUB
|
||
**********************
|
||
|
||
* Menu:
|
||
|
||
* Overview:: What exactly GRUB is and how to use it
|
||
* History:: From maggot to house fly
|
||
* Changes from GRUB Legacy:: Differences from previous versions
|
||
* Features:: GRUB features
|
||
* Role of a boot loader:: The role of a boot loader
|
||
|
||
|
||
File: grub.info, Node: Overview, Next: History, Up: Introduction
|
||
|
||
1.1 Overview
|
||
============
|
||
|
||
Briefly, a "boot loader" is the first software program that runs when a
|
||
computer starts. It is responsible for loading and transferring control
|
||
to an operating system "kernel" software (such as Linux or GNU Mach).
|
||
The kernel, in turn, initializes the rest of the operating system (e.g.
|
||
a GNU system).
|
||
|
||
GNU GRUB is a very powerful boot loader, which can load a wide
|
||
variety of free operating systems, as well as proprietary operating
|
||
systems with chain-loading(1) (*note Overview-Footnote-1::). GRUB is
|
||
designed to address the complexity of booting a personal computer; both
|
||
the program and this manual are tightly bound to that computer platform,
|
||
although porting to other platforms may be addressed in the future.
|
||
|
||
One of the important features in GRUB is flexibility; GRUB
|
||
understands filesystems and kernel executable formats, so you can load
|
||
an arbitrary operating system the way you like, without recording the
|
||
physical position of your kernel on the disk. Thus you can load the
|
||
kernel just by specifying its file name and the drive and partition
|
||
where the kernel resides.
|
||
|
||
When booting with GRUB, you can use either a command-line interface
|
||
(*note Command-line interface::), or a menu interface (*note Menu
|
||
interface::). Using the command-line interface, you type the drive
|
||
specification and file name of the kernel manually. In the menu
|
||
interface, you just select an OS using the arrow keys. The menu is
|
||
based on a configuration file which you prepare beforehand (*note
|
||
Configuration::). While in the menu, you can switch to the command-line
|
||
mode, and vice-versa. You can even edit menu entries before using them.
|
||
|
||
In the following chapters, you will learn how to specify a drive, a
|
||
partition, and a file name (*note Naming convention::) to GRUB, how to
|
||
install GRUB on your drive (*note Installation::), and how to boot your
|
||
OSes (*note Booting::), step by step.
|
||
|
||
|
||
File: grub.info, Node: Overview-Footnotes, Up: Overview
|
||
|
||
(1) "chain-load" is the mechanism for loading unsupported operating
|
||
systems by loading another boot loader. It is typically used for
|
||
loading DOS or Windows.
|
||
|
||
|
||
File: grub.info, Node: History, Next: Changes from GRUB Legacy, Prev: Overview, Up: Introduction
|
||
|
||
1.2 History of GRUB
|
||
===================
|
||
|
||
GRUB originated in 1995 when Erich Boleyn was trying to boot the GNU
|
||
Hurd with the University of Utah's Mach 4 microkernel (now known as GNU
|
||
Mach). Erich and Brian Ford designed the Multiboot Specification (*note
|
||
Multiboot Specification: (multiboot)Top.), because they were determined
|
||
not to add to the large number of mutually-incompatible PC boot methods.
|
||
|
||
Erich then began modifying the FreeBSD boot loader so that it would
|
||
understand Multiboot. He soon realized that it would be a lot easier to
|
||
write his own boot loader from scratch than to keep working on the
|
||
FreeBSD boot loader, and so GRUB was born.
|
||
|
||
Erich added many features to GRUB, but other priorities prevented him
|
||
from keeping up with the demands of its quickly-expanding user base. In
|
||
1999, Gordon Matzigkeit and Yoshinori K. Okuji adopted GRUB as an
|
||
official GNU package, and opened its development by making the latest
|
||
sources available via anonymous CVS. *Note Obtaining and Building
|
||
GRUB::, for more information.
|
||
|
||
Over the next few years, GRUB was extended to meet many needs, but it
|
||
quickly became clear that its design was not keeping up with the
|
||
extensions being made to it, and we reached the point where it was very
|
||
difficult to make any further changes without breaking existing
|
||
features. Around 2002, Yoshinori K. Okuji started work on PUPA
|
||
(Preliminary Universal Programming Architecture for GNU GRUB), aiming to
|
||
rewrite the core of GRUB to make it cleaner, safer, more robust, and
|
||
more powerful. PUPA was eventually renamed to GRUB 2, and the original
|
||
version of GRUB was renamed to GRUB Legacy. Small amounts of
|
||
maintenance continued to be done on GRUB Legacy, but the last release
|
||
(0.97) was made in 2005 and at the time of writing it seems unlikely
|
||
that there will be another.
|
||
|
||
By around 2007, GNU/Linux distributions started to use GRUB 2 to
|
||
limited extents, and by the end of 2009 multiple major distributions
|
||
were installing it by default.
|
||
|
||
|
||
File: grub.info, Node: Changes from GRUB Legacy, Next: Features, Prev: History, Up: Introduction
|
||
|
||
1.3 Differences from previous versions
|
||
======================================
|
||
|
||
GRUB 2 is a rewrite of GRUB (*note History::), although it shares many
|
||
characteristics with the previous version, now known as GRUB Legacy.
|
||
Users of GRUB Legacy may need some guidance to find their way around
|
||
this new version.
|
||
|
||
* The configuration file has a new name ('grub.cfg' rather than
|
||
'menu.lst' or 'grub.conf'), new syntax (*note Configuration::) and
|
||
many new commands (*note Commands::). Configuration cannot be
|
||
copied over directly, although most GRUB Legacy users should not
|
||
find the syntax too surprising.
|
||
|
||
* 'grub.cfg' is typically automatically generated by 'grub-mkconfig'
|
||
(*note Simple configuration::). This makes it easier to handle
|
||
versioned kernel upgrades.
|
||
|
||
* Partition numbers in GRUB device names now start at 1, not 0 (*note
|
||
Naming convention::).
|
||
|
||
* The configuration file is now written in something closer to a full
|
||
scripting language: variables, conditionals, and loops are
|
||
available.
|
||
|
||
* A small amount of persistent storage is available across reboots,
|
||
using the 'save_env' and 'load_env' commands in GRUB and the
|
||
'grub-editenv' utility. This is not available in all
|
||
configurations (*note Environment block::).
|
||
|
||
* GRUB 2 has more reliable ways to find its own files and those of
|
||
target kernels on multiple-disk systems, and has commands (*note
|
||
search::) to find devices using file system labels or Universally
|
||
Unique Identifiers (UUIDs).
|
||
|
||
* GRUB 2 is available for several other types of system in addition
|
||
to the PC BIOS systems supported by GRUB Legacy: PC EFI, PC
|
||
coreboot, PowerPC, SPARC, and MIPS Lemote Yeeloong are all
|
||
supported.
|
||
|
||
* Many more file systems are supported, including but not limited to
|
||
ext4, HFS+, and NTFS.
|
||
|
||
* GRUB 2 can read files directly from LVM and RAID devices.
|
||
|
||
* A graphical terminal and a graphical menu system are available.
|
||
|
||
* GRUB 2's interface can be translated, including menu entry names.
|
||
|
||
* The image files (*note Images::) that make up GRUB have been
|
||
reorganised; Stage 1, Stage 1.5, and Stage 2 are no more.
|
||
|
||
* GRUB 2 puts many facilities in dynamically loaded modules, allowing
|
||
the core image to be smaller, and allowing the core image to be
|
||
built in more flexible ways.
|
||
|
||
|
||
File: grub.info, Node: Features, Next: Role of a boot loader, Prev: Changes from GRUB Legacy, Up: Introduction
|
||
|
||
1.4 GRUB features
|
||
=================
|
||
|
||
The primary requirement for GRUB is that it be compliant with the
|
||
"Multiboot Specification", which is described in *note Multiboot
|
||
Specification: (multiboot)Top.
|
||
|
||
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, NetBSD(1) (*note
|
||
Features-Footnote-1::), 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 (*note Commands::) are a superset of those
|
||
supported on the command-line. An example configuration file is
|
||
provided in *note Configuration::.
|
||
|
||
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 (*note Commands::) are a subset of those
|
||
supported for configuration files. Editing commands closely
|
||
resembles the Bash command-line (*note Bash: (features)Command Line
|
||
Editing.), 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). *Note Filesystem::, for
|
||
more information.
|
||
|
||
Support automatic decompression
|
||
Can decompress files which were compressed by 'gzip' or 'xz'(2)
|
||
(*note Features-Footnote-2::). 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.(3) (*note Features-Footnote-3::)
|
||
|
||
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 (*note
|
||
Multiboot Specification: (multiboot)Top.), 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.
|
||
|
||
|
||
File: grub.info, Node: Features-Footnotes, Up: Features
|
||
|
||
(1) The NetBSD/i386 kernel is Multiboot-compliant, but lacks support
|
||
for Multiboot modules.
|
||
|
||
(2) Only CRC32 data integrity check is supported (xz default is CRC64
|
||
so one should use -check=crc32 option). LZMA BCJ filters are supported.
|
||
|
||
(3) There are a few pathological cases where loading a very badly
|
||
organized ELF kernel might take longer, but in practice this never
|
||
happen.
|
||
|
||
|
||
File: grub.info, Node: Role of a boot loader, Prev: Features, Up: Introduction
|
||
|
||
1.5 The role of a boot loader
|
||
=============================
|
||
|
||
The following is a quotation from Gordon Matzigkeit, a GRUB fanatic:
|
||
|
||
Some people like to acknowledge both the operating system and
|
||
kernel when they talk about their computers, so they might say they
|
||
use "GNU/Linux" or "GNU/Hurd". Other people seem to think that the
|
||
kernel is the most important part of the system, so they like to
|
||
call their GNU operating systems "Linux systems."
|
||
|
||
I, personally, believe that this is a grave injustice, because the
|
||
_boot loader_ is the most important software of all. I used to
|
||
refer to the above systems as either "LILO"(1) (*note Role of a
|
||
boot loader-Footnote-1::) or "GRUB" systems.
|
||
|
||
Unfortunately, nobody ever understood what I was talking about; now
|
||
I just use the word "GNU" as a pseudonym for GRUB.
|
||
|
||
So, if you ever hear people talking about their alleged "GNU"
|
||
systems, remember that they are actually paying homage to the best
|
||
boot loader around... GRUB!
|
||
|
||
We, the GRUB maintainers, do not (usually) encourage Gordon's level
|
||
of fanaticism, but it helps to remember that boot loaders deserve
|
||
recognition. We hope that you enjoy using GNU GRUB as much as we did
|
||
writing it.
|
||
|
||
|
||
File: grub.info, Node: Role of a boot loader-Footnotes, Up: Role of a boot loader
|
||
|
||
(1) The LInux LOader, a boot loader that everybody uses, but nobody
|
||
likes.
|
||
|
||
|
||
File: grub.info, Node: Naming convention, Next: OS-specific notes about grub tools, Prev: Introduction, Up: Top
|
||
|
||
2 Naming convention
|
||
*******************
|
||
|
||
The device syntax used in GRUB is a wee bit different from what you may
|
||
have seen before in your operating system(s), and you need to know it so
|
||
that you can specify a drive/partition.
|
||
|
||
Look at the following examples and explanations:
|
||
|
||
(fd0)
|
||
|
||
First of all, GRUB requires that the device name be enclosed with '('
|
||
and ')'. The 'fd' part means that it is a floppy disk. The number '0'
|
||
is the drive number, which is counted from _zero_. This expression
|
||
means that GRUB will use the whole floppy disk.
|
||
|
||
(hd0,msdos2)
|
||
|
||
Here, 'hd' means it is a hard disk drive. The first integer '0'
|
||
indicates the drive number, that is, the first hard disk, the string
|
||
'msdos' indicates the partition scheme, while the second integer, '2',
|
||
indicates the partition number (or the PC slice number in the BSD
|
||
terminology). The partition numbers are counted from _one_, not from
|
||
zero (as was the case in previous versions of GRUB). This expression
|
||
means the second partition of the first hard disk drive. In this case,
|
||
GRUB uses one partition of the disk, instead of the whole disk.
|
||
|
||
(hd0,msdos5)
|
||
|
||
This specifies the first "extended partition" of the first hard disk
|
||
drive. Note that the partition numbers for extended partitions are
|
||
counted from '5', regardless of the actual number of primary partitions
|
||
on your hard disk.
|
||
|
||
(hd1,msdos1,bsd1)
|
||
|
||
This means the BSD 'a' partition on first PC slice number of the
|
||
second hard disk.
|
||
|
||
Of course, to actually access the disks or partitions with GRUB, you
|
||
need to use the device specification in a command, like 'set root=(fd0)'
|
||
or 'parttool (hd0,msdos3) hidden-'. To help you find out which number
|
||
specifies a partition you want, the GRUB command-line (*note
|
||
Command-line interface::) options have argument completion. This means
|
||
that, for example, you only need to type
|
||
|
||
set root=(
|
||
|
||
followed by a <TAB>, and GRUB will display the list of drives,
|
||
partitions, or file names. So it should be quite easy to determine the
|
||
name of your target partition, even with minimal knowledge of the
|
||
syntax.
|
||
|
||
Note that GRUB does _not_ distinguish IDE from SCSI - it simply
|
||
counts the drive numbers from zero, regardless of their type. Normally,
|
||
any IDE drive number is less than any SCSI drive number, although that
|
||
is not true if you change the boot sequence by swapping IDE and SCSI
|
||
drives in your BIOS.
|
||
|
||
Now the question is, how to specify a file? Again, consider an
|
||
example:
|
||
|
||
(hd0,msdos1)/vmlinuz
|
||
|
||
This specifies the file named 'vmlinuz', found on the first partition
|
||
of the first hard disk drive. Note that the argument completion works
|
||
with file names, too.
|
||
|
||
That was easy, admit it. Now read the next chapter, to find out how
|
||
to actually install GRUB on your drive.
|
||
|
||
|
||
File: grub.info, Node: OS-specific notes about grub tools, Next: Installation, Prev: Naming convention, Up: Top
|
||
|
||
3 OS-specific notes about grub tools
|
||
************************************
|
||
|
||
On OS which have device nodes similar to Unix-like OS GRUB tools use the
|
||
OS name. E.g. for GNU/Linux:
|
||
|
||
# grub-install /dev/sda
|
||
|
||
On AROS we use another syntax. For volumes:
|
||
|
||
//:<volume name>
|
||
|
||
E.g.
|
||
|
||
//:DH0
|
||
|
||
For disks we use syntax:
|
||
//:<driver name>/unit/flags
|
||
|
||
E.g.
|
||
|
||
# grub-install //:ata.device/0/0
|
||
|
||
On Windows we use UNC path. For volumes it's typically
|
||
|
||
\\?\Volume{<GUID>}
|
||
\\?\<drive letter>:
|
||
|
||
E.g.
|
||
|
||
\\?\Volume{17f34d50-cf64-4b02-800e-51d79c3aa2ff}
|
||
\\?\C:
|
||
|
||
For disks it's
|
||
|
||
\\?\PhysicalDrive<number>
|
||
|
||
E.g.
|
||
|
||
# grub-install \\?\PhysicalDrive0
|
||
|
||
Beware that you may need to further escape the backslashes depending
|
||
on your shell.
|
||
|
||
When compiled with cygwin support then cygwin drive names are
|
||
automatically when needed. E.g.
|
||
|
||
# grub-install /dev/sda
|
||
|
||
|
||
File: grub.info, Node: Installation, Next: Booting, Prev: OS-specific notes about grub tools, Up: Top
|
||
|
||
4 Installation
|
||
**************
|
||
|
||
In order to install GRUB as your boot loader, you need to first install
|
||
the GRUB system and utilities under your UNIX-like operating system
|
||
(*note Obtaining and Building GRUB::). You can do this either from the
|
||
source tarball, or as a package for your OS.
|
||
|
||
After you have done that, you need to install the boot loader on a
|
||
drive (floppy or hard disk) by using the utility 'grub-install' (*note
|
||
Invoking grub-install::) on a UNIX-like OS.
|
||
|
||
GRUB comes with boot images, which are normally put in the directory
|
||
'/usr/lib/grub/<cpu>-<platform>' (for BIOS-based machines
|
||
'/usr/lib/grub/i386-pc'). Hereafter, the directory where GRUB images
|
||
are initially placed (normally '/usr/lib/grub/<cpu>-<platform>') will be
|
||
called the "image directory", and the directory where the boot loader
|
||
needs to find them (usually '/boot') will be called the "boot
|
||
directory".
|
||
|
||
* Menu:
|
||
|
||
* Installing GRUB using grub-install::
|
||
* Making a GRUB bootable CD-ROM::
|
||
* Device map::
|
||
* BIOS installation::
|
||
|
||
|
||
File: grub.info, Node: Installing GRUB using grub-install, Next: Making a GRUB bootable CD-ROM, Up: Installation
|
||
|
||
4.1 Installing GRUB using grub-install
|
||
======================================
|
||
|
||
For information on where GRUB should be installed on PC BIOS platforms,
|
||
*note BIOS installation::.
|
||
|
||
In order to install GRUB under a UNIX-like OS (such as GNU), invoke
|
||
the program 'grub-install' (*note Invoking grub-install::) as the
|
||
superuser ("root").
|
||
|
||
The usage is basically very simple. You only need to specify one
|
||
argument to the program, namely, where to install the boot loader. The
|
||
argument has to be either a device file (like '/dev/hda'). For example,
|
||
under Linux the following will install GRUB into the MBR of the first
|
||
IDE disk:
|
||
|
||
# grub-install /dev/sda
|
||
|
||
Likewise, under GNU/Hurd, this has the same effect:
|
||
|
||
# grub-install /dev/hd0
|
||
|
||
But all the above examples assume that GRUB should put images under
|
||
the '/boot' directory. If you want GRUB to put images under a directory
|
||
other than '/boot', you need to specify the option '--boot-directory'.
|
||
The typical usage is that you create a GRUB boot floppy with a
|
||
filesystem. Here is an example:
|
||
|
||
# mke2fs /dev/fd0
|
||
# mount -t ext2 /dev/fd0 /mnt
|
||
# mkdir /mnt/boot
|
||
# grub-install --boot-directory=/mnt/boot /dev/fd0
|
||
# umount /mnt
|
||
|
||
Some BIOSes have a bug of exposing the first partition of a USB drive
|
||
as a floppy instead of exposing the USB drive as a hard disk (they call
|
||
it "USB-FDD" boot). In such cases, you need to install like this:
|
||
|
||
# losetup /dev/loop0 /dev/sdb1
|
||
# mount /dev/loop0 /mnt/usb
|
||
# grub-install --boot-directory=/mnt/usb/bugbios --force --allow-floppy /dev/loop0
|
||
|
||
This install doesn't conflict with standard install as long as they
|
||
are in separate directories.
|
||
|
||
On EFI systems for fixed disk install you have to mount EFI System
|
||
Partition. If you mount it at '/boot/efi' then you don't need any
|
||
special arguments:
|
||
|
||
# grub-install
|
||
|
||
Otherwise you need to specify where your EFI System partition is
|
||
mounted:
|
||
|
||
# grub-install --efi-directory=/mnt/efi
|
||
|
||
For removable installs you have to use '--removable' and specify both
|
||
'--boot-directory' and '--efi-directory':
|
||
|
||
# grub-install --efi-directory=/mnt/usb --boot-directory=/mnt/usb/boot --removable
|
||
|
||
|
||
File: grub.info, Node: Making a GRUB bootable CD-ROM, Next: Device map, Prev: Installing GRUB using grub-install, Up: Installation
|
||
|
||
4.2 Making a GRUB bootable CD-ROM
|
||
=================================
|
||
|
||
GRUB supports the "no emulation mode" in the El Torito specification(1)
|
||
(*note Making a GRUB bootable CD-ROM-Footnote-1::). This means that you
|
||
can use the whole CD-ROM from GRUB and you don't have to make a floppy
|
||
or hard disk image file, which can cause compatibility problems.
|
||
|
||
For booting from a CD-ROM, GRUB uses a special image called
|
||
'cdboot.img', which is concatenated with 'core.img'. The 'core.img'
|
||
used for this should be built with at least the 'iso9660' and 'biosdisk'
|
||
modules. Your bootable CD-ROM will usually also need to include a
|
||
configuration file 'grub.cfg' and some other GRUB modules.
|
||
|
||
To make a simple generic GRUB rescue CD, you can use the
|
||
'grub-mkrescue' program (*note Invoking grub-mkrescue::):
|
||
|
||
$ grub-mkrescue -o grub.iso
|
||
|
||
You will often need to include other files in your image. To do
|
||
this, first make a top directory for the bootable image, say, 'iso':
|
||
|
||
$ mkdir iso
|
||
|
||
Make a directory for GRUB:
|
||
|
||
$ mkdir -p iso/boot/grub
|
||
|
||
If desired, make the config file 'grub.cfg' under 'iso/boot/grub'
|
||
(*note Configuration::), and copy any files and directories for the disc
|
||
to the directory 'iso/'.
|
||
|
||
Finally, make the image:
|
||
|
||
$ grub-mkrescue -o grub.iso iso
|
||
|
||
This produces a file named 'grub.iso', which then can be burned into
|
||
a CD (or a DVD), or written to a USB mass storage device.
|
||
|
||
The root device will be set up appropriately on entering your
|
||
'grub.cfg' configuration file, so you can refer to file names on the CD
|
||
without needing to use an explicit device name. This makes it easier to
|
||
produce rescue images that will work on both optical drives and USB mass
|
||
storage devices.
|
||
|
||
|
||
File: grub.info, Node: Making a GRUB bootable CD-ROM-Footnotes, Up: Making a GRUB bootable CD-ROM
|
||
|
||
(1) El Torito is a specification for bootable CD using BIOS
|
||
functions.
|
||
|
||
|
||
File: grub.info, Node: Device map, Next: BIOS installation, Prev: Making a GRUB bootable CD-ROM, Up: Installation
|
||
|
||
4.3 The map between BIOS drives and OS devices
|
||
==============================================
|
||
|
||
If the device map file exists, the GRUB utilities ('grub-probe', etc.)
|
||
read it to map BIOS drives to OS devices. This file consists of lines
|
||
like this:
|
||
|
||
(DEVICE) FILE
|
||
|
||
DEVICE is a drive specified in the GRUB syntax (*note Device
|
||
syntax::), and FILE is an OS file, which is normally a device file.
|
||
|
||
Historically, the device map file was used because GRUB device names
|
||
had to be used in the configuration file, and they were derived from
|
||
BIOS drive numbers. The map between BIOS drives and OS devices cannot
|
||
always be guessed correctly: for example, GRUB will get the order wrong
|
||
if you exchange the boot sequence between IDE and SCSI in your BIOS.
|
||
|
||
Unfortunately, even OS device names are not always stable. Modern
|
||
versions of the Linux kernel may probe drives in a different order from
|
||
boot to boot, and the prefix ('/dev/hd*' versus '/dev/sd*') may change
|
||
depending on the driver subsystem in use. As a result, the device map
|
||
file required frequent editing on some systems.
|
||
|
||
GRUB avoids this problem nowadays by using UUIDs or file system
|
||
labels when generating 'grub.cfg', and we advise that you do the same
|
||
for any custom menu entries you write. If the device map file does not
|
||
exist, then the GRUB utilities will assume a temporary device map on the
|
||
fly. This is often good enough, particularly in the common case of
|
||
single-disk systems.
|
||
|
||
However, the device map file is not entirely obsolete yet, and it is
|
||
used for overriding when current environment is different from the one
|
||
on boot. Most common case is if you use a partition or logical volume
|
||
as a disk for virtual machine. You can put any comments in the file if
|
||
needed, as the GRUB utilities assume that a line is just a comment if
|
||
the first character is '#'.
|
||
|
||
|
||
File: grub.info, Node: BIOS installation, Prev: Device map, Up: Installation
|
||
|
||
4.4 BIOS installation
|
||
=====================
|
||
|
||
MBR
|
||
===
|
||
|
||
The partition table format traditionally used on PC BIOS platforms is
|
||
called the Master Boot Record (MBR) format; this is the format that
|
||
allows up to four primary partitions and additional logical partitions.
|
||
With this partition table format, there are two ways to install GRUB: it
|
||
can be embedded in the area between the MBR and the first partition
|
||
(called by various names, such as the "boot track", "MBR gap", or
|
||
"embedding area", and which is usually at least 1000 KiB), or the core
|
||
image can be installed in a file system and a list of the blocks that
|
||
make it up can be stored in the first sector of that partition.
|
||
|
||
Modern tools usually leave MBR gap of at least 1023 KiB. This amount
|
||
is sufficient to cover most configurations. Hence this value is
|
||
recommended by the GRUB team.
|
||
|
||
Historically many tools left only 31 KiB of space. This is not
|
||
enough to parse reliably difficult structures like Btrfs, ZFS, RAID or
|
||
LVM, or to use difficult disk access methods like ahci. Hence GRUB will
|
||
warn if attempted to install into small MBR gap except in a small number
|
||
of configurations that were grandfathered. The grandfathered config
|
||
must:
|
||
|
||
* use biosdisk as disk access module for '/boot' * not use any
|
||
additional partition maps to access '/boot' * '/boot' must be on one of
|
||
following filesystems: * AFFS, AFS, BFS, cpio, newc, odc, ext2/3/4, FAT,
|
||
exFAT, F2FS, HFS, uncompressed HFS+, ISO9660, JFS, Minix, Minix2,
|
||
Minix3, NILFS2, NTFS, ReiserFS, ROMFS, SFS, tar, UDF, UFS1, UFS2, XFS
|
||
|
||
MBR gap has few technical problems. There is no way to reserve space
|
||
in the embedding area with complete safety, and some proprietary
|
||
software is known to use it to make it difficult for users to work
|
||
around licensing restrictions. GRUB works it around by detecting
|
||
sectors by other software and avoiding them and protecting its own
|
||
sectors using Reed-Solomon encoding.
|
||
|
||
GRUB team recommends having MBR gap of at least 1000 KiB
|
||
|
||
Should it be not possible GRUB has support for a fallback solution
|
||
which is heavily recommended against. Installing to a filesystem means
|
||
that GRUB is vulnerable to its blocks being moved around by filesystem
|
||
features such as tail packing, or even by aggressive fsck
|
||
implementations, so this approach is quite fragile; and this approach
|
||
can only be used if the '/boot' filesystem is on the same disk that the
|
||
BIOS boots from, so that GRUB does not have to rely on guessing BIOS
|
||
drive numbers.
|
||
|
||
The GRUB development team generally recommends embedding GRUB before
|
||
the first partition, unless you have special requirements. You must
|
||
ensure that the first partition starts at least 1000 KiB (2000 sectors)
|
||
from the start of the disk; on modern disks, it is often a performance
|
||
advantage to align partitions on larger boundaries anyway, so the first
|
||
partition might start 1 MiB from the start of the disk.
|
||
|
||
GPT
|
||
===
|
||
|
||
Some newer systems use the GUID Partition Table (GPT) format. This was
|
||
specified as part of the Extensible Firmware Interface (EFI), but it can
|
||
also be used on BIOS platforms if system software supports it; for
|
||
example, GRUB and GNU/Linux can be used in this configuration. With
|
||
this format, it is possible to reserve a whole partition for GRUB,
|
||
called the BIOS Boot Partition. GRUB can then be embedded into that
|
||
partition without the risk of being overwritten by other software and
|
||
without being contained in a filesystem which might move its blocks
|
||
around.
|
||
|
||
When creating a BIOS Boot Partition on a GPT system, you should make
|
||
sure that it is at least 31 KiB in size. (GPT-formatted disks are not
|
||
usually particularly small, so we recommend that you make it larger than
|
||
the bare minimum, such as 1 MiB, to allow plenty of room for growth.)
|
||
You must also make sure that it has the proper partition type. Using
|
||
GNU Parted, you can set this using a command such as the following:
|
||
|
||
# parted /dev/DISK set PARTITION-NUMBER bios_grub on
|
||
|
||
If you are using gdisk, set the partition type to '0xEF02'. With
|
||
partitioning programs that require setting the GUID directly, it should
|
||
be '21686148-6449-6e6f-744e656564454649'.
|
||
|
||
*Caution:* Be very careful which partition you select! When GRUB
|
||
finds a BIOS Boot Partition during installation, it will automatically
|
||
overwrite part of it. Make sure that the partition does not contain any
|
||
other data.
|
||
|
||
|
||
File: grub.info, Node: Booting, Next: Configuration, Prev: Installation, Up: Top
|
||
|
||
5 Booting
|
||
*********
|
||
|
||
GRUB can load Multiboot-compliant kernels in a consistent way, but for
|
||
some free operating systems you need to use some OS-specific magic.
|
||
|
||
* Menu:
|
||
|
||
* General boot methods:: How to boot OSes with GRUB generally
|
||
* Loopback booting:: Notes on booting from loopbacks
|
||
* LVM cache booting:: Notes on booting from LVM cache logical volume
|
||
* OS-specific notes:: Notes on some operating systems
|
||
|
||
|
||
File: grub.info, Node: General boot methods, Next: Loopback booting, Up: Booting
|
||
|
||
5.1 How to boot operating systems
|
||
=================================
|
||
|
||
GRUB has two distinct boot methods. One of the two is to load an
|
||
operating system directly, and the other is to chain-load another boot
|
||
loader which then will load an operating system actually. Generally
|
||
speaking, the former is more desirable, because you don't need to
|
||
install or maintain other boot loaders and GRUB is flexible enough to
|
||
load an operating system from an arbitrary disk/partition. However, the
|
||
latter is sometimes required, since GRUB doesn't support all the
|
||
existing operating systems natively.
|
||
|
||
* Menu:
|
||
|
||
* Loading an operating system directly::
|
||
* Chain-loading::
|
||
|
||
|
||
File: grub.info, Node: Loading an operating system directly, Next: Chain-loading, Up: General boot methods
|
||
|
||
5.1.1 How to boot an OS directly with GRUB
|
||
------------------------------------------
|
||
|
||
Multiboot (*note Multiboot Specification: (multiboot)Top.) is the native
|
||
format supported by GRUB. For the sake of convenience, there is also
|
||
support for Linux, FreeBSD, NetBSD and OpenBSD. If you want to boot
|
||
other operating systems, you will have to chain-load them (*note
|
||
Chain-loading::).
|
||
|
||
FIXME: this section is incomplete.
|
||
|
||
1. Run the command 'boot' (*note boot::).
|
||
|
||
However, DOS and Windows have some deficiencies, so you might have to
|
||
use more complicated instructions. *Note DOS/Windows::, for more
|
||
information.
|
||
|
||
|
||
File: grub.info, Node: Chain-loading, Prev: Loading an operating system directly, Up: General boot methods
|
||
|
||
5.1.2 Chain-loading an OS
|
||
-------------------------
|
||
|
||
Operating systems that do not support Multiboot and do not have specific
|
||
support in GRUB (specific support is available for Linux, FreeBSD,
|
||
NetBSD and OpenBSD) must be chain-loaded, which involves loading another
|
||
boot loader and jumping to it in real mode.
|
||
|
||
The 'chainloader' command (*note chainloader::) is used to set this
|
||
up. It is normally also necessary to load some GRUB modules and set the
|
||
appropriate root device. Putting this together, we get something like
|
||
this, for a Windows system on the first partition of the first hard
|
||
disk:
|
||
|
||
menuentry "Windows" {
|
||
insmod chain
|
||
insmod ntfs
|
||
set root=(hd0,1)
|
||
chainloader +1
|
||
}
|
||
|
||
On systems with multiple hard disks, an additional workaround may be
|
||
required. *Note DOS/Windows::.
|
||
|
||
Chain-loading is only supported on PC BIOS and EFI platforms.
|
||
|
||
|
||
File: grub.info, Node: Loopback booting, Next: LVM cache booting, Prev: General boot methods, Up: Booting
|
||
|
||
5.2 Loopback booting
|
||
====================
|
||
|
||
GRUB is able to read from an image (be it one of CD or HDD) stored on
|
||
any of its accessible storages (refer to *note loopback:: command).
|
||
However the OS itself should be able to find its root. This usually
|
||
involves running a userspace program running before the real root is
|
||
discovered. This is achieved by GRUB loading a specially made small
|
||
image and passing it as ramdisk to the kernel. This is achieved by
|
||
commands 'kfreebsd_module', 'knetbsd_module_elf', 'kopenbsd_ramdisk',
|
||
'initrd' (*note initrd::), 'initrd16' (*note initrd::),
|
||
'multiboot_module', 'multiboot2_module' or 'xnu_ramdisk' depending on
|
||
the loader. Note that for knetbsd the image must be put inside
|
||
miniroot.kmod and the whole miniroot.kmod has to be loaded. In kopenbsd
|
||
payload this is disabled by default. Aditionally behaviour of initial
|
||
ramdisk depends on command line options. Several distributors provide
|
||
the image for this purpose or it's integrated in their standard ramdisk
|
||
and activated by special option. Consult your kernel and distribution
|
||
manual for more details. Other loaders like appleloader, chainloader
|
||
(BIOS, EFI, coreboot), freedos, ntldr and plan9 provide no possibility
|
||
of loading initial ramdisk and as far as author is aware the payloads in
|
||
question don't support either initial ramdisk or discovering loopback
|
||
boot in other way and as such not bootable this way. Please consider
|
||
alternative boot methods like copying all files from the image to actual
|
||
partition. Consult your OS documentation for more details
|
||
|
||
|
||
File: grub.info, Node: LVM cache booting, Next: OS-specific notes, Prev: Loopback booting, Up: Booting
|
||
|
||
5.3 Booting from LVM cache logical volume
|
||
=========================================
|
||
|
||
The LVM cache logical volume is the logical volume consisting of the
|
||
original and the cache pool logical volume. The original is usually on
|
||
a larger and slower storage device while the cache pool is on a smaller
|
||
and faster one. The performance of the original volume can be improved
|
||
by storing the frequently used data on the cache pool to utilize the
|
||
greater performance of faster device.
|
||
|
||
GRUB boots from LVM cache logical volume merely by reading it's
|
||
original logical volume so that dirty data in cache pool volume is
|
||
disregarded. This is not a problem for "writethrough" cache mode as it
|
||
ensures that any data written will be stored both on the cache and the
|
||
origin LV. For the other cache mode "writeback", which delays writing
|
||
from the cache pool back to the origin LV to boost performance, GRUB may
|
||
fail to boot in the wake of accidental power outage due to it's
|
||
inability to assemble the cache device for reading the required dirty
|
||
data left behind. The situation will be improved after adding full
|
||
support to the LVM cache logical volume in the future.
|
||
|
||
|
||
File: grub.info, Node: OS-specific notes, Prev: LVM cache booting, Up: Booting
|
||
|
||
5.4 Some caveats on OS-specific issues
|
||
======================================
|
||
|
||
Here, we describe some caveats on several operating systems.
|
||
|
||
* Menu:
|
||
|
||
* GNU/Hurd::
|
||
* GNU/Linux::
|
||
* NetBSD::
|
||
* DOS/Windows::
|
||
|
||
|
||
File: grub.info, Node: GNU/Hurd, Next: GNU/Linux, Up: OS-specific notes
|
||
|
||
5.4.1 GNU/Hurd
|
||
--------------
|
||
|
||
Since GNU/Hurd is Multiboot-compliant, it is easy to boot it; there is
|
||
nothing special about it. But do not forget that you have to specify a
|
||
root partition to the kernel.
|
||
|
||
1. Set GRUB's root device to the same drive as GNU/Hurd's. The
|
||
command 'search --set=root --file /boot/gnumach.gz' or similar may
|
||
help you (*note search::).
|
||
|
||
2. Load the kernel and the modules, like this:
|
||
|
||
grub> multiboot /boot/gnumach.gz root=device:hd0s1
|
||
grub> module /hurd/ext2fs.static ext2fs --readonly \
|
||
--multiboot-command-line='${kernel-command-line}' \
|
||
--host-priv-port='${host-port}' \
|
||
--device-master-port='${device-port}' \
|
||
--exec-server-task='${exec-task}' -T typed '${root}' \
|
||
'$(task-create)' '$(task-resume)'
|
||
grub> module /lib/ld.so.1 exec /hurd/exec '$(exec-task=task-create)'
|
||
|
||
3. Finally, run the command 'boot' (*note boot::).
|
||
|
||
|
||
File: grub.info, Node: GNU/Linux, Next: NetBSD, Prev: GNU/Hurd, Up: OS-specific notes
|
||
|
||
5.4.2 GNU/Linux
|
||
---------------
|
||
|
||
It is relatively easy to boot GNU/Linux from GRUB, because it somewhat
|
||
resembles to boot a Multiboot-compliant OS.
|
||
|
||
1. Set GRUB's root device to the same drive as GNU/Linux's. The
|
||
command 'search --set=root --file /vmlinuz' or similar may help you
|
||
(*note search::).
|
||
|
||
2. Load the kernel using the command 'linux' (*note linux::):
|
||
|
||
grub> linux /vmlinuz root=/dev/sda1
|
||
|
||
If you need to specify some kernel parameters, just append them to
|
||
the command. For example, to set 'acpi' to 'off', do this:
|
||
|
||
grub> linux /vmlinuz root=/dev/sda1 acpi=off
|
||
|
||
See the documentation in the Linux source tree for complete
|
||
information on the available options.
|
||
|
||
With 'linux' GRUB uses 32-bit protocol. Some BIOS services like
|
||
APM or EDD aren't available with this protocol. In this case you
|
||
need to use 'linux16'
|
||
|
||
grub> linux16 /vmlinuz root=/dev/sda1 acpi=off
|
||
|
||
3. If you use an initrd, execute the command 'initrd' (*note initrd::)
|
||
after 'linux':
|
||
|
||
grub> initrd /initrd
|
||
|
||
If you used 'linux16' you need to use 'initrd16':
|
||
|
||
grub> initrd16 /initrd
|
||
|
||
4. Finally, run the command 'boot' (*note boot::).
|
||
|
||
|
||
File: grub.info, Node: NetBSD, Next: DOS/Windows, Prev: GNU/Linux, Up: OS-specific notes
|
||
|
||
5.4.3 NetBSD
|
||
------------
|
||
|
||
Booting a NetBSD kernel from GRUB is also relatively easy: first set
|
||
GRUB's root device, then load the kernel and the modules, and finally
|
||
run 'boot'.
|
||
|
||
1. Set GRUB's root device to the partition holding the NetBSD root
|
||
file system. For a disk with a NetBSD disk label, this is usually
|
||
the first partition (a:). In that case, and assuming that the
|
||
partition is on the first hard disk, set GRUB's root device as
|
||
follows:
|
||
|
||
grub> insmod part_bsd
|
||
grub> set root=(hd0,netbsd1)
|
||
|
||
For a disk with a GUID Partition Table (GPT), and assuming that the
|
||
NetBSD root partition is the third GPT partition, do this:
|
||
|
||
grub> insmod part_gpt
|
||
grub> set root=(hd0,gpt3)
|
||
|
||
2. Load the kernel using the command 'knetbsd':
|
||
|
||
grub> knetbsd /netbsd
|
||
|
||
Various options may be given to 'knetbsd'. These options are, for
|
||
the most part, the same as in the NetBSD boot loader. For
|
||
instance, to boot the system in single-user mode and with verbose
|
||
messages, do this:
|
||
|
||
grub> knetbsd /netbsd -s -v
|
||
|
||
3. If needed, load kernel modules with the command
|
||
'knetbsd_module_elf'. A typical example is the module for the root
|
||
file system:
|
||
|
||
grub> knetbsd_module_elf /stand/amd64/6.0/modules/ffs/ffs.kmod
|
||
|
||
4. Finally, run the command 'boot' (*note boot::).
|
||
|
||
|
||
File: grub.info, Node: DOS/Windows, Prev: NetBSD, Up: OS-specific notes
|
||
|
||
5.4.4 DOS/Windows
|
||
-----------------
|
||
|
||
GRUB cannot boot DOS or Windows directly, so you must chain-load them
|
||
(*note Chain-loading::). However, their boot loaders have some critical
|
||
deficiencies, so it may not work to just chain-load them. To overcome
|
||
the problems, GRUB provides you with two helper functions.
|
||
|
||
If you have installed DOS (or Windows) on a non-first hard disk, you
|
||
have to use the disk swapping technique, because that OS cannot boot
|
||
from any disks but the first one. The workaround used in GRUB is the
|
||
command 'drivemap' (*note drivemap::), like this:
|
||
|
||
drivemap -s (hd0) (hd1)
|
||
|
||
This performs a "virtual" swap between your first and second hard
|
||
drive.
|
||
|
||
*Caution:* This is effective only if DOS (or Windows) uses BIOS to
|
||
access the swapped disks. If that OS uses a special driver for the
|
||
disks, this probably won't work.
|
||
|
||
Another problem arises if you installed more than one set of
|
||
DOS/Windows onto one disk, because they could be confused if there are
|
||
more than one primary partitions for DOS/Windows. Certainly you should
|
||
avoid doing this, but there is a solution if you do want to do so. Use
|
||
the partition hiding/unhiding technique.
|
||
|
||
If GRUB "hides" a DOS (or Windows) partition (*note parttool::), DOS
|
||
(or Windows) will ignore the partition. If GRUB "unhides" a DOS (or
|
||
Windows) partition, DOS (or Windows) will detect the partition. Thus,
|
||
if you have installed DOS (or Windows) on the first and the second
|
||
partition of the first hard disk, and you want to boot the copy on the
|
||
first partition, do the following:
|
||
|
||
parttool (hd0,1) hidden-
|
||
parttool (hd0,2) hidden+
|
||
set root=(hd0,1)
|
||
chainloader +1
|
||
parttool ${root} boot+
|
||
boot
|
||
|
||
|
||
File: grub.info, Node: Configuration, Next: Theme file format, Prev: Booting, Up: Top
|
||
|
||
6 Writing your own configuration file
|
||
*************************************
|
||
|
||
GRUB is configured using 'grub.cfg', usually located under '/boot/grub'.
|
||
This file is quite flexible, but most users will not need to write the
|
||
whole thing by hand.
|
||
|
||
* Menu:
|
||
|
||
* Simple configuration:: Recommended for most users
|
||
* Root Identifcation Heuristics:: Summary on how the root file system is identified.
|
||
* Shell-like scripting:: For power users and developers
|
||
* Multi-boot manual config:: For non-standard multi-OS scenarios
|
||
* Embedded configuration:: Embedding a configuration file into GRUB
|
||
|
||
|
||
File: grub.info, Node: Simple configuration, Next: Root Identifcation Heuristics, Up: Configuration
|
||
|
||
6.1 Simple configuration handling
|
||
=================================
|
||
|
||
The program 'grub-mkconfig' (*note Invoking grub-mkconfig::) generates
|
||
'grub.cfg' files suitable for most cases. It is suitable for use when
|
||
upgrading a distribution, and will discover available kernels and
|
||
attempt to generate menu entries for them.
|
||
|
||
'grub-mkconfig' does have some limitations. While adding extra
|
||
custom menu entries to the end of the list can be done by editing
|
||
'/etc/grub.d/40_custom' or creating '/boot/grub/custom.cfg', changing
|
||
the order of menu entries or changing their titles may require making
|
||
complex changes to shell scripts stored in '/etc/grub.d/'. This may be
|
||
improved in the future. In the meantime, those who feel that it would
|
||
be easier to write 'grub.cfg' directly are encouraged to do so (*note
|
||
Booting::, and *note Shell-like scripting::), and to disable any system
|
||
provided by their distribution to automatically run 'grub-mkconfig'.
|
||
|
||
The file '/etc/default/grub' controls the operation of
|
||
'grub-mkconfig'. It is sourced by a shell script, and so must be valid
|
||
POSIX shell input; normally, it will just be a sequence of 'KEY=value'
|
||
lines, but if the value contains spaces or other special characters then
|
||
it must be quoted. For example:
|
||
|
||
GRUB_TERMINAL_INPUT="console serial"
|
||
|
||
Valid keys in '/etc/default/grub' are as follows:
|
||
|
||
'GRUB_DEFAULT'
|
||
The default menu entry. This may be a number, in which case it
|
||
identifies the Nth entry in the generated menu counted from zero,
|
||
or the title of a menu entry, or the special string 'saved'. Using
|
||
the id may be useful if you want to set a menu entry as the default
|
||
even though there may be a variable number of entries before it.
|
||
|
||
For example, if you have:
|
||
|
||
menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux {
|
||
...
|
||
}
|
||
|
||
then you can make this the default using:
|
||
|
||
GRUB_DEFAULT=example-gnu-linux
|
||
|
||
Previously it was documented the way to use entry title. While
|
||
this still works it's not recommended since titles often contain
|
||
unstable device names and may be translated
|
||
|
||
If you set this to 'saved', then the default menu entry will be
|
||
that saved by 'GRUB_SAVEDEFAULT' or 'grub-set-default'. This
|
||
relies on the environment block, which may not be available in all
|
||
situations (*note Environment block::).
|
||
|
||
The default is '0'.
|
||
|
||
'GRUB_SAVEDEFAULT'
|
||
If this option is set to 'true', then, when an entry is selected,
|
||
save it as a new default entry for use by future runs of GRUB. This
|
||
is only useful if 'GRUB_DEFAULT=saved'; it is a separate option
|
||
because 'GRUB_DEFAULT=saved' is useful without this option, in
|
||
conjunction with 'grub-set-default'. Unset by default. This
|
||
option relies on the environment block, which may not be available
|
||
in all situations (*note Environment block::).
|
||
|
||
'GRUB_TIMEOUT'
|
||
Boot the default entry this many seconds after the menu is
|
||
displayed, unless a key is pressed. The default is '5'. Set to
|
||
'0' to boot immediately without displaying the menu, or to '-1' to
|
||
wait indefinitely.
|
||
|
||
If 'GRUB_TIMEOUT_STYLE' is set to 'countdown' or 'hidden', the
|
||
timeout is instead counted before the menu is displayed.
|
||
|
||
'GRUB_TIMEOUT_STYLE'
|
||
If this option is unset or set to 'menu', then GRUB will display
|
||
the menu and then wait for the timeout set by 'GRUB_TIMEOUT' to
|
||
expire before booting the default entry. Pressing a key interrupts
|
||
the timeout.
|
||
|
||
If this option is set to 'countdown' or 'hidden', then, before
|
||
displaying the menu, GRUB will wait for the timeout set by
|
||
'GRUB_TIMEOUT' to expire. If <ESC> or <F4> are pressed, or <SHIFT>
|
||
is held down during that time, it will display the menu and wait
|
||
for input. If a hotkey associated with a menu entry is pressed, it
|
||
will boot the associated menu entry immediately. If the timeout
|
||
expires before either of these happens, it will boot the default
|
||
entry. In the 'countdown' case, it will show a one-line indication
|
||
of the remaining time.
|
||
|
||
'GRUB_DEFAULT_BUTTON'
|
||
'GRUB_TIMEOUT_BUTTON'
|
||
'GRUB_TIMEOUT_STYLE_BUTTON'
|
||
'GRUB_BUTTON_CMOS_ADDRESS'
|
||
Variants of the corresponding variables without the '_BUTTON'
|
||
suffix, used to support vendor-specific power buttons. *Note
|
||
Vendor power-on keys::.
|
||
|
||
'GRUB_DISTRIBUTOR'
|
||
Set by distributors of GRUB to their identifying name. This is
|
||
used to generate more informative menu entry titles.
|
||
|
||
'GRUB_TERMINAL_INPUT'
|
||
Select the terminal input device. You may select multiple devices
|
||
here, separated by spaces.
|
||
|
||
Valid terminal input names depend on the platform, but may include
|
||
'console' (native platform console), 'serial' (serial terminal),
|
||
'serial_<port>' (serial terminal with explicit port selection),
|
||
'at_keyboard' (PC AT keyboard), or 'usb_keyboard' (USB keyboard
|
||
using the HID Boot Protocol, for cases where the firmware does not
|
||
handle this).
|
||
|
||
The default is to use the platform's native terminal input.
|
||
|
||
'GRUB_TERMINAL_OUTPUT'
|
||
Select the terminal output device. You may select multiple devices
|
||
here, separated by spaces.
|
||
|
||
Valid terminal output names depend on the platform, but may include
|
||
'console' (native platform console), 'serial' (serial terminal),
|
||
'serial_<port>' (serial terminal with explicit port selection),
|
||
'gfxterm' (graphics-mode output), 'vga_text' (VGA text output),
|
||
'mda_text' (MDA text output), 'morse' (Morse-coding using system
|
||
beeper) or 'spkmodem' (simple data protocol using system speaker).
|
||
|
||
'spkmodem' is useful when no serial port is available. Connect the
|
||
output of sending system (where GRUB is running) to line-in of
|
||
receiving system (usually developer machine). On receiving system
|
||
compile 'spkmodem-recv' from 'util/spkmodem-recv.c' and run:
|
||
|
||
parecord --channels=1 --rate=48000 --format=s16le | ./spkmodem-recv
|
||
|
||
The default is to use the platform's native terminal output.
|
||
|
||
'GRUB_TERMINAL'
|
||
If this option is set, it overrides both 'GRUB_TERMINAL_INPUT' and
|
||
'GRUB_TERMINAL_OUTPUT' to the same value.
|
||
|
||
'GRUB_SERIAL_COMMAND'
|
||
A command to configure the serial port when using the serial
|
||
console. *Note serial::. Defaults to 'serial'.
|
||
|
||
'GRUB_CMDLINE_LINUX'
|
||
Command-line arguments to add to menu entries for the Linux kernel.
|
||
|
||
'GRUB_CMDLINE_LINUX_DEFAULT'
|
||
Unless 'GRUB_DISABLE_RECOVERY' is set to 'true', two menu entries
|
||
will be generated for each Linux kernel: one default entry and one
|
||
entry for recovery mode. This option lists command-line arguments
|
||
to add only to the default menu entry, after those listed in
|
||
'GRUB_CMDLINE_LINUX'.
|
||
|
||
'GRUB_CMDLINE_NETBSD'
|
||
'GRUB_CMDLINE_NETBSD_DEFAULT'
|
||
As 'GRUB_CMDLINE_LINUX' and 'GRUB_CMDLINE_LINUX_DEFAULT', but for
|
||
NetBSD.
|
||
|
||
'GRUB_CMDLINE_GNUMACH'
|
||
As 'GRUB_CMDLINE_LINUX', but for GNU Mach.
|
||
|
||
'GRUB_CMDLINE_XEN'
|
||
'GRUB_CMDLINE_XEN_DEFAULT'
|
||
The values of these options are passed to Xen hypervisor Xen menu
|
||
entries, for all respectively normal entries.
|
||
|
||
'GRUB_CMDLINE_LINUX_XEN_REPLACE'
|
||
'GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT'
|
||
The values of these options replace the values of
|
||
'GRUB_CMDLINE_LINUX' and 'GRUB_CMDLINE_LINUX_DEFAULT' for Linux and
|
||
Xen menu entries.
|
||
|
||
'GRUB_EARLY_INITRD_LINUX_CUSTOM'
|
||
'GRUB_EARLY_INITRD_LINUX_STOCK'
|
||
List of space-separated early initrd images to be loaded from
|
||
'/boot'. This is for loading things like CPU microcode, firmware,
|
||
ACPI tables, crypto keys, and so on. These early images will be
|
||
loaded in the order declared, and all will be loaded before the
|
||
actual functional initrd image.
|
||
|
||
'GRUB_EARLY_INITRD_LINUX_STOCK' is for your distribution to declare
|
||
images that are provided by the distribution. It should not be
|
||
modified without understanding the consequences. They will be
|
||
loaded first.
|
||
|
||
'GRUB_EARLY_INITRD_LINUX_CUSTOM' is for your custom created images.
|
||
|
||
The default stock images are as follows, though they may be
|
||
overridden by your distribution:
|
||
intel-uc.img intel-ucode.img amd-uc.img amd-ucode.img early_ucode.cpio microcode.cpio
|
||
|
||
'GRUB_DISABLE_LINUX_UUID'
|
||
Normally, 'grub-mkconfig' will generate menu entries that use
|
||
universally-unique identifiers (UUIDs) to identify the root
|
||
filesystem to the Linux kernel, using a 'root=UUID=...' kernel
|
||
parameter. This is usually more reliable, but in some cases it may
|
||
not be appropriate. To disable the use of UUIDs, set this option
|
||
to 'true'.
|
||
|
||
'GRUB_DISABLE_LINUX_PARTUUID'
|
||
If 'grub-mkconfig' cannot identify the root filesystem via its
|
||
universally-unique indentifier (UUID), 'grub-mkconfig' can use the
|
||
UUID of the partition containing the filesystem to identify the
|
||
root filesystem to the Linux kernel via a 'root=PARTUUID=...'
|
||
kernel parameter. This is not as reliable as using the filesystem
|
||
UUID, but is more reliable than using the Linux device names. When
|
||
'GRUB_DISABLE_LINUX_PARTUUID' is set to 'false', the Linux kernel
|
||
version must be 2.6.37 (3.10 for systems using the MSDOS partition
|
||
scheme) or newer. This option defaults to 'true'. To enable the
|
||
use of partition UUIDs, set this option to 'false'.
|
||
|
||
'GRUB_DISABLE_RECOVERY'
|
||
If this option is set to 'true', disable the generation of recovery
|
||
mode menu entries.
|
||
|
||
'GRUB_DISABLE_UUID'
|
||
Normally, 'grub-mkconfig' will generate menu entries that use
|
||
universally-unique identifiers (UUIDs) to identify various
|
||
filesystems to search for files. This is usually more reliable,
|
||
but in some cases it may not be appropriate. To disable this use
|
||
of UUIDs, set this option to 'true'. Setting this option to
|
||
'true', will also set the options 'GRUB_DISABLE_LINUX_UUID' and
|
||
'GRUB_DISABLE_LINUX_PARTUUID' to 'true', unless they have been
|
||
explicilty set to 'false'.
|
||
|
||
'GRUB_VIDEO_BACKEND'
|
||
If graphical video support is required, either because the
|
||
'gfxterm' graphical terminal is in use or because
|
||
'GRUB_GFXPAYLOAD_LINUX' is set, then 'grub-mkconfig' will normally
|
||
load all available GRUB video drivers and use the one most
|
||
appropriate for your hardware. If you need to override this for
|
||
some reason, then you can set this option.
|
||
|
||
After 'grub-install' has been run, the available video drivers are
|
||
listed in '/boot/grub/video.lst'.
|
||
|
||
'GRUB_GFXMODE'
|
||
Set the resolution used on the 'gfxterm' graphical terminal. Note
|
||
that you can only use modes which your graphics card supports via
|
||
VESA BIOS Extensions (VBE), so for example native LCD panel
|
||
resolutions may not be available. The default is 'auto', which
|
||
tries to select a preferred resolution. *Note gfxmode::.
|
||
|
||
'GRUB_BACKGROUND'
|
||
Set a background image for use with the 'gfxterm' graphical
|
||
terminal. The value of this option must be a file readable by GRUB
|
||
at boot time, and it must end with '.png', '.tga', '.jpg', or
|
||
'.jpeg'. The image will be scaled if necessary to fit the screen.
|
||
|
||
'GRUB_THEME'
|
||
Set a theme for use with the 'gfxterm' graphical terminal.
|
||
|
||
'GRUB_GFXPAYLOAD_LINUX'
|
||
Set to 'text' to force the Linux kernel to boot in normal text
|
||
mode, 'keep' to preserve the graphics mode set using
|
||
'GRUB_GFXMODE', 'WIDTHxHEIGHT'['xDEPTH'] to set a particular
|
||
graphics mode, or a sequence of these separated by commas or
|
||
semicolons to try several modes in sequence. *Note gfxpayload::.
|
||
|
||
Depending on your kernel, your distribution, your graphics card,
|
||
and the phase of the moon, note that using this option may cause
|
||
GNU/Linux to suffer from various display problems, particularly
|
||
during the early part of the boot sequence. If you have problems,
|
||
set this option to 'text' and GRUB will tell Linux to boot in
|
||
normal text mode.
|
||
|
||
'GRUB_DISABLE_OS_PROBER'
|
||
The 'grub-mkconfig' has a feature to use the external 'os-prober'
|
||
program to discover other operating systems installed on the same
|
||
machine and generate appropriate menu entries for them. It is
|
||
disabled by default since automatic and silent execution of
|
||
'os-prober', and creating boot entries based on that data, is a
|
||
potential attack vector. Set this option to 'false' to enable this
|
||
feature in the 'grub-mkconfig' command.
|
||
|
||
'GRUB_OS_PROBER_SKIP_LIST'
|
||
List of space-separated FS UUIDs of filesystems to be ignored from
|
||
os-prober output. For efi chainloaders it's <UUID>@<EFI FILE>
|
||
|
||
'GRUB_DISABLE_SUBMENU'
|
||
Normally, 'grub-mkconfig' will generate top level menu entry for
|
||
the kernel with highest version number and put all other found
|
||
kernels or alternative menu entries for recovery mode in submenu.
|
||
For entries returned by 'os-prober' first entry will be put on top
|
||
level and all others in submenu. If this option is set to 'true',
|
||
flat menu with all entries on top level will be generated instead.
|
||
Changing this option will require changing existing values of
|
||
'GRUB_DEFAULT', 'fallback' (*note fallback::) and 'default' (*note
|
||
default::) environment variables as well as saved default entry
|
||
using 'grub-set-default' and value used with 'grub-reboot'.
|
||
|
||
'GRUB_ENABLE_CRYPTODISK'
|
||
If set to 'y', 'grub-mkconfig' and 'grub-install' will check for
|
||
encrypted disks and generate additional commands needed to access
|
||
them during boot. Note that in this case unattended boot is not
|
||
possible because GRUB will wait for passphrase to unlock encrypted
|
||
container.
|
||
|
||
'GRUB_INIT_TUNE'
|
||
Play a tune on the speaker when GRUB starts. This is particularly
|
||
useful for users unable to see the screen. The value of this
|
||
option is passed directly to *note play::.
|
||
|
||
'GRUB_BADRAM'
|
||
If this option is set, GRUB will issue a *note badram:: command to
|
||
filter out specified regions of RAM.
|
||
|
||
'GRUB_PRELOAD_MODULES'
|
||
This option may be set to a list of GRUB module names separated by
|
||
spaces. Each module will be loaded as early as possible, at the
|
||
start of 'grub.cfg'.
|
||
|
||
The following options are still accepted for compatibility with
|
||
existing configurations, but have better replacements:
|
||
|
||
'GRUB_HIDDEN_TIMEOUT'
|
||
Wait this many seconds before displaying the menu. If <ESC> or
|
||
<F4> are pressed, or <SHIFT> is held down during that time, display
|
||
the menu and wait for input according to 'GRUB_TIMEOUT'. If a
|
||
hotkey associated with a menu entry is pressed, boot the associated
|
||
menu entry immediately. If the timeout expires before either of
|
||
these happens, display the menu for the number of seconds specified
|
||
in 'GRUB_TIMEOUT' before booting the default entry.
|
||
|
||
If you set 'GRUB_HIDDEN_TIMEOUT', you should also set
|
||
'GRUB_TIMEOUT=0' so that the menu is not displayed at all unless
|
||
<ESC> or <F4> are pressed, or <SHIFT> is held down.
|
||
|
||
This option is unset by default, and is deprecated in favour of the
|
||
less confusing 'GRUB_TIMEOUT_STYLE=countdown' or
|
||
'GRUB_TIMEOUT_STYLE=hidden'.
|
||
|
||
'GRUB_HIDDEN_TIMEOUT_QUIET'
|
||
In conjunction with 'GRUB_HIDDEN_TIMEOUT', set this to 'true' to
|
||
suppress the verbose countdown while waiting for a key to be
|
||
pressed before displaying the menu.
|
||
|
||
This option is unset by default, and is deprecated in favour of the
|
||
less confusing 'GRUB_TIMEOUT_STYLE=countdown'.
|
||
|
||
'GRUB_HIDDEN_TIMEOUT_BUTTON'
|
||
Variant of 'GRUB_HIDDEN_TIMEOUT', used to support vendor-specific
|
||
power buttons. *Note Vendor power-on keys::.
|
||
|
||
This option is unset by default, and is deprecated in favour of the
|
||
less confusing 'GRUB_TIMEOUT_STYLE=countdown' or
|
||
'GRUB_TIMEOUT_STYLE=hidden'.
|
||
|
||
For more detailed customisation of 'grub-mkconfig''s output, you may
|
||
edit the scripts in '/etc/grub.d' directly. '/etc/grub.d/40_custom' is
|
||
particularly useful for adding entire custom menu entries; simply type
|
||
the menu entries you want to add at the end of that file, making sure to
|
||
leave at least the first two lines intact.
|
||
|
||
|
||
File: grub.info, Node: Root Identifcation Heuristics, Next: Shell-like scripting, Prev: Simple configuration, Up: Configuration
|
||
|
||
6.2 Root Identifcation Heuristics
|
||
=================================
|
||
|
||
If the target operating system uses the Linux kernel, 'grub-mkconfig'
|
||
attempts to identify the root file system via a heuristic algoirthm.
|
||
This algorithm selects the identification method of the root file system
|
||
by considering three factors. The first is if an initrd for the target
|
||
operating system is also present. The second is
|
||
'GRUB_DISABLE_LINUX_UUID' and if set to 'true', prevents 'grub-mkconfig'
|
||
from identifying the root file system by its UUID. The third is
|
||
'GRUB_DISABLE_LINUX_PARTUUID' and if set to 'true', prevents
|
||
'grub-mkconfig' from identifying the root file system via the UUID of
|
||
its enclosing partition. If the variables are assigned any other value,
|
||
that value is considered equivalent to 'false'. The variables are also
|
||
considered to be set to 'false' if they are not set.
|
||
|
||
When booting, the Linux kernel will delegate the task of mounting the
|
||
root filesystem to the initrd. Most initrd images determine the root
|
||
file system by checking the Linux kernel's command-line for the 'root'
|
||
key and use its value as the identification method of the root file
|
||
system. To improve the reliability of booting, most initrd images also
|
||
allow the root file system to be identified by its UUID. Because of this
|
||
behavior, the 'grub-mkconfig' command will set 'root' to 'root=UUID=...'
|
||
to provide the initrd with the filesystem UUID of the root file system.
|
||
|
||
If no initrd is detected or 'GRUB_DISABLE_LINUX_UUID' is set to
|
||
'true' then 'grub-command' will identify the root filesystem by setting
|
||
the kernel command-line variable 'root' to 'root=PARTUUID=...' unless
|
||
'GRUB_DISABLE_LINUX_PARTUUID' is also set to 'true'. If
|
||
'GRUB_DISABLE_LINUX_PARTUUID' is also set to 'true', 'grub-command' will
|
||
identify by its Linux device name.
|
||
|
||
The following table summarizes the behavior of the 'grub-mkconfig'
|
||
command.
|
||
|
||
Initrd GRUB_DISABLE_LINUX_PARTUUID GRUB_DISABLE_LINUX_UUID Linux Root
|
||
detected Set To Set To ID Method
|
||
--------------------------------------------------------------------------------
|
||
false false false part UUID
|
||
false false true part UUID
|
||
false true false dev name
|
||
false true true dev name
|
||
true false false fs UUID
|
||
true false true part UUID
|
||
true true false fs UUID
|
||
true true true dev name
|
||
|
||
Remember, 'GRUB_DISABLE_LINUX_PARTUUID' and 'GRUB_DISABLE_LINUX_UUID'
|
||
are also considered to be set to 'false' when they are unset.
|
||
|
||
|
||
File: grub.info, Node: Shell-like scripting, Next: Multi-boot manual config, Prev: Root Identifcation Heuristics, Up: Configuration
|
||
|
||
6.3 Writing full configuration files directly
|
||
=============================================
|
||
|
||
'grub.cfg' is written in GRUB's built-in scripting language, which has a
|
||
syntax quite similar to that of GNU Bash and other Bourne shell
|
||
derivatives.
|
||
|
||
Words
|
||
=====
|
||
|
||
A "word" is a sequence of characters considered as a single unit by
|
||
GRUB. Words are separated by "metacharacters", which are the following
|
||
plus space, tab, and newline:
|
||
|
||
{ } | & $ ; < >
|
||
|
||
Quoting may be used to include metacharacters in words; see below.
|
||
|
||
Reserved words
|
||
==============
|
||
|
||
Reserved words have a special meaning to GRUB. The following words are
|
||
recognised as reserved when unquoted and either the first word of a
|
||
simple command or the third word of a 'for' command:
|
||
|
||
! [[ ]] { }
|
||
case do done elif else esac fi for function
|
||
if in menuentry select then time until while
|
||
|
||
Not all of these reserved words have a useful purpose yet; some are
|
||
reserved for future expansion.
|
||
|
||
Quoting
|
||
=======
|
||
|
||
Quoting is used to remove the special meaning of certain characters or
|
||
words. It can be used to treat metacharacters as part of a word, to
|
||
prevent reserved words from being recognised as such, and to prevent
|
||
variable expansion.
|
||
|
||
There are three quoting mechanisms: the escape character, single
|
||
quotes, and double quotes.
|
||
|
||
A non-quoted backslash (\) is the "escape character". It preserves
|
||
the literal value of the next character that follows, with the exception
|
||
of newline.
|
||
|
||
Enclosing characters in single quotes preserves the literal value of
|
||
each character within the quotes. A single quote may not occur between
|
||
single quotes, even when preceded by a backslash.
|
||
|
||
Enclosing characters in double quotes preserves the literal value of
|
||
all characters within the quotes, with the exception of '$' and '\'.
|
||
The '$' character retains its special meaning within double quotes. The
|
||
backslash retains its special meaning only when followed by one of the
|
||
following characters: '$', '"', '\', or newline. A backslash-newline
|
||
pair is treated as a line continuation (that is, it is removed from the
|
||
input stream and effectively ignored(1) (*note Shell-like
|
||
scripting-Footnote-1::)). A double quote may be quoted within double
|
||
quotes by preceding it with a backslash.
|
||
|
||
Variable expansion
|
||
==================
|
||
|
||
The '$' character introduces variable expansion. The variable name to
|
||
be expanded may be enclosed in braces, which are optional but serve to
|
||
protect the variable to be expanded from characters immediately
|
||
following it which could be interpreted as part of the name.
|
||
|
||
Normal variable names begin with an alphabetic character, followed by
|
||
zero or more alphanumeric characters. These names refer to entries in
|
||
the GRUB environment (*note Environment::).
|
||
|
||
Positional variable names consist of one or more digits. They
|
||
represent parameters passed to function calls, with '$1' representing
|
||
the first parameter, and so on.
|
||
|
||
The special variable name '?' expands to the exit status of the most
|
||
recently executed command. When positional variable names are active,
|
||
other special variable names '@', '*' and '#' are defined and they
|
||
expand to all positional parameters with necessary quoting, positional
|
||
parameters without any quoting, and positional parameter count
|
||
respectively.
|
||
|
||
Comments
|
||
========
|
||
|
||
A word beginning with '#' causes that word and all remaining characters
|
||
on that line to be ignored.
|
||
|
||
Simple commands
|
||
===============
|
||
|
||
A "simple command" is a sequence of words separated by spaces or tabs
|
||
and terminated by a semicolon or a newline. The first word specifies
|
||
the command to be executed. The remaining words are passed as arguments
|
||
to the invoked command.
|
||
|
||
The return value of a simple command is its exit status. If the
|
||
reserved word '!' precedes the command, then the return value is instead
|
||
the logical negation of the command's exit status.
|
||
|
||
Compound commands
|
||
=================
|
||
|
||
A "compound command" is one of the following:
|
||
|
||
for NAME in WORD ...; do LIST; done
|
||
The list of words following 'in' is expanded, generating a list of
|
||
items. The variable NAME is set to each element of this list in
|
||
turn, and LIST is executed each time. The return value is the exit
|
||
status of the last command that executes. If the expansion of the
|
||
items following 'in' results in an empty list, no commands are
|
||
executed, and the return status is 0.
|
||
|
||
if LIST; then LIST; [elif LIST; then LIST;] ... [else LIST;] fi
|
||
The 'if' LIST is executed. If its exit status is zero, the 'then'
|
||
LIST is executed. Otherwise, each 'elif' LIST is executed in turn,
|
||
and if its exit status is zero, the corresponding 'then' LIST is
|
||
executed and the command completes. Otherwise, the 'else' LIST is
|
||
executed, if present. The exit status is the exit status of the
|
||
last command executed, or zero if no condition tested true.
|
||
|
||
while COND; do LIST; done
|
||
until COND; do LIST; done
|
||
The 'while' command continuously executes the 'do' LIST as long as
|
||
the last command in COND returns an exit status of zero. The
|
||
'until' command is identical to the 'while' command, except that
|
||
the test is negated; the 'do' LIST is executed as long as the last
|
||
command in COND returns a non-zero exit status. The exit status of
|
||
the 'while' and 'until' commands is the exit status of the last
|
||
'do' LIST command executed, or zero if none was executed.
|
||
|
||
function NAME { COMMAND; ... }
|
||
This defines a function named NAME. The "body" of the function is
|
||
the list of commands within braces, each of which must be
|
||
terminated with a semicolon or a newline. This list of commands
|
||
will be executed whenever NAME is specified as the name of a simple
|
||
command. Function definitions do not affect the exit status in
|
||
'$?'. When executed, the exit status of a function is the exit
|
||
status of the last command executed in the body.
|
||
|
||
menuentry TITLE ['--class=class' ...] ['--users=users'] ['--unrestricted'] ['--hotkey=key'] ['--id=id'] { COMMAND; ... }
|
||
*Note menuentry::.
|
||
|
||
Built-in Commands
|
||
=================
|
||
|
||
Some built-in commands are also provided by GRUB script to help script
|
||
writers perform actions that are otherwise not possible. For example,
|
||
these include commands to jump out of a loop without fully completing
|
||
it, etc.
|
||
|
||
break ['n']
|
||
Exit from within a 'for', 'while', or 'until' loop. If 'n' is
|
||
specified, break 'n' levels. 'n' must be greater than or equal to
|
||
1. If 'n' is greater than the number of enclosing loops, all
|
||
enclosing loops are exited. The return value is 0 unless 'n' is
|
||
not greater than or equal to 1.
|
||
|
||
continue ['n']
|
||
Resume the next iteration of the enclosing 'for', 'while' or
|
||
'until' loop. If 'n' is specified, resume at the 'n'th enclosing
|
||
loop. 'n' must be greater than or equal to 1. If 'n' is greater
|
||
than the number of enclosing loops, the last enclosing loop (the
|
||
"top-level" loop) is resumed. The return value is 0 unless 'n' is
|
||
not greater than or equal to 1.
|
||
|
||
return ['n']
|
||
Causes a function to exit with the return value specified by 'n'.
|
||
If 'n' is omitted, the return status is that of the last command
|
||
executed in the function body. If used outside a function the
|
||
return status is false.
|
||
|
||
setparams ['arg'] ...
|
||
Replace positional parameters starting with '$1' with arguments to
|
||
'setparams'.
|
||
|
||
shift ['n']
|
||
The positional parameters from 'n'+1 ... are renamed to '$1'....
|
||
Parameters represented by the numbers '$#' down to '$#'-'n'+1 are
|
||
unset. 'n' must be a non-negative number less than or equal to
|
||
'$#'. If 'n' is 0, no parameters are changed. If 'n' is not
|
||
given, it is assumed to be 1. If 'n' is greater than '$#', the
|
||
positional parameters are not changed. The return status is
|
||
greater than zero if 'n' is greater than '$#' or less than zero;
|
||
otherwise 0.
|
||
|
||
|
||
File: grub.info, Node: Shell-like scripting-Footnotes, Up: Shell-like scripting
|
||
|
||
(1) Currently a backslash-newline pair within a variable name is not
|
||
handled properly, so use this feature with some care.
|
||
|
||
|
||
File: grub.info, Node: Multi-boot manual config, Next: Embedded configuration, Prev: Shell-like scripting, Up: Configuration
|
||
|
||
6.4 Multi-boot manual config
|
||
============================
|
||
|
||
Currently autogenerating config files for multi-boot environments
|
||
depends on os-prober and has several shortcomings. Due to that it is
|
||
disabled by default. It is advised to use the power of GRUB syntax and
|
||
do it yourself. A possible configuration is detailed here, feel free to
|
||
adjust to your needs.
|
||
|
||
First create a separate GRUB partition, big enough to hold GRUB. Some
|
||
of the following entries show how to load OS installer images from this
|
||
same partition, for that you obviously need to make the partition large
|
||
enough to hold those images as well. Mount this partition on/mnt/boot
|
||
and disable GRUB in all OSes and manually install self-compiled latest
|
||
GRUB with:
|
||
|
||
'grub-install --boot-directory=/mnt/boot /dev/sda'
|
||
|
||
In all the OSes install GRUB tools but disable installing GRUB in
|
||
bootsector, so you'll have menu.lst and grub.cfg available for use.
|
||
Also disable os-prober use by setting:
|
||
|
||
'GRUB_DISABLE_OS_PROBER=true'
|
||
|
||
in /etc/default/grub
|
||
|
||
Then write a grub.cfg (/mnt/boot/grub/grub.cfg):
|
||
|
||
|
||
menuentry "OS using grub2" {
|
||
insmod xfs
|
||
search --set=root --label OS1 --hint hd0,msdos8
|
||
configfile /boot/grub/grub.cfg
|
||
}
|
||
|
||
menuentry "OS using grub2-legacy" {
|
||
insmod ext2
|
||
search --set=root --label OS2 --hint hd0,msdos6
|
||
legacy_configfile /boot/grub/menu.lst
|
||
}
|
||
|
||
menuentry "Windows XP" {
|
||
insmod ntfs
|
||
search --set=root --label WINDOWS_XP --hint hd0,msdos1
|
||
ntldr /ntldr
|
||
}
|
||
|
||
menuentry "Windows 7" {
|
||
insmod ntfs
|
||
search --set=root --label WINDOWS_7 --hint hd0,msdos2
|
||
ntldr /bootmgr
|
||
}
|
||
|
||
menuentry "FreeBSD" {
|
||
insmod zfs
|
||
search --set=root --label freepool --hint hd0,msdos7
|
||
kfreebsd /freebsd@/boot/kernel/kernel
|
||
kfreebsd_module_elf /freebsd@/boot/kernel/opensolaris.ko
|
||
kfreebsd_module_elf /freebsd@/boot/kernel/zfs.ko
|
||
kfreebsd_module /freebsd@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
|
||
set kFreeBSD.vfs.root.mountfrom=zfs:freepool/freebsd
|
||
set kFreeBSD.hw.psm.synaptics_support=1
|
||
}
|
||
|
||
menuentry "experimental GRUB" {
|
||
search --set=root --label GRUB --hint hd0,msdos5
|
||
multiboot /experimental/grub/i386-pc/core.img
|
||
}
|
||
|
||
menuentry "Fedora 16 installer" {
|
||
search --set=root --label GRUB --hint hd0,msdos5
|
||
linux /fedora/vmlinuz lang=en_US keymap=sg resolution=1280x800
|
||
initrd /fedora/initrd.img
|
||
}
|
||
|
||
menuentry "Fedora rawhide installer" {
|
||
search --set=root --label GRUB --hint hd0,msdos5
|
||
linux /fedora/vmlinuz repo=ftp://mirror.switch.ch/mirror/fedora/linux/development/rawhide/x86_64 lang=en_US keymap=sg resolution=1280x800
|
||
initrd /fedora/initrd.img
|
||
}
|
||
|
||
menuentry "Debian sid installer" {
|
||
search --set=root --label GRUB --hint hd0,msdos5
|
||
linux /debian/dists/sid/main/installer-amd64/current/images/hd-media/vmlinuz
|
||
initrd /debian/dists/sid/main/installer-amd64/current/images/hd-media/initrd.gz
|
||
}
|
||
|
||
|
||
Notes:
|
||
* Argument to search after -label is FS LABEL. You can also use UUIDs
|
||
with -fs-uuid UUID instead of -label LABEL. You could also use
|
||
direct 'root=hd0,msdosX' but this is not recommended due to device
|
||
name instability.
|
||
|
||
|
||
File: grub.info, Node: Embedded configuration, Prev: Multi-boot manual config, Up: Configuration
|
||
|
||
6.5 Embedding a configuration file into GRUB
|
||
============================================
|
||
|
||
GRUB supports embedding a configuration file directly into the core
|
||
image, so that it is loaded before entering normal mode. This is
|
||
useful, for example, when it is not straightforward to find the real
|
||
configuration file, or when you need to debug problems with loading that
|
||
file. 'grub-install' uses this feature when it is not using BIOS disk
|
||
functions or when installing to a different disk from the one containing
|
||
'/boot/grub', in which case it needs to use the 'search' command (*note
|
||
search::) to find '/boot/grub'.
|
||
|
||
To embed a configuration file, use the '-c' option to 'grub-mkimage'.
|
||
The file is copied into the core image, so it may reside anywhere on the
|
||
file system, and may be removed after running 'grub-mkimage'.
|
||
|
||
After the embedded configuration file (if any) is executed, GRUB will
|
||
load the 'normal' module (*note normal::), which will then read the real
|
||
configuration file from '$prefix/grub.cfg'. By this point, the 'root'
|
||
variable will also have been set to the root device name. For example,
|
||
'prefix' might be set to '(hd0,1)/boot/grub', and 'root' might be set to
|
||
'hd0,1'. Thus, in most cases, the embedded configuration file only
|
||
needs to set the 'prefix' and 'root' variables, and then drop through to
|
||
GRUB's normal processing. A typical example of this might look like
|
||
this:
|
||
|
||
search.fs_uuid 01234567-89ab-cdef-0123-456789abcdef root
|
||
set prefix=($root)/boot/grub
|
||
|
||
(The 'search_fs_uuid' module must be included in the core image for
|
||
this example to work.)
|
||
|
||
In more complex cases, it may be useful to read other configuration
|
||
files directly from the embedded configuration file. This allows such
|
||
things as reading files not called 'grub.cfg', or reading files from a
|
||
directory other than that where GRUB's loadable modules are installed.
|
||
To do this, include the 'configfile' and 'normal' modules in the core
|
||
image, and embed a configuration file that uses the 'configfile' command
|
||
to load another file. The following example of this also requires the
|
||
'echo', 'search_label', and 'test' modules to be included in the core
|
||
image:
|
||
|
||
search.fs_label grub root
|
||
if [ -e /boot/grub/example/test1.cfg ]; then
|
||
set prefix=($root)/boot/grub
|
||
configfile /boot/grub/example/test1.cfg
|
||
else
|
||
if [ -e /boot/grub/example/test2.cfg ]; then
|
||
set prefix=($root)/boot/grub
|
||
configfile /boot/grub/example/test2.cfg
|
||
else
|
||
echo "Could not find an example configuration file!"
|
||
fi
|
||
fi
|
||
|
||
The embedded configuration file may not contain menu entries
|
||
directly, but may only read them from elsewhere using 'configfile'.
|
||
|
||
|
||
File: grub.info, Node: Theme file format, Next: Network, Prev: Configuration, Up: Top
|
||
|
||
7 Theme file format
|
||
*******************
|
||
|
||
7.1 Introduction
|
||
================
|
||
|
||
The GRUB graphical menu supports themes that can customize the layout
|
||
and appearance of the GRUB boot menu. The theme is configured through a
|
||
plain text file that specifies the layout of the various GUI components
|
||
(including the boot menu, timeout progress bar, and text messages) as
|
||
well as the appearance using colors, fonts, and images. Example is
|
||
available in docs/example_theme.txt
|
||
|
||
7.2 Theme Elements
|
||
==================
|
||
|
||
7.2.1 Colors
|
||
------------
|
||
|
||
Colors can be specified in several ways:
|
||
|
||
* HTML-style "#RRGGBB" or "#RGB" format, where *R*, *G*, and *B* are
|
||
hexadecimal digits (e.g., "#8899FF")
|
||
* as comma-separated decimal RGB values (e.g., "128, 128, 255")
|
||
* with "SVG 1.0 color names" (e.g., "cornflowerblue") which must be
|
||
specified in lowercase.
|
||
|
||
7.2.2 Fonts
|
||
-----------
|
||
|
||
The fonts GRUB uses "PFF2 font format" bitmap fonts. Fonts are
|
||
specified with full font names. Currently there is no provision for a
|
||
preference list of fonts, or deriving one font from another. Fonts are
|
||
loaded with the "loadfont" command in GRUB (*note loadfont::). To see
|
||
the list of loaded fonts, execute the "lsfonts" command (*note
|
||
lsfonts::). If there are too many fonts to fit on screen, do "set
|
||
pager=1" before executing "lsfonts".
|
||
|
||
7.2.3 Progress Bar
|
||
------------------
|
||
|
||
Figure 7.1
|
||
|
||
Figure 7.2
|
||
|
||
Progress bars are used to display the remaining time before GRUB boots
|
||
the default menu entry. To create a progress bar that will display the
|
||
remaining time before automatic boot, simply create a "progress_bar"
|
||
component with the id "__timeout__". This indicates to GRUB that the
|
||
progress bar should be updated as time passes, and it should be made
|
||
invisible if the countdown to automatic boot is interrupted by the user.
|
||
|
||
Progress bars may optionally have text displayed on them. This text
|
||
is controlled by variable "text" which contains a printf template with
|
||
the only argument %d is the number of seconds remaining. Additionally
|
||
special values "@TIMEOUT_NOTIFICATION_SHORT@",
|
||
"@TIMEOUT_NOTIFICATION_MIDDLE@", "@TIMEOUT_NOTIFICATION_LONG@" are
|
||
replaced with standard and translated templates.
|
||
|
||
7.2.4 Circular Progress Indicator
|
||
---------------------------------
|
||
|
||
The circular progress indicator functions similarly to the progress bar.
|
||
When given an id of "__timeout__", GRUB updates the circular progress
|
||
indicator's value to indicate the time remaining. For the circular
|
||
progress indicator, there are two images used to render it: the *center*
|
||
image, and the *tick* image. The center image is rendered in the center
|
||
of the component, while the tick image is used to render each mark along
|
||
the circumference of the indicator.
|
||
|
||
7.2.5 Labels
|
||
------------
|
||
|
||
Text labels can be placed on the boot screen. The font, color, and
|
||
horizontal alignment can be specified for labels. If a label is given
|
||
the id "__timeout__", then the "text" property for that label is also
|
||
updated with a message informing the user of the number of seconds
|
||
remaining until automatic boot. This is useful in case you want the
|
||
text displayed somewhere else instead of directly on the progress bar.
|
||
|
||
7.2.6 Boot Menu
|
||
---------------
|
||
|
||
The boot menu where GRUB displays the menu entries from the "grub.cfg"
|
||
file. It is a list of items, where each item has a title and an
|
||
optional icon. The icon is selected based on the *classes* specified
|
||
for the menu entry. If there is a PNG file named "myclass.png" in the
|
||
"grub/themes/icons" directory, it will be displayed for items which have
|
||
the class *myclass*. The boot menu can be customized in several ways,
|
||
such as the font and color used for the menu entry title, and by
|
||
specifying styled boxes for the menu itself and for the selected item
|
||
highlight.
|
||
|
||
7.2.7 Styled Boxes
|
||
------------------
|
||
|
||
One of the most important features for customizing the layout is the use
|
||
of *styled boxes*. A styled box is composed of 9 rectangular (and
|
||
potentially empty) regions, which are used to seamlessly draw the styled
|
||
box on screen:
|
||
|
||
Northwest (nw) North (n) Northeast (ne)
|
||
West (w) Center (c) East (e)
|
||
Southwest (sw) South (s) Southeast (se)
|
||
|
||
To support any size of box on screen, the center slice and the slices
|
||
for the top, bottom, and sides are all scaled to the correct size for
|
||
the component on screen, using the following rules:
|
||
|
||
1. The edge slices (north, south, east, and west) are scaled in the
|
||
direction of the edge they are adjacent to. For instance, the west
|
||
slice is scaled vertically.
|
||
2. The corner slices (northwest, northeast, southeast, and southwest)
|
||
are not scaled.
|
||
3. The center slice is scaled to fill the remaining space in the
|
||
middle.
|
||
|
||
As an example of how an image might be sliced up, consider the styled
|
||
box used for a terminal view.
|
||
|
||
Figure 7.3
|
||
|
||
7.2.8 Creating Styled Box Images
|
||
--------------------------------
|
||
|
||
The Inkscape_ scalable vector graphics editor is a very useful tool for
|
||
creating styled box images. One process that works well for slicing a
|
||
drawing into the necessary image slices is:
|
||
|
||
1. Create or open the drawing you'd like use.
|
||
2. Create a new layer on the top of the layer stack. Make it visible.
|
||
Select this layer as the current layer.
|
||
3. Draw 9 rectangles on your drawing where you'd like the slices to
|
||
be. Clear the fill option, and set the stroke to 1 pixel wide
|
||
solid stroke. The corners of the slices must meet precisely; if it
|
||
is off by a single pixel, it will probably be evident when the
|
||
styled box is rendered in the GRUB menu. You should probably go to
|
||
File | Document Properties | Grids and enable a grid or create a
|
||
guide (click on one of the rulers next to the drawing and drag over
|
||
the drawing; release the mouse button to place the guide) to help
|
||
place the rectangles precisely.
|
||
4. Right click on the center slice rectangle and choose Object
|
||
Properties. Change the "Id" to "slice_c" and click Set. Repeat
|
||
this for the remaining 8 rectangles, giving them Id values of
|
||
"slice_n", "slice_ne", "slice_e", and so on according to the
|
||
location.
|
||
5. Save the drawing.
|
||
6. Select all the slice rectangles. With the slice layer selected,
|
||
you can simply press Ctrl+A to select all rectangles. The status
|
||
bar should indicate that 9 rectangles are selected.
|
||
7. Click the layer hide icon for the slice layer in the layer palette.
|
||
The rectangles will remain selected, even though they are hidden.
|
||
8. Choose File | Export Bitmap and check the *Batch export 9 selected
|
||
objects* box. Make sure that *Hide all except selected* is
|
||
unchecked. click *Export*. This will create PNG files in the same
|
||
directory as the drawing, named after the slices. These can now be
|
||
used for a styled box in a GRUB theme.
|
||
|
||
7.3 Theme File Manual
|
||
=====================
|
||
|
||
The theme file is a plain text file. Lines that begin with "#" are
|
||
ignored and considered comments. (Note: This may not be the case if the
|
||
previous line ended where a value was expected.)
|
||
|
||
The theme file contains two types of statements:
|
||
1. Global properties.
|
||
2. Component construction.
|
||
|
||
7.3.1 Global Properties
|
||
-----------------------
|
||
|
||
7.3.2 Format
|
||
------------
|
||
|
||
Global properties are specified with the simple format:
|
||
* name1: value1
|
||
* name2: "value which may contain spaces"
|
||
* name3: #88F
|
||
|
||
In this example, name3 is assigned a color value.
|
||
|
||
7.3.3 Global Property List
|
||
--------------------------
|
||
|
||
title-text Specifies the text to display at the top
|
||
center of the screen as a title.
|
||
title-font Defines the font used for the title
|
||
message at the top of the screen.
|
||
title-color Defines the color of the title message.
|
||
message-font Currently unused. Left for backward
|
||
compatibility.
|
||
message-color Currently unused. Left for backward
|
||
compatibility.
|
||
message-bg-color Currently unused. Left for backward
|
||
compatibility.
|
||
desktop-image Specifies the image to use as the
|
||
background. It will be scaled to fit the
|
||
screen size or proportionally scaled
|
||
depending on the scale method.
|
||
desktop-image-scale-methodSpecifies the scaling method for the
|
||
*desktop-image*. Options are "stretch",
|
||
"crop", "padding", "fitwidth",
|
||
"fitheight". "stretch" for fitting the
|
||
screen size. Otherwise it is
|
||
proportional scaling of a part of
|
||
*desktop-image* to the part of the
|
||
screen. "crop" part of the
|
||
*desktop-image* will be proportionally
|
||
scaled to fit the screen sizes.
|
||
"padding" the entire *desktop-image* will
|
||
be contained on the screen. "fitwidth"
|
||
for fitting the *desktop-image*'s width
|
||
with screen width. "fitheight" for
|
||
fitting the *desktop-image*'s height with
|
||
the screen height. Default is "stretch".
|
||
desktop-image-h-align Specifies the horizontal alignment of the
|
||
*desktop-image* if
|
||
*desktop-image-scale-method* isn't equeal
|
||
to "stretch". Options are "left",
|
||
"center", "right". Default is "center".
|
||
desktop-image-v-align Specifies the vertical alignment of the
|
||
*desktop-image* if
|
||
*desktop-image-scale-method* isn't equeal
|
||
to "stretch". Options are "top",
|
||
"center", "bottom". Default is "center".
|
||
desktop-color Specifies the color for the background if
|
||
*desktop-image* is not specified.
|
||
terminal-box Specifies the file name pattern for the
|
||
styled box slices used for the command
|
||
line terminal window. For example,
|
||
"terminal-box: terminal_*.png" will use
|
||
the images "terminal_c.png" as the center
|
||
area, "terminal_n.png" as the north (top)
|
||
edge, "terminal_nw.png" as the northwest
|
||
(upper left) corner, and so on. If the
|
||
image for any slice is not found, it will
|
||
simply be left empty.
|
||
terminal-border Specifies the border width of the
|
||
terminal window.
|
||
terminal-left Specifies the left coordinate of the
|
||
terminal window.
|
||
terminal-top Specifies the top coordinate of the
|
||
terminal window.
|
||
terminal-width Specifies the width of the terminal
|
||
window.
|
||
terminal-height Specifies the height of the terminal
|
||
window.
|
||
|
||
7.3.4 Component Construction
|
||
----------------------------
|
||
|
||
Greater customizability comes is provided by components. A tree of
|
||
components forms the user interface. *Containers* are components that
|
||
can contain other components, and there is always a single root
|
||
component which is an instance of a *canvas* container.
|
||
|
||
Components are created in the theme file by prefixing the type of
|
||
component with a '+' sign:
|
||
|
||
' + label { text="GRUB" font="aqui 11" color="#8FF" } '
|
||
|
||
properties of a component are specified as "name = value" (whitespace
|
||
surrounding tokens is optional and is ignored) where *value* may be:
|
||
* a single word (e.g., "align = center", "color = #FF8080"),
|
||
* a quoted string (e.g., "text = "Hello, World!""), or
|
||
* a tuple (e.g., "preferred_size = (120, 80)").
|
||
|
||
7.3.5 Component List
|
||
--------------------
|
||
|
||
The following is a list of the components and the properties they
|
||
support.
|
||
|
||
* label A label displays a line of text.
|
||
|
||
Properties:
|
||
id Set to "__timeout__" to display the time elapsed
|
||
to an automatical boot of the default entry.
|
||
text The text to display. If "id" is set to
|
||
"__timeout__" and no "text" property is set then
|
||
the amount of seconds will be shown. If set to
|
||
"@KEYMAP_SHORT@", "@KEYMAP_MIDDLE@" or
|
||
"@KEYMAP_LONG@" then predefined hotkey
|
||
information will be shown.
|
||
font The font to use for text display.
|
||
color The color of the text.
|
||
align The horizontal alignment of the text within the
|
||
component. Options are "left", "center" and
|
||
"right".
|
||
visible Set to "false" to hide the label.
|
||
|
||
* image A component that displays an image. The image is scaled to
|
||
fit the component.
|
||
|
||
Properties:
|
||
|
||
file The full path to the image file to load.
|
||
|
||
* progress_bar Displays a horizontally oriented progress bar. It can
|
||
be rendered using simple solid filled rectangles, or using a pair
|
||
of pixmap styled boxes.
|
||
|
||
Properties:
|
||
|
||
id Set to "__timeout__" to display the time elapsed
|
||
to an automatical boot of the default entry.
|
||
fg_color The foreground color for plain solid color
|
||
rendering.
|
||
bg_color The background color for plain solid color
|
||
rendering.
|
||
border_color The border color for plain solid color
|
||
rendering.
|
||
text_color The text color.
|
||
bar_style The styled box specification for the frame of
|
||
the progress bar. Example:
|
||
"progress_frame_*.png" If the value is equal to
|
||
"highlight_style" then no styled boxes will be
|
||
shown.
|
||
highlight_styleThe styled box specification for the highlighted
|
||
region of the progress bar. This box will be
|
||
used to paint just the highlighted region of the
|
||
bar, and will be increased in size as the bar
|
||
nears completion. Example: "progress_hl_*.png".
|
||
If the value is equal to "bar_style" then no
|
||
styled boxes will be shown.
|
||
highlight_overlayIf this option is set to "true" then the
|
||
highlight box side slices (every slice except
|
||
the center slice) will overlay the frame box
|
||
side slices. And the center slice of the
|
||
highlight box can move all the way (from top to
|
||
bottom), being drawn on the center slice of the
|
||
frame box. That way we can make a progress bar
|
||
with round-shaped edges so there won't be a free
|
||
space from the highlight to the frame in top and
|
||
bottom scrollbar positions. Default is "false".
|
||
font The font to use for progress bar.
|
||
text The text to display on the progress bar. If the
|
||
progress bar's ID is set to "__timeout__" and
|
||
the value of this property is set to
|
||
"@TIMEOUT_NOTIFICATION_SHORT@",
|
||
"@TIMEOUT_NOTIFICATION_MIDDLE@" or
|
||
"@TIMEOUT_NOTIFICATION_LONG@", then GRUB will
|
||
update this property with an informative message
|
||
as the timeout approaches.
|
||
|
||
* circular_progress Displays a circular progress indicator. The
|
||
appearance of this component is determined by two images: the
|
||
*center* image and the *tick* image. The center image is generally
|
||
larger and will be drawn in the center of the component. Around
|
||
the circumference of a circle within the component, the tick image
|
||
will be drawn a certain number of times, depending on the
|
||
properties of the component.
|
||
|
||
Properties:
|
||
|
||
id Set to "__timeout__" to display the time
|
||
elapsed to an automatical boot of the
|
||
default entry.
|
||
center_bitmap The file name of the image to draw in the
|
||
center of the component.
|
||
tick_bitmap The file name of the image to draw for
|
||
the tick marks.
|
||
num_ticks The number of ticks that make up a full
|
||
circle.
|
||
ticks_disappear Boolean value indicating whether tick
|
||
marks should progressively appear, or
|
||
progressively disappear as *value*
|
||
approaches *end*. Specify "true" or
|
||
"false". Default is "false".
|
||
start_angle The position of the first tick mark to
|
||
appear or disappear. Measured in
|
||
"parrots", 1 "parrot" = 1 / 256 of the
|
||
full circle. Use values "xxx deg" or
|
||
"xxx \xc2\xb0" to set the angle in
|
||
degrees.
|
||
|
||
* boot_menu Displays the GRUB boot menu. It allows selecting items
|
||
and executing them.
|
||
|
||
Properties:
|
||
|
||
item_font The font to use for the menu item
|
||
titles.
|
||
selected_item_font The font to use for the selected
|
||
menu item, or "inherit" (the
|
||
default) to use "item_font" for
|
||
the selected menu item as well.
|
||
item_color The color to use for the menu item
|
||
titles.
|
||
selected_item_color The color to use for the selected
|
||
menu item, or "inherit" (the
|
||
default) to use "item_color" for
|
||
the selected menu item as well.
|
||
icon_width The width of menu item icons.
|
||
Icons are scaled to the specified
|
||
size.
|
||
icon_height The height of menu item icons.
|
||
item_height The height of each menu item in
|
||
pixels.
|
||
item_padding The amount of space in pixels to
|
||
leave on each side of the menu
|
||
item contents.
|
||
item_icon_space The space between an item's icon
|
||
and the title text, in pixels.
|
||
item_spacing The amount of space to leave
|
||
between menu items, in pixels.
|
||
menu_pixmap_style The image file pattern for the
|
||
menu frame styled box. Example:
|
||
"menu_*.png" (this will use images
|
||
such as "menu_c.png",
|
||
"menu_w.png", 'menu_nw.png", etc.)
|
||
item_pixmap_style The image file pattern for the
|
||
item styled box.
|
||
selected_item_pixmap_style The image file pattern for the
|
||
selected item highlight styled
|
||
box.
|
||
scrollbar Boolean value indicating whether
|
||
the scroll bar should be drawn if
|
||
the frame and thumb styled boxes
|
||
are configured.
|
||
scrollbar_frame The image file pattern for the
|
||
entire scroll bar. Example:
|
||
"scrollbar_*.png"
|
||
scrollbar_thumb The image file pattern for the
|
||
scroll bar thumb (the part of the
|
||
scroll bar that moves as scrolling
|
||
occurs). Example:
|
||
"scrollbar_thumb_*.png"
|
||
scrollbar_thumb_overlay If this option is set to "true"
|
||
then the scrollbar thumb side
|
||
slices (every slice except the
|
||
center slice) will overlay the
|
||
scrollbar frame side slices. And
|
||
the center slice of the
|
||
scrollbar_thumb can move all the
|
||
way (from top to bottom), being
|
||
drawn on the center slice of the
|
||
scrollbar frame. That way we can
|
||
make a scrollbar with round-shaped
|
||
edges so there won't be a free
|
||
space from the thumb to the frame
|
||
in top and bottom scrollbar
|
||
positions. Default is "false".
|
||
scrollbar_slice The menu frame styled box's slice
|
||
in which the scrollbar will be
|
||
drawn. Possible values are
|
||
"west", "center", "east"
|
||
(default). "west" - the scrollbar
|
||
will be drawn in the west slice
|
||
(right-aligned). "east" - the
|
||
scrollbar will be drawn in the
|
||
east slice (left-aligned).
|
||
"center" - the scrollbar will be
|
||
drawn in the center slice. Note:
|
||
in case of "center" slice: a) If
|
||
the scrollbar should be drawn then
|
||
boot menu entry's width is
|
||
decreased by the scrollbar's width
|
||
and the scrollbar is drawn at the
|
||
right side of the center slice.
|
||
b) If the scrollbar won't be drawn
|
||
then the boot menu entry's width
|
||
is the width of the center slice.
|
||
c) We don't necessary need the
|
||
menu pixmap box to display the
|
||
scrollbar.
|
||
scrollbar_left_pad The left scrollbar padding in
|
||
pixels. Unused if
|
||
"scrollbar_slice" is "west".
|
||
scrollbar_right_pad The right scrollbar padding in
|
||
pixels. Unused if
|
||
"scrollbar_slice" is "east".
|
||
scrollbar_top_pad The top scrollbar padding in
|
||
pixels.
|
||
scrollbar_bottom_pad The bottom scrollbar padding in
|
||
pixels.
|
||
visible Set to "false" to hide the boot
|
||
menu.
|
||
|
||
* canvas Canvas is a container that allows manual placement of
|
||
components within it. It does not alter the positions of its child
|
||
components. It assigns all child components their preferred sizes.
|
||
|
||
* hbox The *hbox* container lays out its children from left to right,
|
||
giving each one its preferred width. The height of each child is
|
||
set to the maximum of the preferred heights of all children.
|
||
|
||
* vbox The *vbox* container lays out its children from top to bottom,
|
||
giving each one its preferred height. The width of each child is
|
||
set to the maximum of the preferred widths of all children.
|
||
|
||
7.3.6 Common properties
|
||
-----------------------
|
||
|
||
The following properties are supported by all components:
|
||
'left'
|
||
The distance from the left border of container to left border of
|
||
the object in either of three formats:
|
||
x Value in pixels
|
||
p% Percentage
|
||
p%+x mixture of both
|
||
'top'
|
||
The distance from the left border of container to left border of
|
||
the object in same format.
|
||
'width'
|
||
The width of object in same format.
|
||
'height'
|
||
The height of object in same format.
|
||
'id'
|
||
The identifier for the component. This can be any arbitrary
|
||
string. The ID can be used by scripts to refer to various
|
||
components in the GUI component tree. Currently, there is one
|
||
special ID value that GRUB recognizes:
|
||
|
||
"__timeout__" Component with this ID will be updated by GRUB
|
||
and will indicate time elapsed to an automatical
|
||
boot of the default entry. Affected components:
|
||
"label", "circular_progress", "progress_bar".
|
||
|
||
|
||
File: grub.info, Node: Network, Next: Serial terminal, Prev: Theme file format, Up: Top
|
||
|
||
8 Booting GRUB from the network
|
||
*******************************
|
||
|
||
The following instructions don't work for *-emu, i386-qemu,
|
||
i386-coreboot, i386-multiboot, mips_loongson, mips-arc and
|
||
mips_qemu_mips
|
||
|
||
To generate a netbootable directory, run:
|
||
|
||
grub-mknetdir --net-directory=/srv/tftp --subdir=/boot/grub -d /usr/lib/grub/<platform>
|
||
|
||
E.g. for i386-pc:
|
||
|
||
grub-mknetdir --net-directory=/srv/tftp --subdir=/boot/grub -d /usr/lib/grub/i386-pc
|
||
|
||
Then follow instructions printed out by grub-mknetdir on configuring
|
||
your DHCP server.
|
||
|
||
The grub.cfg file is placed in the same directory as the path output
|
||
by grub-mknetdir hereafter referred to as FWPATH. GRUB will search for
|
||
its configuration files in order using the following rules where the
|
||
appended value corresponds to a value on the client machine.
|
||
|
||
'(FWPATH)'/grub.cfg-'(UUID OF MACHINE)'
|
||
'(FWPATH)'/grub.cfg-'(MAC ADDRESS OF NIC)'
|
||
'(FWPATH)'/grub.cfg-'(IPv4 OR IPv6 ADDRESS)'
|
||
'(FWPATH)'/grub.cfg
|
||
|
||
The UUID is the Client Machine Identifier Option Definition as
|
||
specified in RFC 4578. The client will only attempt to loouk up a UUID
|
||
config file if it was provided by the DHCP server.
|
||
|
||
The client will only attempt to look up an IPv6 address config once,
|
||
however, it will try the IPv4 multiple times. The concrete example
|
||
below shows what would happen under the IPv4 case.
|
||
|
||
UUID: 7726a678-7fc0-4853-a4f6-c85ac36a120a
|
||
MAC: 52:54:00:ec:33:81
|
||
IPV4: 10.0.0.130 (0A000082)
|
||
|
||
'(FWPATH)'/grub.cfg-7726a678-7fc0-4853-a4f6-c85ac36a120a
|
||
'(FWPATH)'/grub.cfg-52-54-00-ec-33-81
|
||
'(FWPATH)'/grub.cfg-0A000082
|
||
'(FWPATH)'/grub.cfg-0A00008
|
||
'(FWPATH)'/grub.cfg-0A0000
|
||
'(FWPATH)'/grub.cfg-0A000
|
||
'(FWPATH)'/grub.cfg-0A00
|
||
'(FWPATH)'/grub.cfg-0A0
|
||
'(FWPATH)'/grub.cfg-0A
|
||
'(FWPATH)'/grub.cfg-0
|
||
'(FWPATH)'/grub.cfg
|
||
|
||
This feature is enabled by default but it can be disabled by setting
|
||
the 'feature_net_search_cfg' to 'n'. Since this happens before the
|
||
configuration file is read by GRUB, this option has to be disabled in an
|
||
embedded configuration file (*note Embedded configuration::).
|
||
|
||
After GRUB has started, files on the TFTP server will be accessible
|
||
via the '(tftp)' device.
|
||
|
||
The server IP address can be controlled by changing the '(tftp)'
|
||
device name to '(tftp,SERVER-IP)'. Note that this should be changed
|
||
both in the prefix and in any references to the device name in the
|
||
configuration file.
|
||
|
||
GRUB provides several environment variables which may be used to
|
||
inspect or change the behaviour of the PXE device. In the following
|
||
description <INTERFACE> is placeholder for the name of network interface
|
||
(platform dependent):
|
||
|
||
'net_<INTERFACE>_ip'
|
||
The network interface's IP address. Read-only.
|
||
|
||
'net_<INTERFACE>_mac'
|
||
The network interface's MAC address. Read-only.
|
||
|
||
'net_<INTERFACE>_hostname'
|
||
The client host name provided by DHCP. Read-only.
|
||
|
||
'net_<INTERFACE>_domain'
|
||
The client domain name provided by DHCP. Read-only.
|
||
|
||
'net_<INTERFACE>_rootpath'
|
||
The path to the client's root disk provided by DHCP. Read-only.
|
||
|
||
'net_<INTERFACE>_extensionspath'
|
||
The path to additional DHCP vendor extensions provided by DHCP.
|
||
Read-only.
|
||
|
||
'net_<INTERFACE>_boot_file'
|
||
The boot file name provided by DHCP. Read-only.
|
||
|
||
'net_<INTERFACE>_dhcp_server_name'
|
||
The name of the DHCP server responsible for these boot parameters.
|
||
Read-only.
|
||
|
||
'net_<INTERFACE>_next_server'
|
||
The IP address of the next (usually, TFTP) server provided by DHCP.
|
||
Read-only.
|
||
|
||
'net_default_interface'
|
||
Initially set to name of network interface that was used to load
|
||
grub. Read-write, although setting it affects only interpretation
|
||
of 'net_default_ip' and 'net_default_mac'
|
||
|
||
'net_default_ip'
|
||
The IP address of default interface. Read-only. This is alias for
|
||
the 'net_${net_default_interface}_ip'.
|
||
|
||
'net_default_mac'
|
||
The default interface's MAC address. Read-only. This is alias for
|
||
the 'net_${net_default_interface}_mac'.
|
||
|
||
'net_default_server'
|
||
The default server used by network drives (*note Device syntax::).
|
||
Read-write, although setting this is only useful before opening a
|
||
network device.
|
||
|
||
|
||
File: grub.info, Node: Serial terminal, Next: Vendor power-on keys, Prev: Network, Up: Top
|
||
|
||
9 Using GRUB via a serial line
|
||
******************************
|
||
|
||
This chapter describes how to use the serial terminal support in GRUB.
|
||
|
||
If you have many computers or computers with no display/keyboard, it
|
||
could be very useful to control the computers through serial
|
||
communications. To connect one computer with another via a serial line,
|
||
you need to prepare a null-modem (cross) serial cable, and you may need
|
||
to have multiport serial boards, if your computer doesn't have extra
|
||
serial ports. In addition, a terminal emulator is also required, such
|
||
as minicom. Refer to a manual of your operating system, for more
|
||
information.
|
||
|
||
As for GRUB, the instruction to set up a serial terminal is quite
|
||
simple. Here is an example:
|
||
|
||
grub> serial --unit=0 --speed=9600
|
||
grub> terminal_input serial; terminal_output serial
|
||
|
||
The command 'serial' initializes the serial unit 0 with the speed
|
||
9600bps. The serial unit 0 is usually called 'COM1', so, if you want to
|
||
use COM2, you must specify '--unit=1' instead. This command accepts
|
||
many other options, so please refer to *note serial::, for more details.
|
||
|
||
The commands 'terminal_input' (*note terminal_input::) and
|
||
'terminal_output' (*note terminal_output::) choose which type of
|
||
terminal you want to use. In the case above, the terminal will be a
|
||
serial terminal, but you can also pass 'console' to the command, as
|
||
'terminal_input serial console'. In this case, a terminal in which you
|
||
press any key will be selected as a GRUB terminal. In the example
|
||
above, note that you need to put both commands on the same command line,
|
||
as you will lose the ability to type commands on the console after the
|
||
first command.
|
||
|
||
However, note that GRUB assumes that your terminal emulator is
|
||
compatible with VT100 by default. This is true for most terminal
|
||
emulators nowadays, but you should pass the option '--dumb' to the
|
||
command if your terminal emulator is not VT100-compatible or implements
|
||
few VT100 escape sequences. If you specify this option then GRUB
|
||
provides you with an alternative menu interface, because the normal menu
|
||
requires several fancy features of your terminal.
|
||
|
||
|
||
File: grub.info, Node: Vendor power-on keys, Next: Images, Prev: Serial terminal, Up: Top
|
||
|
||
10 Using GRUB with vendor power-on keys
|
||
***************************************
|
||
|
||
Some laptop vendors provide an additional power-on button which boots
|
||
another OS. GRUB supports such buttons with the 'GRUB_TIMEOUT_BUTTON',
|
||
'GRUB_TIMEOUT_STYLE_BUTTON', 'GRUB_DEFAULT_BUTTON', and
|
||
'GRUB_BUTTON_CMOS_ADDRESS' variables in default/grub (*note Simple
|
||
configuration::). 'GRUB_TIMEOUT_BUTTON', 'GRUB_TIMEOUT_STYLE_BUTTON',
|
||
and 'GRUB_DEFAULT_BUTTON' are used instead of the corresponding
|
||
variables without the '_BUTTON' suffix when powered on using the special
|
||
button. 'GRUB_BUTTON_CMOS_ADDRESS' is vendor-specific and partially
|
||
model-specific. Values known to the GRUB team are:
|
||
|
||
<Dell XPS M1330M>
|
||
121:3
|
||
<Dell XPS M1530>
|
||
85:3
|
||
<Dell Latitude E4300>
|
||
85:3
|
||
<Asus EeePC 1005PE>
|
||
84:1 (unconfirmed)
|
||
<LENOVO ThinkPad T410s (2912W1C)>
|
||
101:3
|
||
|
||
To take full advantage of this function, install GRUB into the MBR
|
||
(*note Installing GRUB using grub-install::).
|
||
|
||
If you have a laptop which has a similar feature and not in the above
|
||
list could you figure your address and contribute? To discover the
|
||
address do the following:
|
||
* boot normally
|
||
* sudo modprobe nvram
|
||
sudo cat /dev/nvram | xxd > normal_button.txt
|
||
* boot using vendor button
|
||
* sudo modprobe nvram
|
||
sudo cat /dev/nvram | xxd > normal_vendor.txt
|
||
|
||
Then compare these text files and find where a bit was toggled. E.g.
|
||
in case of Dell XPS it was:
|
||
byte 0x47: 20 --> 28
|
||
It's a bit number 3 as seen from following table:
|
||
0 01
|
||
1 02
|
||
2 04
|
||
3 08
|
||
4 10
|
||
5 20
|
||
6 40
|
||
7 80
|
||
|
||
0x47 is decimal 71. Linux nvram implementation cuts first 14 bytes
|
||
of CMOS. So the real byte address in CMOS is 71+14=85 So complete
|
||
address is 85:3
|
||
|
||
|
||
File: grub.info, Node: Images, Next: Core image size limitation, Prev: Vendor power-on keys, Up: Top
|
||
|
||
11 GRUB image files
|
||
*******************
|
||
|
||
GRUB consists of several images: a variety of bootstrap images for
|
||
starting GRUB in various ways, a kernel image, and a set of modules
|
||
which are combined with the kernel image to form a core image. Here is
|
||
a short overview of them.
|
||
|
||
'boot.img'
|
||
On PC BIOS systems, this image is the first part of GRUB to start.
|
||
It is written to a master boot record (MBR) or to the boot sector
|
||
of a partition. Because a PC boot sector is 512 bytes, the size of
|
||
this image is exactly 512 bytes.
|
||
|
||
The sole function of 'boot.img' is to read the first sector of the
|
||
core image from a local disk and jump to it. Because of the size
|
||
restriction, 'boot.img' cannot understand any file system
|
||
structure, so 'grub-install' hardcodes the location of the first
|
||
sector of the core image into 'boot.img' when installing GRUB.
|
||
|
||
'diskboot.img'
|
||
This image is used as the first sector of the core image when
|
||
booting from a hard disk. It reads the rest of the core image into
|
||
memory and starts the kernel. Since file system handling is not
|
||
yet available, it encodes the location of the core image using a
|
||
block list format.
|
||
|
||
'cdboot.img'
|
||
This image is used as the first sector of the core image when
|
||
booting from a CD-ROM drive. It performs a similar function to
|
||
'diskboot.img'.
|
||
|
||
'pxeboot.img'
|
||
This image is used as the start of the core image when booting from
|
||
the network using PXE. *Note Network::.
|
||
|
||
'lnxboot.img'
|
||
This image may be placed at the start of the core image in order to
|
||
make GRUB look enough like a Linux kernel that it can be booted by
|
||
LILO using an 'image=' section.
|
||
|
||
'kernel.img'
|
||
This image contains GRUB's basic run-time facilities: frameworks
|
||
for device and file handling, environment variables, the rescue
|
||
mode command-line parser, and so on. It is rarely used directly,
|
||
but is built into all core images.
|
||
|
||
'core.img'
|
||
This is the core image of GRUB. It is built dynamically from the
|
||
kernel image and an arbitrary list of modules by the 'grub-mkimage'
|
||
program. Usually, it contains enough modules to access
|
||
'/boot/grub', and loads everything else (including menu handling,
|
||
the ability to load target operating systems, and so on) from the
|
||
file system at run-time. The modular design allows the core image
|
||
to be kept small, since the areas of disk where it must be
|
||
installed are often as small as 32KB.
|
||
|
||
*Note BIOS installation::, for details on where the core image can
|
||
be installed on PC systems.
|
||
|
||
'*.mod'
|
||
Everything else in GRUB resides in dynamically loadable modules.
|
||
These are often loaded automatically, or built into the core image
|
||
if they are essential, but may also be loaded manually using the
|
||
'insmod' command (*note insmod::).
|
||
|
||
For GRUB Legacy users
|
||
=====================
|
||
|
||
GRUB 2 has a different design from GRUB Legacy, and so correspondences
|
||
with the images it used cannot be exact. Nevertheless, GRUB Legacy
|
||
users often ask questions in the terms they are familiar with, and so
|
||
here is a brief guide to how GRUB 2's images relate to that.
|
||
|
||
'stage1'
|
||
Stage 1 from GRUB Legacy was very similar to 'boot.img' in GRUB 2,
|
||
and they serve the same function.
|
||
|
||
'*_stage1_5'
|
||
In GRUB Legacy, Stage 1.5's function was to include enough
|
||
filesystem code to allow the much larger Stage 2 to be read from an
|
||
ordinary filesystem. In this respect, its function was similar to
|
||
'core.img' in GRUB 2. However, 'core.img' is much more capable
|
||
than Stage 1.5 was; since it offers a rescue shell, it is sometimes
|
||
possible to recover manually in the event that it is unable to load
|
||
any other modules, for example if partition numbers have changed.
|
||
'core.img' is built in a more flexible way, allowing GRUB 2 to
|
||
support reading modules from advanced disk types such as LVM and
|
||
RAID.
|
||
|
||
GRUB Legacy could run with only Stage 1 and Stage 2 in some limited
|
||
configurations, while GRUB 2 requires 'core.img' and cannot work
|
||
without it.
|
||
|
||
'stage2'
|
||
GRUB 2 has no single Stage 2 image. Instead, it loads modules from
|
||
'/boot/grub' at run-time.
|
||
|
||
'stage2_eltorito'
|
||
In GRUB 2, images for booting from CD-ROM drives are now
|
||
constructed using 'cdboot.img' and 'core.img', making sure that the
|
||
core image contains the 'iso9660' module. It is usually best to
|
||
use the 'grub-mkrescue' program for this.
|
||
|
||
'nbgrub'
|
||
There is as yet no equivalent for 'nbgrub' in GRUB 2; it was used
|
||
by Etherboot and some other network boot loaders.
|
||
|
||
'pxegrub'
|
||
In GRUB 2, images for PXE network booting are now constructed using
|
||
'pxeboot.img' and 'core.img', making sure that the core image
|
||
contains the 'pxe' and 'pxecmd' modules. *Note Network::.
|
||
|
||
|
||
File: grub.info, Node: Core image size limitation, Next: Filesystem, Prev: Images, Up: Top
|
||
|
||
12 Core image size limitation
|
||
*****************************
|
||
|
||
Heavily limited platforms:
|
||
* i386-pc (normal and PXE): the core image size (compressed) is
|
||
limited by 458240 bytes. kernel.img (.text + .data + .bss,
|
||
uncompressed) is limited by 392704 bytes. module size
|
||
(uncompressed) + kernel.img (.text + .data, uncompressed) is
|
||
limited by the size of contiguous chunk at 1M address.
|
||
* sparc64-ieee1275: kernel.img (.text + .data + .bss) + modules +
|
||
256K (stack) + 2M (heap) is limited by space available at 0x4400.
|
||
On most platforms it's just 3 or 4M since ieee1275 maps only so
|
||
much.
|
||
* i386-ieee1275: kernel.img (.text + .data + .bss) + modules is
|
||
limited by memory available at 0x10000, at most 596K
|
||
|
||
Lightly limited platforms:
|
||
|
||
* *-xen: limited only by adress space and RAM size.
|
||
* i386-qemu: kernel.img (.text + .data + .bss) is limited by 392704
|
||
bytes. (core.img would be limited by ROM size but it's unlimited
|
||
on qemu
|
||
* All EFI platforms: limited by contiguous RAM size and possibly
|
||
firmware bugs
|
||
* Coreboot and multiboot. kernel.img (.text + .data + .bss) is
|
||
limited by 392704 bytes. module size is limited by the size of
|
||
contiguous chunk at 1M address.
|
||
* mipsel-loongson (ELF), mips(el)-qemu_mips (ELF): if uncompressed:
|
||
kernel.img (.text + .data) + modules is limited by the space from
|
||
80200000 forward if compressed: kernel.img (.text + .data,
|
||
uncompressed) + modules (uncompressed) + (modules + kernel.img
|
||
(.text + .data)) (compressed) + decompressor is limited by the
|
||
space from 80200000 forward
|
||
* mipsel-loongson (Flash), mips(el)-qemu_mips (Flash): kernel.img
|
||
(.text + .data) + modules is limited by the space from 80200000
|
||
forward core.img (final) is limited by flash size (512K on yeeloong
|
||
and fulooong)
|
||
* mips-arc: if uncompressed: kernel.img (.text + .data) is limited by
|
||
the space from 8bd00000 forward modules + dummy decompressor is
|
||
limited by the space from 8bd00000 backward if compressed:
|
||
kernel.img (.text + .data, uncompressed) is limited by the space
|
||
from 8bd00000 forward modules (uncompressed) + (modules +
|
||
kernel.img (.text + .data)) (compressed, aligned to 1M) + 1M
|
||
(decompressor + scratch space) is limited by the space from
|
||
8bd00000 backward
|
||
* powerpc-ieee1275: kernel.img (.text + .data + .bss) + modules is
|
||
limited by space available at 0x200000
|
||
|
||
|
||
File: grub.info, Node: Filesystem, Next: Interface, Prev: Core image size limitation, Up: Top
|
||
|
||
13 Filesystem syntax and semantics
|
||
**********************************
|
||
|
||
GRUB uses a special syntax for specifying disk drives which can be
|
||
accessed by BIOS. Because of BIOS limitations, GRUB cannot distinguish
|
||
between IDE, ESDI, SCSI, or others. You must know yourself which BIOS
|
||
device is equivalent to which OS device. Normally, that will be clear
|
||
if you see the files in a device or use the command 'search' (*note
|
||
search::).
|
||
|
||
* Menu:
|
||
|
||
* Device syntax:: How to specify devices
|
||
* File name syntax:: How to specify files
|
||
* Block list syntax:: How to specify block lists
|
||
|
||
|
||
File: grub.info, Node: Device syntax, Next: File name syntax, Up: Filesystem
|
||
|
||
13.1 How to specify devices
|
||
===========================
|
||
|
||
The device syntax is like this:
|
||
|
||
(DEVICE[,PARTMAP-NAME1PART-NUM1[,PARTMAP-NAME2PART-NUM2[,...]]])
|
||
|
||
'[]' means the parameter is optional. DEVICE depends on the disk
|
||
driver in use. BIOS and EFI disks use either 'fd' or 'hd' followed by a
|
||
digit, like 'fd0', or 'cd'. AHCI, PATA (ata), crypto, USB use the name
|
||
of driver followed by a number. Memdisk and host are limited to one
|
||
disk and so it's refered just by driver name. RAID (md), ofdisk
|
||
(ieee1275 and nand), LVM (lvm), LDM, virtio (vdsk) and arcdisk (arc) use
|
||
intrinsic name of disk prefixed by driver name. Additionally just
|
||
"nand" refers to the disk aliased as "nand". Conflicts are solved by
|
||
suffixing a number if necessarry. Commas need to be escaped. Loopback
|
||
uses whatever name specified to 'loopback' command. Hostdisk uses names
|
||
specified in device.map as long as it's of the form [fhc]d[0-9]* or
|
||
hostdisk/<OS DEVICE>. For crypto and RAID (md) additionally you can use
|
||
the syntax <driver name>uuid/<uuid>. For LVM additionally you can use
|
||
the syntax lvmid/<volume-group-uuid>/<volume-uuid>.
|
||
|
||
(fd0)
|
||
(hd0)
|
||
(cd)
|
||
(ahci0)
|
||
(ata0)
|
||
(crypto0)
|
||
(usb0)
|
||
(cryptouuid/123456789abcdef0123456789abcdef0)
|
||
(mduuid/123456789abcdef0123456789abcdef0)
|
||
(lvm/system-root)
|
||
(lvmid/F1ikgD-2RES-306G-il9M-7iwa-4NKW-EbV1NV/eLGuCQ-L4Ka-XUgR-sjtJ-ffch-bajr-fCNfz5)
|
||
(md/myraid)
|
||
(md/0)
|
||
(ieee1275/disk2)
|
||
(ieee1275//pci@1f\,0/ide@d/disk@2)
|
||
(nand)
|
||
(memdisk)
|
||
(host)
|
||
(myloop)
|
||
(hostdisk//dev/sda)
|
||
|
||
PART-NUM represents the partition number of DEVICE, starting from
|
||
one. PARTNAME is optional but is recommended since disk may have
|
||
several top-level partmaps. Specifying third and later component you
|
||
can access to subpartitions.
|
||
|
||
The syntax '(hd0)' represents using the entire disk (or the MBR when
|
||
installing GRUB), while the syntax '(hd0,1)' represents using the first
|
||
partition of the disk (or the boot sector of the partition when
|
||
installing GRUB).
|
||
|
||
(hd0,msdos1)
|
||
(hd0,msdos1,msdos5)
|
||
(hd0,msdos1,bsd3)
|
||
(hd0,netbsd1)
|
||
(hd0,gpt1)
|
||
(hd0,1,3)
|
||
|
||
If you enabled the network support, the special drives
|
||
'(PROTOCOL[,SERVER])' are also available. Supported protocols are
|
||
'http' and 'tftp'. If SERVER is omitted, value of environment variable
|
||
'net_default_server' is used. Before using the network drive, you must
|
||
initialize the network. *Note Network::, for more information.
|
||
|
||
If you boot GRUB from a CD-ROM, '(cd)' is available. *Note Making a
|
||
GRUB bootable CD-ROM::, for details.
|
||
|
||
|
||
File: grub.info, Node: File name syntax, Next: Block list syntax, Prev: Device syntax, Up: Filesystem
|
||
|
||
13.2 How to specify files
|
||
=========================
|
||
|
||
There are two ways to specify files, by "absolute file name" and by
|
||
"block list".
|
||
|
||
An absolute file name resembles a Unix absolute file name, using '/'
|
||
for the directory separator (not '\' as in DOS). One example is
|
||
'(hd0,1)/boot/grub/grub.cfg'. This means the file '/boot/grub/grub.cfg'
|
||
in the first partition of the first hard disk. If you omit the device
|
||
name in an absolute file name, GRUB uses GRUB's "root device"
|
||
implicitly. So if you set the root device to, say, '(hd1,1)' by the
|
||
command 'set root=(hd1,1)' (*note set::), then '/boot/kernel' is the
|
||
same as '(hd1,1)/boot/kernel'.
|
||
|
||
On ZFS filesystem the first path component must be
|
||
VOLUME'@'[SNAPSHOT]. So '/rootvol@snap-129/boot/grub/grub.cfg' refers
|
||
to file '/boot/grub/grub.cfg' in snapshot of volume 'rootvol' with name
|
||
'snap-129'. Trailing '@' after volume name is mandatory even if
|
||
snapshot name is omitted.
|
||
|
||
|
||
File: grub.info, Node: Block list syntax, Prev: File name syntax, Up: Filesystem
|
||
|
||
13.3 How to specify block lists
|
||
===============================
|
||
|
||
A block list is used for specifying a file that doesn't appear in the
|
||
filesystem, like a chainloader. The syntax is
|
||
'[OFFSET]+LENGTH[,[OFFSET]+LENGTH]...'. Here is an example:
|
||
|
||
0+100,200+1,300+300
|
||
|
||
This represents that GRUB should read blocks 0 through 99, block 200,
|
||
and blocks 300 through 599. If you omit an offset, then GRUB assumes
|
||
the offset is zero.
|
||
|
||
Like the file name syntax (*note File name syntax::), if a blocklist
|
||
does not contain a device name, then GRUB uses GRUB's "root device". So
|
||
'(hd0,2)+1' is the same as '+1' when the root device is '(hd0,2)'.
|
||
|
||
|
||
File: grub.info, Node: Interface, Next: Environment, Prev: Filesystem, Up: Top
|
||
|
||
14 GRUB's user interface
|
||
************************
|
||
|
||
GRUB has both a simple menu interface for choosing preset entries from a
|
||
configuration file, and a highly flexible command-line for performing
|
||
any desired combination of boot commands.
|
||
|
||
GRUB looks for its configuration file as soon as it is loaded. If
|
||
one is found, then the full menu interface is activated using whatever
|
||
entries were found in the file. If you choose the "command-line" menu
|
||
option, or if the configuration file was not found, then GRUB drops to
|
||
the command-line interface.
|
||
|
||
* Menu:
|
||
|
||
* Command-line interface:: The flexible command-line interface
|
||
* Menu interface:: The simple menu interface
|
||
* Menu entry editor:: Editing a menu entry
|
||
|
||
|
||
File: grub.info, Node: Command-line interface, Next: Menu interface, Up: Interface
|
||
|
||
14.1 The flexible command-line interface
|
||
========================================
|
||
|
||
The command-line interface provides a prompt and after it an editable
|
||
text area much like a command-line in Unix or DOS. Each command is
|
||
immediately executed after it is entered(1) (*note Command-line
|
||
interface-Footnote-1::). The commands (*note Command-line and menu
|
||
entry commands::) are a subset of those available in the configuration
|
||
file, used with exactly the same syntax.
|
||
|
||
Cursor movement and editing of the text on the line can be done via a
|
||
subset of the functions available in the Bash shell:
|
||
|
||
<C-f>
|
||
<PC right key>
|
||
Move forward one character.
|
||
|
||
<C-b>
|
||
<PC left key>
|
||
Move back one character.
|
||
|
||
<C-a>
|
||
<HOME>
|
||
Move to the start of the line.
|
||
|
||
<C-e>
|
||
<END>
|
||
Move the the end of the line.
|
||
|
||
<C-d>
|
||
<DEL>
|
||
Delete the character underneath the cursor.
|
||
|
||
<C-h>
|
||
<BS>
|
||
Delete the character to the left of the cursor.
|
||
|
||
<C-k>
|
||
Kill the text from the current cursor position to the end of the
|
||
line.
|
||
|
||
<C-u>
|
||
Kill backward from the cursor to the beginning of the line.
|
||
|
||
<C-y>
|
||
Yank the killed text back into the buffer at the cursor.
|
||
|
||
<C-p>
|
||
<PC up key>
|
||
Move up through the history list.
|
||
|
||
<C-n>
|
||
<PC down key>
|
||
Move down through the history list.
|
||
|
||
When typing commands interactively, if the cursor is within or before
|
||
the first word in the command-line, pressing the <TAB> key (or <C-i>)
|
||
will display a listing of the available commands, and if the cursor is
|
||
after the first word, the '<TAB>' will provide a completion listing of
|
||
disks, partitions, and file names depending on the context. Note that
|
||
to obtain a list of drives, one must open a parenthesis, as 'root ('.
|
||
|
||
Note that you cannot use the completion functionality in the TFTP
|
||
filesystem. This is because TFTP doesn't support file name listing for
|
||
the security.
|
||
|
||
|
||
File: grub.info, Node: Command-line interface-Footnotes, Up: Command-line interface
|
||
|
||
(1) However, this behavior will be changed in the future version, in
|
||
a user-invisible way.
|
||
|
||
|
||
File: grub.info, Node: Menu interface, Next: Menu entry editor, Prev: Command-line interface, Up: Interface
|
||
|
||
14.2 The simple menu interface
|
||
==============================
|
||
|
||
The menu interface is quite easy to use. Its commands are both
|
||
reasonably intuitive and described on screen.
|
||
|
||
Basically, the menu interface provides a list of "boot entries" to
|
||
the user to choose from. Use the arrow keys to select the entry of
|
||
choice, then press <RET> to run it. An optional timeout is available to
|
||
boot the default entry (the first one if not set), which is aborted by
|
||
pressing any key.
|
||
|
||
Commands are available to enter a bare command-line by pressing <c>
|
||
(which operates exactly like the non-config-file version of GRUB, but
|
||
allows one to return to the menu if desired by pressing <ESC>) or to
|
||
edit any of the "boot entries" by pressing <e>.
|
||
|
||
If you protect the menu interface with a password (*note Security::),
|
||
all you can do is choose an entry by pressing <RET>, or press <p> to
|
||
enter the password.
|
||
|
||
|
||
File: grub.info, Node: Menu entry editor, Prev: Menu interface, Up: Interface
|
||
|
||
14.3 Editing a menu entry
|
||
=========================
|
||
|
||
The menu entry editor looks much like the main menu interface, but the
|
||
lines in the menu are individual commands in the selected entry instead
|
||
of entry names.
|
||
|
||
If an <ESC> is pressed in the editor, it aborts all the changes made
|
||
to the configuration entry and returns to the main menu interface.
|
||
|
||
Each line in the menu entry can be edited freely, and you can add new
|
||
lines by pressing <RET> at the end of a line. To boot the edited entry,
|
||
press <Ctrl-x>.
|
||
|
||
Although GRUB unfortunately does not support "undo", you can do
|
||
almost the same thing by just returning to the main menu using <ESC>.
|
||
|
||
|
||
File: grub.info, Node: Environment, Next: Commands, Prev: Interface, Up: Top
|
||
|
||
15 GRUB environment variables
|
||
*****************************
|
||
|
||
GRUB supports environment variables which are rather like those offered
|
||
by all Unix-like systems. Environment variables have a name, which is
|
||
unique and is usually a short identifier, and a value, which is an
|
||
arbitrary string of characters. They may be set (*note set::), unset
|
||
(*note unset::), or looked up (*note Shell-like scripting::) by name.
|
||
|
||
A number of environment variables have special meanings to various
|
||
parts of GRUB. Others may be used freely in GRUB configuration files.
|
||
|
||
* Menu:
|
||
|
||
* Special environment variables::
|
||
* Environment block::
|
||
|
||
|
||
File: grub.info, Node: Special environment variables, Next: Environment block, Up: Environment
|
||
|
||
15.1 Special environment variables
|
||
==================================
|
||
|
||
These variables have special meaning to GRUB.
|
||
|
||
* Menu:
|
||
|
||
* biosnum::
|
||
* check_signatures::
|
||
* chosen::
|
||
* cmdpath::
|
||
* color_highlight::
|
||
* color_normal::
|
||
* config_directory::
|
||
* config_file::
|
||
* debug::
|
||
* default::
|
||
* fallback::
|
||
* gfxmode::
|
||
* gfxpayload::
|
||
* gfxterm_font::
|
||
* grub_cpu::
|
||
* grub_platform::
|
||
* icondir::
|
||
* lang::
|
||
* locale_dir::
|
||
* menu_color_highlight::
|
||
* menu_color_normal::
|
||
* net_<INTERFACE>_boot_file::
|
||
* net_<INTERFACE>_dhcp_server_name::
|
||
* net_<INTERFACE>_domain::
|
||
* net_<INTERFACE>_extensionspath::
|
||
* net_<INTERFACE>_hostname::
|
||
* net_<INTERFACE>_ip::
|
||
* net_<INTERFACE>_mac::
|
||
* net_<INTERFACE>_next_server::
|
||
* net_<INTERFACE>_rootpath::
|
||
* net_default_interface::
|
||
* net_default_ip::
|
||
* net_default_mac::
|
||
* net_default_server::
|
||
* pager::
|
||
* prefix::
|
||
* pxe_blksize::
|
||
* pxe_default_gateway::
|
||
* pxe_default_server::
|
||
* root::
|
||
* superusers::
|
||
* theme::
|
||
* timeout::
|
||
* timeout_style::
|
||
|
||
|
||
File: grub.info, Node: biosnum, Next: check_signatures, Up: Special environment variables
|
||
|
||
15.1.1 biosnum
|
||
--------------
|
||
|
||
When chain-loading another boot loader (*note Chain-loading::), GRUB may
|
||
need to know what BIOS drive number corresponds to the root device
|
||
(*note root::) so that it can set up registers properly. If the BIOSNUM
|
||
variable is set, it overrides GRUB's own means of guessing this.
|
||
|
||
For an alternative approach which also changes BIOS drive mappings
|
||
for the chain-loaded system, *note drivemap::.
|
||
|
||
|
||
File: grub.info, Node: check_signatures, Next: chosen, Prev: biosnum, Up: Special environment variables
|
||
|
||
15.1.2 check_signatures
|
||
-----------------------
|
||
|
||
This variable controls whether GRUB enforces digital signature
|
||
validation on loaded files. *Note Using digital signatures::.
|
||
|
||
|
||
File: grub.info, Node: chosen, Next: cmdpath, Prev: check_signatures, Up: Special environment variables
|
||
|
||
15.1.3 chosen
|
||
-------------
|
||
|
||
When executing a menu entry, GRUB sets the CHOSEN variable to the title
|
||
of the entry being executed.
|
||
|
||
If the menu entry is in one or more submenus, then CHOSEN is set to
|
||
the titles of each of the submenus starting from the top level followed
|
||
by the title of the menu entry itself, separated by '>'.
|
||
|
||
|
||
File: grub.info, Node: cmdpath, Next: color_highlight, Prev: chosen, Up: Special environment variables
|
||
|
||
15.1.4 cmdpath
|
||
--------------
|
||
|
||
The location from which 'core.img' was loaded as an absolute directory
|
||
name (*note File name syntax::). This is set by GRUB at startup based
|
||
on information returned by platform firmware. Not every platform
|
||
provides this information and some may return only device without path
|
||
name.
|
||
|
||
|
||
File: grub.info, Node: color_highlight, Next: color_normal, Prev: cmdpath, Up: Special environment variables
|
||
|
||
15.1.5 color_highlight
|
||
----------------------
|
||
|
||
This variable contains the "highlight" foreground and background
|
||
terminal colors, separated by a slash ('/'). Setting this variable
|
||
changes those colors. For the available color names, *note
|
||
color_normal::.
|
||
|
||
The default is 'black/light-gray'.
|
||
|
||
|
||
File: grub.info, Node: color_normal, Next: config_directory, Prev: color_highlight, Up: Special environment variables
|
||
|
||
15.1.6 color_normal
|
||
-------------------
|
||
|
||
This variable contains the "normal" foreground and background terminal
|
||
colors, separated by a slash ('/'). Setting this variable changes those
|
||
colors. Each color must be a name from the following list:
|
||
|
||
* black
|
||
* blue
|
||
* green
|
||
* cyan
|
||
* red
|
||
* magenta
|
||
* brown
|
||
* light-gray
|
||
* dark-gray
|
||
* light-blue
|
||
* light-green
|
||
* light-cyan
|
||
* light-red
|
||
* light-magenta
|
||
* yellow
|
||
* white
|
||
|
||
The default is 'light-gray/black'.
|
||
|
||
The color support support varies from terminal to terminal.
|
||
|
||
'morse' has no color support at all.
|
||
|
||
'mda_text' color support is limited to highlighting by black/white
|
||
reversal.
|
||
|
||
'console' on ARC, EMU and IEEE1275, 'serial_*' and 'spkmodem' are
|
||
governed by terminfo and support only 8 colors if in modes 'vt100-color'
|
||
(default for console on emu), 'arc' (default for console on ARC),
|
||
'ieee1275' (default for console on IEEE1275). When in mode 'vt100' then
|
||
the color support is limited to highlighting by black/white reversal.
|
||
When in mode 'dumb' there is no color support.
|
||
|
||
When console supports no colors this setting is ignored. When
|
||
console supports 8 colors, then the colors from the second half of the
|
||
previous list are mapped to the matching colors of first half.
|
||
|
||
'console' on EFI and BIOS and 'vga_text' support all 16 colors.
|
||
|
||
'gfxterm' supports all 16 colors and would be theoretically
|
||
extendable to support whole rgb24 palette but currently there is no
|
||
compelling reason to go beyond the current 16 colors.
|
||
|
||
|
||
File: grub.info, Node: config_directory, Next: config_file, Prev: color_normal, Up: Special environment variables
|
||
|
||
15.1.7 config_directory
|
||
-----------------------
|
||
|
||
This variable is automatically set by GRUB to the directory part of
|
||
current configuration file name (*note config_file::).
|
||
|
||
|
||
File: grub.info, Node: config_file, Next: debug, Prev: config_directory, Up: Special environment variables
|
||
|
||
15.1.8 config_file
|
||
------------------
|
||
|
||
This variable is automatically set by GRUB to the name of configuration
|
||
file that is being processed by commands 'configfile' (*note
|
||
configfile::) or 'normal' (*note normal::). It is restored to the
|
||
previous value when command completes.
|
||
|
||
|
||
File: grub.info, Node: debug, Next: default, Prev: config_file, Up: Special environment variables
|
||
|
||
15.1.9 debug
|
||
------------
|
||
|
||
This variable may be set to enable debugging output from various
|
||
components of GRUB. The value is a list of debug facility names
|
||
separated by whitespace or ',', or 'all' to enable all available
|
||
debugging output. The facility names are the first argument to
|
||
grub_dprintf. Consult source for more details.
|
||
|
||
|
||
File: grub.info, Node: default, Next: fallback, Prev: debug, Up: Special environment variables
|
||
|
||
15.1.10 default
|
||
---------------
|
||
|
||
If this variable is set, it identifies a menu entry that should be
|
||
selected by default, possibly after a timeout (*note timeout::). The
|
||
entry may be identified by number (starting from 0 at each level of the
|
||
hierarchy), by title, or by id.
|
||
|
||
For example, if you have:
|
||
|
||
menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux {
|
||
...
|
||
}
|
||
|
||
then you can make this the default using:
|
||
|
||
default=example-gnu-linux
|
||
|
||
If the entry is in a submenu, then it must be identified using the
|
||
number, title, or id of each of the submenus starting from the top
|
||
level, followed by the number, title, or id of the menu entry itself,
|
||
with each element separated by '>'. For example, take the following
|
||
menu structure:
|
||
|
||
GNU/Hurd --id gnu-hurd
|
||
Standard Boot --id=gnu-hurd-std
|
||
Rescue shell --id=gnu-hurd-rescue
|
||
Other platforms --id=other
|
||
Minix --id=minix
|
||
Version 3.4.0 --id=minix-3.4.0
|
||
Version 3.3.0 --id=minix-3.3.0
|
||
GRUB Invaders --id=grub-invaders
|
||
|
||
The more recent release of Minix would then be identified as 'Other
|
||
platforms>Minix>Version 3.4.0', or as '1>0>0', or as
|
||
'other>minix>minix-3.4.0'.
|
||
|
||
This variable is often set by 'GRUB_DEFAULT' (*note Simple
|
||
configuration::), 'grub-set-default', or 'grub-reboot'.
|
||
|
||
|
||
File: grub.info, Node: fallback, Next: gfxmode, Prev: default, Up: Special environment variables
|
||
|
||
15.1.11 fallback
|
||
----------------
|
||
|
||
If this variable is set, it identifies a menu entry that should be
|
||
selected if the default menu entry fails to boot. Entries are
|
||
identified in the same way as for 'default' (*note default::).
|
||
|
||
|
||
File: grub.info, Node: gfxmode, Next: gfxpayload, Prev: fallback, Up: Special environment variables
|
||
|
||
15.1.12 gfxmode
|
||
---------------
|
||
|
||
If this variable is set, it sets the resolution used on the 'gfxterm'
|
||
graphical terminal. Note that you can only use modes which your
|
||
graphics card supports via VESA BIOS Extensions (VBE), so for example
|
||
native LCD panel resolutions may not be available. The default is
|
||
'auto', which selects a platform-specific default that should look
|
||
reasonable. Supported modes can be listed by 'videoinfo' command in
|
||
GRUB.
|
||
|
||
The resolution may be specified as a sequence of one or more modes,
|
||
separated by commas (',') or semicolons (';'); each will be tried in
|
||
turn until one is found. Each mode should be either 'auto',
|
||
'WIDTHxHEIGHT', or 'WIDTHxHEIGHTxDEPTH'.
|
||
|
||
|
||
File: grub.info, Node: gfxpayload, Next: gfxterm_font, Prev: gfxmode, Up: Special environment variables
|
||
|
||
15.1.13 gfxpayload
|
||
------------------
|
||
|
||
If this variable is set, it controls the video mode in which the Linux
|
||
kernel starts up, replacing the 'vga=' boot option (*note linux::). It
|
||
may be set to 'text' to force the Linux kernel to boot in normal text
|
||
mode, 'keep' to preserve the graphics mode set using 'gfxmode', or any
|
||
of the permitted values for 'gfxmode' to set a particular graphics mode
|
||
(*note gfxmode::).
|
||
|
||
Depending on your kernel, your distribution, your graphics card, and
|
||
the phase of the moon, note that using this option may cause GNU/Linux
|
||
to suffer from various display problems, particularly during the early
|
||
part of the boot sequence. If you have problems, set this variable to
|
||
'text' and GRUB will tell Linux to boot in normal text mode.
|
||
|
||
The default is platform-specific. On platforms with a native text
|
||
mode (such as PC BIOS platforms), the default is 'text'. Otherwise the
|
||
default may be 'auto' or a specific video mode.
|
||
|
||
This variable is often set by 'GRUB_GFXPAYLOAD_LINUX' (*note Simple
|
||
configuration::).
|
||
|
||
|
||
File: grub.info, Node: gfxterm_font, Next: grub_cpu, Prev: gfxpayload, Up: Special environment variables
|
||
|
||
15.1.14 gfxterm_font
|
||
--------------------
|
||
|
||
If this variable is set, it names a font to use for text on the
|
||
'gfxterm' graphical terminal. Otherwise, 'gfxterm' may use any
|
||
available font.
|
||
|
||
|
||
File: grub.info, Node: grub_cpu, Next: grub_platform, Prev: gfxterm_font, Up: Special environment variables
|
||
|
||
15.1.15 grub_cpu
|
||
----------------
|
||
|
||
In normal mode (*note normal::), GRUB sets the 'grub_cpu' variable to
|
||
the CPU type for which GRUB was built (e.g. 'i386' or 'powerpc').
|
||
|
||
|
||
File: grub.info, Node: grub_platform, Next: icondir, Prev: grub_cpu, Up: Special environment variables
|
||
|
||
15.1.16 grub_platform
|
||
---------------------
|
||
|
||
In normal mode (*note normal::), GRUB sets the 'grub_platform' variable
|
||
to the platform for which GRUB was built (e.g. 'pc' or 'efi').
|
||
|
||
|
||
File: grub.info, Node: icondir, Next: lang, Prev: grub_platform, Up: Special environment variables
|
||
|
||
15.1.17 icondir
|
||
---------------
|
||
|
||
If this variable is set, it names a directory in which the GRUB
|
||
graphical menu should look for icons after looking in the theme's
|
||
'icons' directory. *Note Theme file format::.
|
||
|
||
|
||
File: grub.info, Node: lang, Next: locale_dir, Prev: icondir, Up: Special environment variables
|
||
|
||
15.1.18 lang
|
||
------------
|
||
|
||
If this variable is set, it names the language code that the 'gettext'
|
||
command (*note gettext::) uses to translate strings. For example,
|
||
French would be named as 'fr', and Simplified Chinese as 'zh_CN'.
|
||
|
||
'grub-mkconfig' (*note Simple configuration::) will try to set a
|
||
reasonable default for this variable based on the system locale.
|
||
|
||
|
||
File: grub.info, Node: locale_dir, Next: menu_color_highlight, Prev: lang, Up: Special environment variables
|
||
|
||
15.1.19 locale_dir
|
||
------------------
|
||
|
||
If this variable is set, it names the directory where translation files
|
||
may be found (*note gettext::), usually '/boot/grub/locale'. Otherwise,
|
||
internationalization is disabled.
|
||
|
||
'grub-mkconfig' (*note Simple configuration::) will set a reasonable
|
||
default for this variable if internationalization is needed and any
|
||
translation files are available.
|
||
|
||
|
||
File: grub.info, Node: menu_color_highlight, Next: menu_color_normal, Prev: locale_dir, Up: Special environment variables
|
||
|
||
15.1.20 menu_color_highlight
|
||
----------------------------
|
||
|
||
This variable contains the foreground and background colors to be used
|
||
for the highlighted menu entry, separated by a slash ('/'). Setting
|
||
this variable changes those colors. For the available color names,
|
||
*note color_normal::.
|
||
|
||
The default is the value of 'color_highlight' (*note
|
||
color_highlight::).
|
||
|
||
|
||
File: grub.info, Node: menu_color_normal, Next: net_<INTERFACE>_boot_file, Prev: menu_color_highlight, Up: Special environment variables
|
||
|
||
15.1.21 menu_color_normal
|
||
-------------------------
|
||
|
||
This variable contains the foreground and background colors to be used
|
||
for non-highlighted menu entries, separated by a slash ('/'). Setting
|
||
this variable changes those colors. For the available color names,
|
||
*note color_normal::.
|
||
|
||
The default is the value of 'color_normal' (*note color_normal::).
|
||
|
||
|
||
File: grub.info, Node: net_<INTERFACE>_boot_file, Next: net_<INTERFACE>_dhcp_server_name, Prev: menu_color_normal, Up: Special environment variables
|
||
|
||
15.1.22 net_<INTERFACE>_boot_file
|
||
---------------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: net_<INTERFACE>_dhcp_server_name, Next: net_<INTERFACE>_domain, Prev: net_<INTERFACE>_boot_file, Up: Special environment variables
|
||
|
||
15.1.23 net_<INTERFACE>_dhcp_server_name
|
||
----------------------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: net_<INTERFACE>_domain, Next: net_<INTERFACE>_extensionspath, Prev: net_<INTERFACE>_dhcp_server_name, Up: Special environment variables
|
||
|
||
15.1.24 net_<INTERFACE>_domain
|
||
------------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: net_<INTERFACE>_extensionspath, Next: net_<INTERFACE>_hostname, Prev: net_<INTERFACE>_domain, Up: Special environment variables
|
||
|
||
15.1.25 net_<INTERFACE>_extensionspath
|
||
--------------------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: net_<INTERFACE>_hostname, Next: net_<INTERFACE>_ip, Prev: net_<INTERFACE>_extensionspath, Up: Special environment variables
|
||
|
||
15.1.26 net_<INTERFACE>_hostname
|
||
--------------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: net_<INTERFACE>_ip, Next: net_<INTERFACE>_mac, Prev: net_<INTERFACE>_hostname, Up: Special environment variables
|
||
|
||
15.1.27 net_<INTERFACE>_ip
|
||
--------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: net_<INTERFACE>_mac, Next: net_<INTERFACE>_next_server, Prev: net_<INTERFACE>_ip, Up: Special environment variables
|
||
|
||
15.1.28 net_<INTERFACE>_mac
|
||
---------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: net_<INTERFACE>_next_server, Next: net_<INTERFACE>_rootpath, Prev: net_<INTERFACE>_mac, Up: Special environment variables
|
||
|
||
15.1.29 net_<INTERFACE>_next_server
|
||
-----------------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: net_<INTERFACE>_rootpath, Next: net_default_interface, Prev: net_<INTERFACE>_next_server, Up: Special environment variables
|
||
|
||
15.1.30 net_<INTERFACE>_rootpath
|
||
--------------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: net_default_interface, Next: net_default_ip, Prev: net_<INTERFACE>_rootpath, Up: Special environment variables
|
||
|
||
15.1.31 net_default_interface
|
||
-----------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: net_default_ip, Next: net_default_mac, Prev: net_default_interface, Up: Special environment variables
|
||
|
||
15.1.32 net_default_ip
|
||
----------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: net_default_mac, Next: net_default_server, Prev: net_default_ip, Up: Special environment variables
|
||
|
||
15.1.33 net_default_mac
|
||
-----------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: net_default_server, Next: pager, Prev: net_default_mac, Up: Special environment variables
|
||
|
||
15.1.34 net_default_server
|
||
--------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: pager, Next: prefix, Prev: net_default_server, Up: Special environment variables
|
||
|
||
15.1.35 pager
|
||
-------------
|
||
|
||
If set to '1', pause output after each screenful and wait for keyboard
|
||
input. The default is not to pause output.
|
||
|
||
|
||
File: grub.info, Node: prefix, Next: pxe_blksize, Prev: pager, Up: Special environment variables
|
||
|
||
15.1.36 prefix
|
||
--------------
|
||
|
||
The location of the '/boot/grub' directory as an absolute file name
|
||
(*note File name syntax::). This is normally set by GRUB at startup
|
||
based on information provided by 'grub-install'. GRUB modules are
|
||
dynamically loaded from this directory, so it must be set correctly in
|
||
order for many parts of GRUB to work.
|
||
|
||
|
||
File: grub.info, Node: pxe_blksize, Next: pxe_default_gateway, Prev: prefix, Up: Special environment variables
|
||
|
||
15.1.37 pxe_blksize
|
||
-------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: pxe_default_gateway, Next: pxe_default_server, Prev: pxe_blksize, Up: Special environment variables
|
||
|
||
15.1.38 pxe_default_gateway
|
||
---------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: pxe_default_server, Next: root, Prev: pxe_default_gateway, Up: Special environment variables
|
||
|
||
15.1.39 pxe_default_server
|
||
--------------------------
|
||
|
||
*Note Network::.
|
||
|
||
|
||
File: grub.info, Node: root, Next: superusers, Prev: pxe_default_server, Up: Special environment variables
|
||
|
||
15.1.40 root
|
||
------------
|
||
|
||
The root device name (*note Device syntax::). Any file names that do
|
||
not specify an explicit device name are read from this device. The
|
||
default is normally set by GRUB at startup based on the value of
|
||
'prefix' (*note prefix::).
|
||
|
||
For example, if GRUB was installed to the first partition of the
|
||
first hard disk, then 'prefix' might be set to '(hd0,msdos1)/boot/grub'
|
||
and 'root' to 'hd0,msdos1'.
|
||
|
||
|
||
File: grub.info, Node: superusers, Next: theme, Prev: root, Up: Special environment variables
|
||
|
||
15.1.41 superusers
|
||
------------------
|
||
|
||
This variable may be set to a list of superuser names to enable
|
||
authentication support. *Note Security::.
|
||
|
||
|
||
File: grub.info, Node: theme, Next: timeout, Prev: superusers, Up: Special environment variables
|
||
|
||
15.1.42 theme
|
||
-------------
|
||
|
||
This variable may be set to a directory containing a GRUB graphical menu
|
||
theme. *Note Theme file format::.
|
||
|
||
This variable is often set by 'GRUB_THEME' (*note Simple
|
||
configuration::).
|
||
|
||
|
||
File: grub.info, Node: timeout, Next: timeout_style, Prev: theme, Up: Special environment variables
|
||
|
||
15.1.43 timeout
|
||
---------------
|
||
|
||
If this variable is set, it specifies the time in seconds to wait for
|
||
keyboard input before booting the default menu entry. A timeout of '0'
|
||
means to boot the default entry immediately without displaying the menu;
|
||
a timeout of '-1' (or unset) means to wait indefinitely.
|
||
|
||
If 'timeout_style' (*note timeout_style::) is set to 'countdown' or
|
||
'hidden', the timeout is instead counted before the menu is displayed.
|
||
|
||
This variable is often set by 'GRUB_TIMEOUT' (*note Simple
|
||
configuration::).
|
||
|
||
|
||
File: grub.info, Node: timeout_style, Prev: timeout, Up: Special environment variables
|
||
|
||
15.1.44 timeout_style
|
||
---------------------
|
||
|
||
This variable may be set to 'menu', 'countdown', or 'hidden' to control
|
||
the way in which the timeout (*note timeout::) interacts with displaying
|
||
the menu. See the documentation of 'GRUB_TIMEOUT_STYLE' (*note Simple
|
||
configuration::) for details.
|
||
|
||
|
||
File: grub.info, Node: Environment block, Prev: Special environment variables, Up: Environment
|
||
|
||
15.2 The GRUB environment block
|
||
===============================
|
||
|
||
It is often useful to be able to remember a small amount of information
|
||
from one boot to the next. For example, you might want to set the
|
||
default menu entry based on what was selected the last time. GRUB
|
||
deliberately does not implement support for writing files in order to
|
||
minimise the possibility of the boot loader being responsible for file
|
||
system corruption, so a GRUB configuration file cannot just create a
|
||
file in the ordinary way. However, GRUB provides an "environment block"
|
||
which can be used to save a small amount of state.
|
||
|
||
The environment block is a preallocated 1024-byte file, which
|
||
normally lives in '/boot/grub/grubenv' (although you should not assume
|
||
this). At boot time, the 'load_env' command (*note load_env::) loads
|
||
environment variables from it, and the 'save_env' (*note save_env::)
|
||
command saves environment variables to it. From a running system, the
|
||
'grub-editenv' utility can be used to edit the environment block.
|
||
|
||
For safety reasons, this storage is only available when installed on
|
||
a plain disk (no LVM or RAID), using a non-checksumming filesystem (no
|
||
ZFS), and using BIOS or EFI functions (no ATA, USB or IEEE1275).
|
||
|
||
'grub-mkconfig' uses this facility to implement 'GRUB_SAVEDEFAULT'
|
||
(*note Simple configuration::).
|
||
|
||
|
||
File: grub.info, Node: Commands, Next: Internationalisation, Prev: Environment, Up: Top
|
||
|
||
16 The list of available commands
|
||
*********************************
|
||
|
||
In this chapter, we list all commands that are available in GRUB.
|
||
|
||
Commands belong to different groups. A few can only be used in the
|
||
global section of the configuration file (or "menu"); most of them can
|
||
be entered on the command-line and can be used either anywhere in the
|
||
menu or specifically in the menu entries.
|
||
|
||
In rescue mode, only the 'insmod' (*note insmod::), 'ls' (*note
|
||
ls::), 'set' (*note set::), and 'unset' (*note unset::) commands are
|
||
normally available. If you end up in rescue mode and do not know what
|
||
to do, then *note GRUB only offers a rescue shell::.
|
||
|
||
* Menu:
|
||
|
||
* Menu-specific commands::
|
||
* General commands::
|
||
* Command-line and menu entry commands::
|
||
* Networking commands::
|
||
|
||
|
||
File: grub.info, Node: Menu-specific commands, Next: General commands, Up: Commands
|
||
|
||
16.1 The list of commands for the menu only
|
||
===========================================
|
||
|
||
The semantics used in parsing the configuration file are the following:
|
||
|
||
* The files _must_ be in plain-text format.
|
||
|
||
* '#' at the beginning of a line in a configuration file means it is
|
||
only a comment.
|
||
|
||
* Options are separated by spaces.
|
||
|
||
* All numbers can be either decimal or hexadecimal. A hexadecimal
|
||
number must be preceded by '0x', and is case-insensitive.
|
||
|
||
These commands can only be used in the menu:
|
||
|
||
* Menu:
|
||
|
||
* menuentry:: Start a menu entry
|
||
* submenu:: Group menu entries
|
||
|
||
|
||
File: grub.info, Node: menuentry, Next: submenu, Up: Menu-specific commands
|
||
|
||
16.1.1 menuentry
|
||
----------------
|
||
|
||
-- Command: menuentry TITLE ['--class=class' ...] ['--users=users']
|
||
['--unrestricted'] ['--hotkey=key'] ['--id=id'] [ARG ...] {
|
||
COMMAND; ... }
|
||
This defines a GRUB menu entry named TITLE. When this entry is
|
||
selected from the menu, GRUB will set the CHOSEN environment
|
||
variable to value of '--id' if '--id' is given, execute the list of
|
||
commands given within braces, and if the last command in the list
|
||
returned successfully and a kernel was loaded it will execute the
|
||
'boot' command.
|
||
|
||
The '--class' option may be used any number of times to group menu
|
||
entries into classes. Menu themes may display different classes
|
||
using different styles.
|
||
|
||
The '--users' option grants specific users access to specific menu
|
||
entries. *Note Security::.
|
||
|
||
The '--unrestricted' option grants all users access to specific
|
||
menu entries. *Note Security::.
|
||
|
||
The '--hotkey' option associates a hotkey with a menu entry. KEY
|
||
may be a single letter, or one of the aliases 'backspace', 'tab',
|
||
or 'delete'.
|
||
|
||
The '--id' may be used to associate unique identifier with a menu
|
||
entry. ID is string of ASCII aphanumeric characters, underscore
|
||
and hyphen and should not start with a digit.
|
||
|
||
All other arguments including TITLE are passed as positional
|
||
parameters when list of commands is executed with TITLE always
|
||
assigned to '$1'.
|
||
|
||
|
||
File: grub.info, Node: submenu, Prev: menuentry, Up: Menu-specific commands
|
||
|
||
16.1.2 submenu
|
||
--------------
|
||
|
||
-- Command: submenu TITLE ['--class=class' ...] ['--users=users']
|
||
['--unrestricted'] ['--hotkey=key'] ['--id=id'] { MENU ENTRIES
|
||
... }
|
||
This defines a submenu. An entry called TITLE will be added to the
|
||
menu; when that entry is selected, a new menu will be displayed
|
||
showing all the entries within this submenu.
|
||
|
||
All options are the same as in the 'menuentry' command (*note
|
||
menuentry::).
|
||
|
||
|
||
File: grub.info, Node: General commands, Next: Command-line and menu entry commands, Prev: Menu-specific commands, Up: Commands
|
||
|
||
16.2 The list of general commands
|
||
=================================
|
||
|
||
Commands usable anywhere in the menu and in the command-line.
|
||
|
||
* Menu:
|
||
|
||
* serial:: Set up a serial device
|
||
* terminal_input:: Manage input terminals
|
||
* terminal_output:: Manage output terminals
|
||
* terminfo:: Define terminal type
|
||
|
||
|
||
File: grub.info, Node: serial, Next: terminal_input, Up: General commands
|
||
|
||
16.2.1 serial
|
||
-------------
|
||
|
||
-- Command: serial ['--unit=unit'] ['--port=port'] ['--speed=speed']
|
||
['--word=word'] ['--parity=parity'] ['--stop=stop']
|
||
Initialize a serial device. UNIT is a number in the range 0-3
|
||
specifying which serial port to use; default is 0, which
|
||
corresponds to the port often called COM1. PORT is the I/O port
|
||
where the UART is to be found; if specified it takes precedence
|
||
over UNIT. SPEED is the transmission speed; default is 9600. WORD
|
||
and STOP are the number of data bits and stop bits. Data bits must
|
||
be in the range 5-8 and stop bits must be 1 or 2. Default is 8
|
||
data bits and one stop bit. PARITY is one of 'no', 'odd', 'even'
|
||
and defaults to 'no'.
|
||
|
||
The serial port is not used as a communication channel unless the
|
||
'terminal_input' or 'terminal_output' command is used (*note
|
||
terminal_input::, *note terminal_output::).
|
||
|
||
See also *note Serial terminal::.
|
||
|
||
|
||
File: grub.info, Node: terminal_input, Next: terminal_output, Prev: serial, Up: General commands
|
||
|
||
16.2.2 terminal_input
|
||
---------------------
|
||
|
||
-- Command: terminal_input ['--append'|'--remove'] [terminal1]
|
||
[terminal2] ...
|
||
List or select an input terminal.
|
||
|
||
With no arguments, list the active and available input terminals.
|
||
|
||
With '--append', add the named terminals to the list of active
|
||
input terminals; any of these may be used to provide input to GRUB.
|
||
|
||
With '--remove', remove the named terminals from the active list.
|
||
|
||
With no options but a list of terminal names, make only the listed
|
||
terminal names active.
|
||
|
||
|
||
File: grub.info, Node: terminal_output, Next: terminfo, Prev: terminal_input, Up: General commands
|
||
|
||
16.2.3 terminal_output
|
||
----------------------
|
||
|
||
-- Command: terminal_output ['--append'|'--remove'] [terminal1]
|
||
[terminal2] ...
|
||
List or select an output terminal.
|
||
|
||
With no arguments, list the active and available output terminals.
|
||
|
||
With '--append', add the named terminals to the list of active
|
||
output terminals; all of these will receive output from GRUB.
|
||
|
||
With '--remove', remove the named terminals from the active list.
|
||
|
||
With no options but a list of terminal names, make only the listed
|
||
terminal names active.
|
||
|
||
|
||
File: grub.info, Node: terminfo, Prev: terminal_output, Up: General commands
|
||
|
||
16.2.4 terminfo
|
||
---------------
|
||
|
||
-- Command: terminfo ['-a'|'-u'|'-v'] ['-g WxH'] [term] [type]
|
||
Define the capabilities of your terminal by giving the name of an
|
||
entry in the terminfo database, which should correspond roughly to
|
||
a 'TERM' environment variable in Unix.
|
||
|
||
The currently available terminal types are 'vt100', 'vt100-color',
|
||
'ieee1275', and 'dumb'. If you need other terminal types, please
|
||
contact us to discuss the best way to include support for these in
|
||
GRUB.
|
||
|
||
The '-a' ('--ascii'), '-u' ('--utf8'), and '-v' ('--visual-utf8')
|
||
options control how non-ASCII text is displayed. '-a' specifies an
|
||
ASCII-only terminal; '-u' specifies logically-ordered UTF-8; and
|
||
'-v' specifies "visually-ordered UTF-8" (in other words, arranged
|
||
such that a terminal emulator without bidirectional text support
|
||
will display right-to-left text in the proper order; this is not
|
||
really proper UTF-8, but a workaround).
|
||
|
||
The '-g' ('--geometry') can be used to specify terminal geometry.
|
||
|
||
If no option or terminal type is specified, the current terminal
|
||
type is printed.
|
||
|
||
|
||
File: grub.info, Node: Command-line and menu entry commands, Next: Networking commands, Prev: General commands, Up: Commands
|
||
|
||
16.3 The list of command-line and menu entry commands
|
||
=====================================================
|
||
|
||
These commands are usable in the command-line and in menu entries. If
|
||
you forget a command, you can run the command 'help' (*note help::).
|
||
|
||
* Menu:
|
||
|
||
* [:: Check file types and compare values
|
||
* acpi:: Load ACPI tables
|
||
* authenticate:: Check whether user is in user list
|
||
* background_color:: Set background color for active terminal
|
||
* background_image:: Load background image for active terminal
|
||
* badram:: Filter out bad regions of RAM
|
||
* blocklist:: Print a block list
|
||
* boot:: Start up your operating system
|
||
* cat:: Show the contents of a file
|
||
* chainloader:: Chain-load another boot loader
|
||
* clear:: Clear the screen
|
||
* cmosclean:: Clear bit in CMOS
|
||
* cmosdump:: Dump CMOS contents
|
||
* cmostest:: Test bit in CMOS
|
||
* cmp:: Compare two files
|
||
* configfile:: Load a configuration file
|
||
* cpuid:: Check for CPU features
|
||
* crc:: Compute or check CRC32 checksums
|
||
* cryptomount:: Mount a crypto device
|
||
* cutmem:: Remove memory regions
|
||
* date:: Display or set current date and time
|
||
* devicetree:: Load a device tree blob
|
||
* distrust:: Remove a pubkey from trusted keys
|
||
* drivemap:: Map a drive to another
|
||
* echo:: Display a line of text
|
||
* eval:: Evaluate agruments as GRUB commands
|
||
* export:: Export an environment variable
|
||
* false:: Do nothing, unsuccessfully
|
||
* gettext:: Translate a string
|
||
* gptsync:: Fill an MBR based on GPT entries
|
||
* halt:: Shut down your computer
|
||
* hashsum:: Compute or check hash checksum
|
||
* help:: Show help messages
|
||
* initrd:: Load a Linux initrd
|
||
* initrd16:: Load a Linux initrd (16-bit mode)
|
||
* insmod:: Insert a module
|
||
* keystatus:: Check key modifier status
|
||
* linux:: Load a Linux kernel
|
||
* linux16:: Load a Linux kernel (16-bit mode)
|
||
* list_env:: List variables in environment block
|
||
* list_trusted:: List trusted public keys
|
||
* load_env:: Load variables from environment block
|
||
* loadfont:: Load font files
|
||
* loopback:: Make a device from a filesystem image
|
||
* ls:: List devices or files
|
||
* lsfonts:: List loaded fonts
|
||
* lsmod:: Show loaded modules
|
||
* md5sum:: Compute or check MD5 hash
|
||
* module:: Load module for multiboot kernel
|
||
* multiboot:: Load multiboot compliant kernel
|
||
* nativedisk:: Switch to native disk drivers
|
||
* normal:: Enter normal mode
|
||
* normal_exit:: Exit from normal mode
|
||
* parttool:: Modify partition table entries
|
||
* password:: Set a clear-text password
|
||
* password_pbkdf2:: Set a hashed password
|
||
* play:: Play a tune
|
||
* probe:: Retrieve device info
|
||
* rdmsr:: Read values from model-specific registers
|
||
* read:: Read user input
|
||
* reboot:: Reboot your computer
|
||
* regexp:: Test if regular expression matches string
|
||
* rmmod:: Remove a module
|
||
* save_env:: Save variables to environment block
|
||
* search:: Search devices by file, label, or UUID
|
||
* sendkey:: Emulate keystrokes
|
||
* set:: Set an environment variable
|
||
* sha1sum:: Compute or check SHA1 hash
|
||
* sha256sum:: Compute or check SHA256 hash
|
||
* sha512sum:: Compute or check SHA512 hash
|
||
* sleep:: Wait for a specified number of seconds
|
||
* smbios:: Retrieve SMBIOS information
|
||
* source:: Read a configuration file in same context
|
||
* test:: Check file types and compare values
|
||
* true:: Do nothing, successfully
|
||
* trust:: Add public key to list of trusted keys
|
||
* unset:: Unset an environment variable
|
||
* verify_detached:: Verify detached digital signature
|
||
* videoinfo:: List available video modes
|
||
* wrmsr:: Write values to model-specific registers
|
||
* xen_hypervisor:: Load xen hypervisor binary (only on AArch64)
|
||
* xen_module:: Load xen modules for xen hypervisor (only on AArch64)
|
||
|
||
|
||
File: grub.info, Node: [, Next: acpi, Up: Command-line and menu entry commands
|
||
|
||
16.3.1 [
|
||
--------
|
||
|
||
-- Command: '[' expression ']'
|
||
Alias for 'test EXPRESSION' (*note test::).
|
||
|
||
|
||
File: grub.info, Node: acpi, Next: authenticate, Prev: [, Up: Command-line and menu entry commands
|
||
|
||
16.3.2 acpi
|
||
-----------
|
||
|
||
-- Command: acpi ['-1'|'-2']
|
||
['--exclude=table1,...'|'--load-only=table1,...']
|
||
['--oemid=id'] ['--oemtable=table'] ['--oemtablerev=rev']
|
||
['--oemtablecreator=creator'] ['--oemtablecreatorrev=rev']
|
||
['--no-ebda'] filename ...
|
||
Modern BIOS systems normally implement the Advanced Configuration
|
||
and Power Interface (ACPI), and define various tables that describe
|
||
the interface between an ACPI-compliant operating system and the
|
||
firmware. In some cases, the tables provided by default only work
|
||
well with certain operating systems, and it may be necessary to
|
||
replace some of them.
|
||
|
||
Normally, this command will replace the Root System Description
|
||
Pointer (RSDP) in the Extended BIOS Data Area to point to the new
|
||
tables. If the '--no-ebda' option is used, the new tables will be
|
||
known only to GRUB, but may be used by GRUB's EFI emulation.
|
||
|
||
Note: The command is not allowed when lockdown is enforced (*note
|
||
Lockdown::). Otherwise an attacker can instruct the GRUB to load
|
||
an SSDT table to overwrite the kernel lockdown configuration and
|
||
later load and execute unsigned code.
|
||
|
||
|
||
File: grub.info, Node: authenticate, Next: background_color, Prev: acpi, Up: Command-line and menu entry commands
|
||
|
||
16.3.3 authenticate
|
||
-------------------
|
||
|
||
-- Command: authenticate [userlist]
|
||
Check whether user is in USERLIST or listed in the value of
|
||
variable 'superusers'. See *note superusers:: for valid user list
|
||
format. If 'superusers' is empty, this command returns true.
|
||
*Note Security::.
|
||
|
||
|
||
File: grub.info, Node: background_color, Next: background_image, Prev: authenticate, Up: Command-line and menu entry commands
|
||
|
||
16.3.4 background_color
|
||
-----------------------
|
||
|
||
-- Command: background_color color
|
||
Set background color for active terminal. For valid color
|
||
specifications see *note Colors: Theme file format. Background
|
||
color can be changed only when using 'gfxterm' for terminal output.
|
||
|
||
This command sets color of empty areas without text. Text
|
||
background color is controlled by environment variables
|
||
COLOR_NORMAL, COLOR_HIGHLIGHT, MENU_COLOR_NORMAL,
|
||
MENU_COLOR_HIGHLIGHT. *Note Special environment variables::.
|
||
|
||
|
||
File: grub.info, Node: background_image, Next: badram, Prev: background_color, Up: Command-line and menu entry commands
|
||
|
||
16.3.5 background_image
|
||
-----------------------
|
||
|
||
-- Command: background_image [['--mode' 'stretch'|'normal'] file]
|
||
Load background image for active terminal from FILE. Image is
|
||
stretched to fill up entire screen unless option '--mode' 'normal'
|
||
is given. Without arguments remove currently loaded background
|
||
image. Background image can be changed only when using 'gfxterm'
|
||
for terminal output.
|
||
|
||
|
||
File: grub.info, Node: badram, Next: blocklist, Prev: background_image, Up: Command-line and menu entry commands
|
||
|
||
16.3.6 badram
|
||
-------------
|
||
|
||
-- Command: badram addr,mask[,addr,mask...]
|
||
Filter out bad RAM.
|
||
|
||
This command notifies the memory manager that specified regions of
|
||
RAM ought to be filtered out (usually, because they're damaged).
|
||
This remains in effect after a payload kernel has been loaded by
|
||
GRUB, as long as the loaded kernel obtains its memory map from
|
||
GRUB. Kernels that support this include Linux, GNU Mach, the kernel
|
||
of FreeBSD and Multiboot kernels in general.
|
||
|
||
Syntax is the same as provided by the Memtest86+ utility
|
||
(http://www.memtest.org/): a list of address/mask pairs. Given a
|
||
page-aligned address and a base address / mask pair, if all the
|
||
bits of the page-aligned address that are enabled by the mask match
|
||
with the base address, it means this page is to be filtered. This
|
||
syntax makes it easy to represent patterns that are often result of
|
||
memory damage, due to physical distribution of memory cells.
|
||
|
||
The command is similar to 'cutmem' command.
|
||
|
||
Note: The command is not allowed when lockdown is enforced (*note
|
||
Lockdown::). This prevents removing EFI memory regions to
|
||
potentially subvert the security mechanisms provided by the UEFI
|
||
secure boot.
|
||
|
||
|
||
File: grub.info, Node: blocklist, Next: boot, Prev: badram, Up: Command-line and menu entry commands
|
||
|
||
16.3.7 blocklist
|
||
----------------
|
||
|
||
-- Command: blocklist file
|
||
Print a block list (*note Block list syntax::) for FILE.
|
||
|
||
|
||
File: grub.info, Node: boot, Next: cat, Prev: blocklist, Up: Command-line and menu entry commands
|
||
|
||
16.3.8 boot
|
||
-----------
|
||
|
||
-- Command: boot
|
||
Boot the OS or chain-loader which has been loaded. Only necessary
|
||
if running the fully interactive command-line (it is implicit at
|
||
the end of a menu entry).
|
||
|
||
|
||
File: grub.info, Node: cat, Next: chainloader, Prev: boot, Up: Command-line and menu entry commands
|
||
|
||
16.3.9 cat
|
||
----------
|
||
|
||
-- Command: cat ['--dos'] file
|
||
Display the contents of the file FILE. This command may be useful
|
||
to remind you of your OS's root partition:
|
||
|
||
grub> cat /etc/fstab
|
||
|
||
If the '--dos' option is used, then carriage return / new line
|
||
pairs will be displayed as a simple new line. Otherwise, the
|
||
carriage return will be displayed as a control character ('<d>') to
|
||
make it easier to see when boot problems are caused by a file
|
||
formatted using DOS-style line endings.
|
||
|
||
|
||
File: grub.info, Node: chainloader, Next: clear, Prev: cat, Up: Command-line and menu entry commands
|
||
|
||
16.3.10 chainloader
|
||
-------------------
|
||
|
||
-- Command: chainloader ['--force'] file
|
||
Load FILE as a chain-loader. Like any other file loaded by the
|
||
filesystem code, it can use the blocklist notation (*note Block
|
||
list syntax::) to grab the first sector of the current partition
|
||
with '+1'. If you specify the option '--force', then load FILE
|
||
forcibly, whether it has a correct signature or not. This is
|
||
required when you want to load a defective boot loader, such as SCO
|
||
UnixWare 7.1.
|
||
|
||
|
||
File: grub.info, Node: clear, Next: cmosclean, Prev: chainloader, Up: Command-line and menu entry commands
|
||
|
||
16.3.11 clear
|
||
-------------
|
||
|
||
-- Command: clear
|
||
Clear the screen.
|
||
|
||
|
||
File: grub.info, Node: cmosclean, Next: cmosdump, Prev: clear, Up: Command-line and menu entry commands
|
||
|
||
16.3.12 cmosclean
|
||
-----------------
|
||
|
||
-- Command: cmosclean byte:bit
|
||
Clear value of bit in CMOS at location BYTE:BIT. This command is
|
||
available only on platforms that support CMOS.
|
||
|
||
|
||
File: grub.info, Node: cmosdump, Next: cmostest, Prev: cmosclean, Up: Command-line and menu entry commands
|
||
|
||
16.3.13 cmosdump
|
||
----------------
|
||
|
||
-- Dump: CMOS contents
|
||
Dump full CMOS contents as hexadecimal values. This command is
|
||
available only on platforms that support CMOS.
|
||
|
||
|
||
File: grub.info, Node: cmostest, Next: cmp, Prev: cmosdump, Up: Command-line and menu entry commands
|
||
|
||
16.3.14 cmostest
|
||
----------------
|
||
|
||
-- Command: cmostest byte:bit
|
||
Test value of bit in CMOS at location BYTE:BIT. Exit status is
|
||
zero if bit is set, non zero otherwise. This command is available
|
||
only on platforms that support CMOS.
|
||
|
||
|
||
File: grub.info, Node: cmp, Next: configfile, Prev: cmostest, Up: Command-line and menu entry commands
|
||
|
||
16.3.15 cmp
|
||
-----------
|
||
|
||
-- Command: cmp file1 file2
|
||
Compare the file FILE1 with the file FILE2. If they differ in
|
||
size, print the sizes like this:
|
||
|
||
Differ in size: 0x1234 [foo], 0x4321 [bar]
|
||
|
||
If the sizes are equal but the bytes at an offset differ, then
|
||
print the bytes like this:
|
||
|
||
Differ at the offset 777: 0xbe [foo], 0xef [bar]
|
||
|
||
If they are completely identical, nothing will be printed.
|
||
|
||
|
||
File: grub.info, Node: configfile, Next: cpuid, Prev: cmp, Up: Command-line and menu entry commands
|
||
|
||
16.3.16 configfile
|
||
------------------
|
||
|
||
-- Command: configfile file
|
||
Load FILE as a configuration file. If FILE defines any menu
|
||
entries, then show a menu containing them immediately. Any
|
||
environment variable changes made by the commands in FILE will not
|
||
be preserved after 'configfile' returns.
|
||
|
||
|
||
File: grub.info, Node: cpuid, Next: crc, Prev: configfile, Up: Command-line and menu entry commands
|
||
|
||
16.3.17 cpuid
|
||
-------------
|
||
|
||
-- Command: cpuid [-l] [-p]
|
||
Check for CPU features. This command is only available on x86
|
||
systems.
|
||
|
||
With the '-l' option, return true if the CPU supports long mode
|
||
(64-bit).
|
||
|
||
With the '-p' option, return true if the CPU supports Physical
|
||
Address Extension (PAE).
|
||
|
||
If invoked without options, this command currently behaves as if it
|
||
had been invoked with '-l'. This may change in the future.
|
||
|
||
|
||
File: grub.info, Node: crc, Next: cryptomount, Prev: cpuid, Up: Command-line and menu entry commands
|
||
|
||
16.3.18 crc
|
||
-----------
|
||
|
||
-- Command: crc arg ...
|
||
Alias for 'hashsum --hash crc32 arg ...'. See command 'hashsum'
|
||
(*note hashsum::) for full description.
|
||
|
||
|
||
File: grub.info, Node: cryptomount, Next: cutmem, Prev: crc, Up: Command-line and menu entry commands
|
||
|
||
16.3.19 cryptomount
|
||
-------------------
|
||
|
||
-- Command: cryptomount device|'-u' uuid|'-a'|'-b'
|
||
Setup access to encrypted device. If necessary, passphrase is
|
||
requested interactively. Option DEVICE configures specific grub
|
||
device (*note Naming convention::); option '-u' UUID configures
|
||
device with specified UUID; option '-a' configures all detected
|
||
encrypted devices; option '-b' configures all geli containers that
|
||
have boot flag set.
|
||
|
||
GRUB suports devices encrypted using LUKS, LUKS2 and geli. Note
|
||
that necessary modules (LUKS, LUKS2 and GELI) have to be loaded
|
||
manually before this command can be used. For LUKS2 only the
|
||
PBKDF2 key derivation function is supported, as Argon2 is not yet
|
||
supported.
|
||
|
||
Also, note that, unlike filesystem UUIDs, UUIDs for encrypted
|
||
devices must be specified without dash separators.
|
||
|
||
|
||
File: grub.info, Node: cutmem, Next: date, Prev: cryptomount, Up: Command-line and menu entry commands
|
||
|
||
16.3.20 cutmem
|
||
--------------
|
||
|
||
-- Command: cutmem from[K|M|G] to[K|M|G]
|
||
Remove any memory regions in specified range.
|
||
|
||
This command notifies the memory manager that specified regions of
|
||
RAM ought to be filtered out. This remains in effect after a
|
||
payload kernel has been loaded by GRUB, as long as the loaded
|
||
kernel obtains its memory map from GRUB. Kernels that support this
|
||
include Linux, GNU Mach, the kernel of FreeBSD and Multiboot
|
||
kernels in general.
|
||
|
||
The command is similar to 'badram' command.
|
||
|
||
Note: The command is not allowed when lockdown is enforced (*note
|
||
Lockdown::). This prevents removing EFI memory regions to
|
||
potentially subvert the security mechanisms provided by the UEFI
|
||
secure boot.
|
||
|
||
|
||
File: grub.info, Node: date, Next: devicetree, Prev: cutmem, Up: Command-line and menu entry commands
|
||
|
||
16.3.21 date
|
||
------------
|
||
|
||
-- Command: date [[year-]month-day] [hour:minute[:second]]
|
||
With no arguments, print the current date and time.
|
||
|
||
Otherwise, take the current date and time, change any elements
|
||
specified as arguments, and set the result as the new date and
|
||
time. For example, 'date 01-01' will set the current month and day
|
||
to January 1, but leave the year, hour, minute, and second
|
||
unchanged.
|
||
|
||
|
||
File: grub.info, Node: devicetree, Next: distrust, Prev: date, Up: Command-line and menu entry commands
|
||
|
||
16.3.22 devicetree
|
||
------------------
|
||
|
||
-- Command: devicetree file
|
||
Load a device tree blob (.dtb) from a filesystem, for later use by
|
||
a Linux kernel. Does not perform merging with any device tree
|
||
supplied by firmware, but rather replaces it completely.
|
||
|
||
Note: The command is not allowed when lockdown is enforced (*note
|
||
Lockdown::). This is done to prevent subverting various security
|
||
mechanisms.
|
||
|
||
|
||
File: grub.info, Node: distrust, Next: drivemap, Prev: devicetree, Up: Command-line and menu entry commands
|
||
|
||
16.3.23 distrust
|
||
----------------
|
||
|
||
-- Command: distrust pubkey_id
|
||
Remove public key PUBKEY_ID from GRUB's keyring of trusted keys.
|
||
PUBKEY_ID is the last four bytes (eight hexadecimal digits) of the
|
||
GPG v4 key id, which is also the output of 'list_trusted' (*note
|
||
list_trusted::). Outside of GRUB, the key id can be obtained using
|
||
'gpg --fingerprint'). These keys are used to validate signatures
|
||
when environment variable 'check_signatures' is set to 'enforce'
|
||
(*note check_signatures::), and by some invocations of
|
||
'verify_detached' (*note verify_detached::). *Note Using digital
|
||
signatures::, for more information.
|
||
|
||
|
||
File: grub.info, Node: drivemap, Next: echo, Prev: distrust, Up: Command-line and menu entry commands
|
||
|
||
16.3.24 drivemap
|
||
----------------
|
||
|
||
-- Command: drivemap '-l'|'-r'|['-s'] from_drive to_drive
|
||
Without options, map the drive FROM_DRIVE to the drive TO_DRIVE.
|
||
This is necessary when you chain-load some operating systems, such
|
||
as DOS, if such an OS resides at a non-first drive. For
|
||
convenience, any partition suffix on the drive is ignored, so you
|
||
can safely use ${root} as a drive specification.
|
||
|
||
With the '-s' option, perform the reverse mapping as well, swapping
|
||
the two drives.
|
||
|
||
With the '-l' option, list the current mappings.
|
||
|
||
With the '-r' option, reset all mappings to the default values.
|
||
|
||
For example:
|
||
|
||
drivemap -s (hd0) (hd1)
|
||
|
||
|
||
File: grub.info, Node: echo, Next: eval, Prev: drivemap, Up: Command-line and menu entry commands
|
||
|
||
16.3.25 echo
|
||
------------
|
||
|
||
-- Command: echo ['-n'] ['-e'] string ...
|
||
Display the requested text and, unless the '-n' option is used, a
|
||
trailing new line. If there is more than one string, they are
|
||
separated by spaces in the output. As usual in GRUB commands,
|
||
variables may be substituted using '${var}'.
|
||
|
||
The '-e' option enables interpretation of backslash escapes. The
|
||
following sequences are recognised:
|
||
|
||
'\\'
|
||
backslash
|
||
|
||
'\a'
|
||
alert (BEL)
|
||
|
||
'\c'
|
||
suppress trailing new line
|
||
|
||
'\f'
|
||
form feed
|
||
|
||
'\n'
|
||
new line
|
||
|
||
'\r'
|
||
carriage return
|
||
|
||
'\t'
|
||
horizontal tab
|
||
|
||
'\v'
|
||
vertical tab
|
||
|
||
When interpreting backslash escapes, backslash followed by any
|
||
other character will print that character.
|
||
|
||
|
||
File: grub.info, Node: eval, Next: export, Prev: echo, Up: Command-line and menu entry commands
|
||
|
||
16.3.26 eval
|
||
------------
|
||
|
||
-- Command: eval string ...
|
||
Concatenate arguments together using single space as separator and
|
||
evaluate result as sequence of GRUB commands.
|
||
|
||
|
||
File: grub.info, Node: export, Next: false, Prev: eval, Up: Command-line and menu entry commands
|
||
|
||
16.3.27 export
|
||
--------------
|
||
|
||
-- Command: export envvar
|
||
Export the environment variable ENVVAR. Exported variables are
|
||
visible to subsidiary configuration files loaded using
|
||
'configfile'.
|
||
|
||
|
||
File: grub.info, Node: false, Next: gettext, Prev: export, Up: Command-line and menu entry commands
|
||
|
||
16.3.28 false
|
||
-------------
|
||
|
||
-- Command: false
|
||
Do nothing, unsuccessfully. This is mainly useful in control
|
||
constructs such as 'if' and 'while' (*note Shell-like scripting::).
|
||
|
||
|
||
File: grub.info, Node: gettext, Next: gptsync, Prev: false, Up: Command-line and menu entry commands
|
||
|
||
16.3.29 gettext
|
||
---------------
|
||
|
||
-- Command: gettext string
|
||
Translate STRING into the current language.
|
||
|
||
The current language code is stored in the 'lang' variable in
|
||
GRUB's environment (*note lang::). Translation files in MO format
|
||
are read from 'locale_dir' (*note locale_dir::), usually
|
||
'/boot/grub/locale'.
|
||
|
||
|
||
File: grub.info, Node: gptsync, Next: halt, Prev: gettext, Up: Command-line and menu entry commands
|
||
|
||
16.3.30 gptsync
|
||
---------------
|
||
|
||
-- Command: gptsync device [partition[+/-[type]]] ...
|
||
Disks using the GUID Partition Table (GPT) also have a legacy
|
||
Master Boot Record (MBR) partition table for compatibility with the
|
||
BIOS and with older operating systems. The legacy MBR can only
|
||
represent a limited subset of GPT partition entries.
|
||
|
||
This command populates the legacy MBR with the specified PARTITION
|
||
entries on DEVICE. Up to three partitions may be used.
|
||
|
||
TYPE is an MBR partition type code; prefix with '0x' if you want to
|
||
enter this in hexadecimal. The separator between PARTITION and
|
||
TYPE may be '+' to make the partition active, or '-' to make it
|
||
inactive; only one partition may be active. If both the separator
|
||
and type are omitted, then the partition will be inactive.
|
||
|
||
|
||
File: grub.info, Node: halt, Next: hashsum, Prev: gptsync, Up: Command-line and menu entry commands
|
||
|
||
16.3.31 halt
|
||
------------
|
||
|
||
-- Command: halt '--no-apm'
|
||
The command halts the computer. If the '--no-apm' option is
|
||
specified, no APM BIOS call is performed. Otherwise, the computer
|
||
is shut down using APM.
|
||
|
||
|
||
File: grub.info, Node: hashsum, Next: help, Prev: halt, Up: Command-line and menu entry commands
|
||
|
||
16.3.32 hashsum
|
||
---------------
|
||
|
||
-- Command: hashsum '--hash' hash '--keep-going' '--uncompress'
|
||
'--check' file ['--prefix' dir]|file ...
|
||
Compute or verify file hashes. Hash type is selected with option
|
||
'--hash'. Supported hashes are: 'adler32', 'crc64', 'crc32',
|
||
'crc32rfc1510', 'crc24rfc2440', 'md4', 'md5', 'ripemd160', 'sha1',
|
||
'sha224', 'sha256', 'sha512', 'sha384', 'tiger192', 'tiger',
|
||
'tiger2', 'whirlpool'. Option '--uncompress' uncompresses files
|
||
before computing hash.
|
||
|
||
When list of files is given, hash of each file is computed and
|
||
printed, followed by file name, each file on a new line.
|
||
|
||
When option '--check' is given, it points to a file that contains
|
||
list of HASH NAME pairs in the same format as used by UNIX 'md5sum'
|
||
command. Option '--prefix' may be used to give directory where
|
||
files are located. Hash verification stops after the first
|
||
mismatch was found unless option '--keep-going' was given. The
|
||
exit code '$?' is set to 0 if hash verification is successful. If
|
||
it fails, '$?' is set to a nonzero value.
|
||
|
||
|
||
File: grub.info, Node: help, Next: initrd, Prev: hashsum, Up: Command-line and menu entry commands
|
||
|
||
16.3.33 help
|
||
------------
|
||
|
||
-- Command: help [pattern ...]
|
||
Display helpful information about builtin commands. If you do not
|
||
specify PATTERN, this command shows short descriptions of all
|
||
available commands.
|
||
|
||
If you specify any PATTERNS, it displays longer information about
|
||
each of the commands whose names begin with those PATTERNS.
|
||
|
||
|
||
File: grub.info, Node: initrd, Next: initrd16, Prev: help, Up: Command-line and menu entry commands
|
||
|
||
16.3.34 initrd
|
||
--------------
|
||
|
||
-- Command: initrd file [file ...]
|
||
Load, in order, all initial ramdisks for a Linux kernel image, and
|
||
set the appropriate parameters in the Linux setup area in memory.
|
||
This may only be used after the 'linux' command (*note linux::) has
|
||
been run. See also *note GNU/Linux::.
|
||
|
||
|
||
File: grub.info, Node: initrd16, Next: insmod, Prev: initrd, Up: Command-line and menu entry commands
|
||
|
||
16.3.35 initrd16
|
||
----------------
|
||
|
||
-- Command: initrd16 file [file ...]
|
||
Load, in order, all initial ramdisks for a Linux kernel image to be
|
||
booted in 16-bit mode, and set the appropriate parameters in the
|
||
Linux setup area in memory. This may only be used after the
|
||
'linux16' command (*note linux16::) has been run. See also *note
|
||
GNU/Linux::.
|
||
|
||
This command is only available on x86 systems.
|
||
|
||
|
||
File: grub.info, Node: insmod, Next: keystatus, Prev: initrd16, Up: Command-line and menu entry commands
|
||
|
||
16.3.36 insmod
|
||
--------------
|
||
|
||
-- Command: insmod module
|
||
Insert the dynamic GRUB module called MODULE.
|
||
|
||
|
||
File: grub.info, Node: keystatus, Next: linux, Prev: insmod, Up: Command-line and menu entry commands
|
||
|
||
16.3.37 keystatus
|
||
-----------------
|
||
|
||
-- Command: keystatus ['--shift'] ['--ctrl'] ['--alt']
|
||
Return true if the Shift, Control, or Alt modifier keys are held
|
||
down, as requested by options. This is useful in scripting, to
|
||
allow some user control over behaviour without having to wait for a
|
||
keypress.
|
||
|
||
Checking key modifier status is only supported on some platforms.
|
||
If invoked without any options, the 'keystatus' command returns
|
||
true if and only if checking key modifier status is supported.
|
||
|
||
|
||
File: grub.info, Node: linux, Next: linux16, Prev: keystatus, Up: Command-line and menu entry commands
|
||
|
||
16.3.38 linux
|
||
-------------
|
||
|
||
-- Command: linux file ...
|
||
Load a Linux kernel image from FILE. The rest of the line is
|
||
passed verbatim as the "kernel command-line". Any initrd must be
|
||
reloaded after using this command (*note initrd::).
|
||
|
||
On x86 systems, the kernel will be booted using the 32-bit boot
|
||
protocol. Note that this means that the 'vga=' boot option will
|
||
not work; if you want to set a special video mode, you will need to
|
||
use GRUB commands such as 'set gfxpayload=1024x768' or 'set
|
||
gfxpayload=keep' (to keep the same mode as used in GRUB) instead.
|
||
GRUB can automatically detect some uses of 'vga=' and translate
|
||
them to appropriate settings of 'gfxpayload'. The 'linux16'
|
||
command (*note linux16::) avoids this restriction.
|
||
|
||
|
||
File: grub.info, Node: linux16, Next: list_env, Prev: linux, Up: Command-line and menu entry commands
|
||
|
||
16.3.39 linux16
|
||
---------------
|
||
|
||
-- Command: linux16 file ...
|
||
Load a Linux kernel image from FILE in 16-bit mode. The rest of
|
||
the line is passed verbatim as the "kernel command-line". Any
|
||
initrd must be reloaded after using this command (*note
|
||
initrd16::).
|
||
|
||
The kernel will be booted using the traditional 16-bit boot
|
||
protocol. As well as bypassing problems with 'vga=' described in
|
||
*note linux::, this permits booting some other programs that
|
||
implement the Linux boot protocol for the sake of convenience.
|
||
|
||
This command is only available on x86 systems.
|
||
|
||
|
||
File: grub.info, Node: list_env, Next: list_trusted, Prev: linux16, Up: Command-line and menu entry commands
|
||
|
||
16.3.40 list_env
|
||
----------------
|
||
|
||
-- Command: list_env ['--file' file]
|
||
List all variables in the environment block file. *Note
|
||
Environment block::.
|
||
|
||
The '--file' option overrides the default location of the
|
||
environment block.
|
||
|
||
|
||
File: grub.info, Node: list_trusted, Next: load_env, Prev: list_env, Up: Command-line and menu entry commands
|
||
|
||
16.3.41 list_trusted
|
||
--------------------
|
||
|
||
-- Command: list_trusted
|
||
List all public keys trusted by GRUB for validating signatures.
|
||
The output is in GPG's v4 key fingerprint format (i.e., the output
|
||
of 'gpg --fingerprint'). The least significant four bytes (last
|
||
eight hexadecimal digits) can be used as an argument to 'distrust'
|
||
(*note distrust::). *Note Using digital signatures::, for more
|
||
information about uses for these keys.
|
||
|
||
|
||
File: grub.info, Node: load_env, Next: loadfont, Prev: list_trusted, Up: Command-line and menu entry commands
|
||
|
||
16.3.42 load_env
|
||
----------------
|
||
|
||
-- Command: load_env ['--file' file] ['--skip-sig']
|
||
[whitelisted_variable_name] ...
|
||
Load all variables from the environment block file into the
|
||
environment. *Note Environment block::.
|
||
|
||
The '--file' option overrides the default location of the
|
||
environment block.
|
||
|
||
The '--skip-sig' option skips signature checking even when the
|
||
value of environment variable 'check_signatures' is set to
|
||
'enforce' (*note check_signatures::).
|
||
|
||
If one or more variable names are provided as arguments, they are
|
||
interpreted as a whitelist of variables to load from the
|
||
environment block file. Variables set in the file but not present
|
||
in the whitelist are ignored.
|
||
|
||
The '--skip-sig' option should be used with care, and should always
|
||
be used in concert with a whitelist of acceptable variables whose
|
||
values should be set. Failure to employ a carefully constructed
|
||
whitelist could result in reading a malicious value into critical
|
||
environment variables from the file, such as setting
|
||
'check_signatures=no', modifying 'prefix' to boot from an
|
||
unexpected location or not at all, etc.
|
||
|
||
When used with care, '--skip-sig' and the whitelist enable an
|
||
administrator to configure a system to boot only signed
|
||
configurations, but to allow the user to select from among multiple
|
||
configurations, and to enable "one-shot" boot attempts and
|
||
"savedefault" behavior. *Note Using digital signatures::, for more
|
||
information.
|
||
|
||
|
||
File: grub.info, Node: loadfont, Next: loopback, Prev: load_env, Up: Command-line and menu entry commands
|
||
|
||
16.3.43 loadfont
|
||
----------------
|
||
|
||
-- Command: loadfont file ...
|
||
Load specified font files. Unless absolute pathname is given, FILE
|
||
is assumed to be in directory '$prefix/fonts' with suffix '.pf2'
|
||
appended. *Note Fonts: Theme file format.
|
||
|
||
|
||
File: grub.info, Node: loopback, Next: ls, Prev: loadfont, Up: Command-line and menu entry commands
|
||
|
||
16.3.44 loopback
|
||
----------------
|
||
|
||
-- Command: loopback ['-d'] device file
|
||
Make the device named DEVICE correspond to the contents of the
|
||
filesystem image in FILE. For example:
|
||
|
||
loopback loop0 /path/to/image
|
||
ls (loop0)/
|
||
|
||
With the '-d' option, delete a device previously created using this
|
||
command.
|
||
|
||
|
||
File: grub.info, Node: ls, Next: lsfonts, Prev: loopback, Up: Command-line and menu entry commands
|
||
|
||
16.3.45 ls
|
||
----------
|
||
|
||
-- Command: ls [arg ...]
|
||
List devices or files.
|
||
|
||
With no arguments, print all devices known to GRUB.
|
||
|
||
If the argument is a device name enclosed in parentheses (*note
|
||
Device syntax::), then print the name of the filesystem of that
|
||
device.
|
||
|
||
If the argument is a directory given as an absolute file name
|
||
(*note File name syntax::), then list the contents of that
|
||
directory.
|
||
|
||
|
||
File: grub.info, Node: lsfonts, Next: lsmod, Prev: ls, Up: Command-line and menu entry commands
|
||
|
||
16.3.46 lsfonts
|
||
---------------
|
||
|
||
-- Command: lsfonts
|
||
List loaded fonts.
|
||
|
||
|
||
File: grub.info, Node: lsmod, Next: md5sum, Prev: lsfonts, Up: Command-line and menu entry commands
|
||
|
||
16.3.47 lsmod
|
||
-------------
|
||
|
||
-- Command: lsmod
|
||
Show list of loaded modules.
|
||
|
||
|
||
File: grub.info, Node: md5sum, Next: module, Prev: lsmod, Up: Command-line and menu entry commands
|
||
|
||
16.3.48 md5sum
|
||
--------------
|
||
|
||
-- Command: md5sum arg ...
|
||
Alias for 'hashsum --hash md5 arg ...'. See command 'hashsum'
|
||
(*note hashsum::) for full description.
|
||
|
||
|
||
File: grub.info, Node: module, Next: multiboot, Prev: md5sum, Up: Command-line and menu entry commands
|
||
|
||
16.3.49 module
|
||
--------------
|
||
|
||
-- Command: module [--nounzip] file [arguments]
|
||
Load a module for multiboot kernel image. The rest of the line is
|
||
passed verbatim as the module command line.
|
||
|
||
|
||
File: grub.info, Node: multiboot, Next: nativedisk, Prev: module, Up: Command-line and menu entry commands
|
||
|
||
16.3.50 multiboot
|
||
-----------------
|
||
|
||
-- Command: multiboot [--quirk-bad-kludge]
|
||
[--quirk-modules-after-kernel] file ...
|
||
Load a multiboot kernel image from FILE. The rest of the line is
|
||
passed verbatim as the "kernel command-line". Any module must be
|
||
reloaded after using this command (*note module::).
|
||
|
||
Some kernels have known problems. You need to specify -quirk-* for
|
||
those. -quirk-bad-kludge is a problem seen in several products
|
||
that they include loading kludge information with invalid data in
|
||
ELF file. GRUB prior to 0.97 and some custom builds preferred ELF
|
||
information while 0.97 and GRUB 2 use kludge. Use this option to
|
||
ignore kludge. Known affected systems: old Solaris, SkyOS.
|
||
|
||
-quirk-modules-after-kernel is needed for kernels which load at
|
||
relatively high address e.g. 16MiB mark and can't cope with
|
||
modules stuffed between 1MiB mark and beginning of the kernel.
|
||
Known afftected systems: VMWare.
|
||
|
||
|
||
File: grub.info, Node: nativedisk, Next: normal, Prev: multiboot, Up: Command-line and menu entry commands
|
||
|
||
16.3.51 nativedisk
|
||
------------------
|
||
|
||
-- Command: nativedisk
|
||
Switch from firmware disk drivers to native ones. Really useful
|
||
only on platforms where both firmware and native disk drives are
|
||
available. Currently i386-pc, i386-efi, i386-ieee1275 and
|
||
x86_64-efi.
|
||
|
||
|
||
File: grub.info, Node: normal, Next: normal_exit, Prev: nativedisk, Up: Command-line and menu entry commands
|
||
|
||
16.3.52 normal
|
||
--------------
|
||
|
||
-- Command: normal [file]
|
||
Enter normal mode and display the GRUB menu.
|
||
|
||
In normal mode, commands, filesystem modules, and cryptography
|
||
modules are automatically loaded, and the full GRUB script parser
|
||
is available. Other modules may be explicitly loaded using
|
||
'insmod' (*note insmod::).
|
||
|
||
If a FILE is given, then commands will be read from that file.
|
||
Otherwise, they will be read from '$prefix/grub.cfg' if it exists.
|
||
|
||
'normal' may be called from within normal mode, creating a nested
|
||
environment. It is more usual to use 'configfile' (*note
|
||
configfile::) for this.
|
||
|
||
|
||
File: grub.info, Node: normal_exit, Next: parttool, Prev: normal, Up: Command-line and menu entry commands
|
||
|
||
16.3.53 normal_exit
|
||
-------------------
|
||
|
||
-- Command: normal_exit
|
||
Exit normal mode (*note normal::). If this instance of normal mode
|
||
was not nested within another one, then return to rescue mode.
|
||
|
||
|
||
File: grub.info, Node: parttool, Next: password, Prev: normal_exit, Up: Command-line and menu entry commands
|
||
|
||
16.3.54 parttool
|
||
----------------
|
||
|
||
-- Command: parttool partition commands
|
||
Make various modifications to partition table entries.
|
||
|
||
Each COMMAND is either a boolean option, in which case it must be
|
||
followed with '+' or '-' (with no intervening space) to enable or
|
||
disable that option, or else it takes a value in the form
|
||
'COMMAND=VALUE'.
|
||
|
||
Currently, 'parttool' is only useful on DOS partition tables (also
|
||
known as Master Boot Record, or MBR). On these partition tables,
|
||
the following commands are available:
|
||
|
||
'boot' (boolean)
|
||
When enabled, this makes the selected partition be the active
|
||
(bootable) partition on its disk, clearing the active flag on
|
||
all other partitions. This command is limited to _primary_
|
||
partitions.
|
||
|
||
'type' (value)
|
||
Change the type of an existing partition. The value must be a
|
||
number in the range 0-0xFF (prefix with '0x' to enter it in
|
||
hexadecimal).
|
||
|
||
'hidden' (boolean)
|
||
When enabled, this hides the selected partition by setting the
|
||
"hidden" bit in its partition type code; when disabled,
|
||
unhides the selected partition by clearing this bit. This is
|
||
useful only when booting DOS or Windows and multiple primary
|
||
FAT partitions exist in one disk. See also *note
|
||
DOS/Windows::.
|
||
|
||
|
||
File: grub.info, Node: password, Next: password_pbkdf2, Prev: parttool, Up: Command-line and menu entry commands
|
||
|
||
16.3.55 password
|
||
----------------
|
||
|
||
-- Command: password user clear-password
|
||
Define a user named USER with password CLEAR-PASSWORD. *Note
|
||
Security::.
|
||
|
||
|
||
File: grub.info, Node: password_pbkdf2, Next: play, Prev: password, Up: Command-line and menu entry commands
|
||
|
||
16.3.56 password_pbkdf2
|
||
-----------------------
|
||
|
||
-- Command: password_pbkdf2 user hashed-password
|
||
Define a user named USER with password hash HASHED-PASSWORD. Use
|
||
'grub-mkpasswd-pbkdf2' (*note Invoking grub-mkpasswd-pbkdf2::) to
|
||
generate password hashes. *Note Security::.
|
||
|
||
|
||
File: grub.info, Node: play, Next: probe, Prev: password_pbkdf2, Up: Command-line and menu entry commands
|
||
|
||
16.3.57 play
|
||
------------
|
||
|
||
-- Command: play file | tempo [pitch1 duration1] [pitch2 duration2] ...
|
||
Plays a tune
|
||
|
||
If the argument is a file name (*note File name syntax::), play the
|
||
tune recorded in it. The file format is first the tempo as an
|
||
unsigned 32bit little-endian number, then pairs of unsigned 16bit
|
||
little-endian numbers for pitch and duration pairs.
|
||
|
||
If the arguments are a series of numbers, play the inline tune.
|
||
|
||
The tempo is the base for all note durations. 60 gives a 1-second
|
||
base, 120 gives a half-second base, etc. Pitches are Hz. Set
|
||
pitch to 0 to produce a rest.
|
||
|
||
|
||
File: grub.info, Node: probe, Next: rdmsr, Prev: play, Up: Command-line and menu entry commands
|
||
|
||
16.3.58 probe
|
||
-------------
|
||
|
||
-- Command: probe ['--set' var]
|
||
'--driver'|'--partmap'|'--fs'|'--fs-uuid'|'--label'|'--part-uuid'
|
||
device
|
||
Retrieve device information. If option '--set' is given, assign
|
||
result to variable VAR, otherwise print information on the screen.
|
||
|
||
The option '--part-uuid' is currently only implemented for MSDOS
|
||
and GPT formatted disks.
|
||
|
||
|
||
File: grub.info, Node: rdmsr, Next: read, Prev: probe, Up: Command-line and menu entry commands
|
||
|
||
16.3.59 rdmsr
|
||
-------------
|
||
|
||
-- Command:: rdmsr 0xADDR [-v VARNAME]
|
||
Read a model-specific register at address 0xADDR. If the parameter
|
||
'-v' is used and an environment variable VARNAME is given, set that
|
||
environment variable to the value that was read.
|
||
|
||
Please note that on SMP systems, reading from a MSR that has a
|
||
scope per hardware thread, implies that the value that is returned
|
||
only applies to the particular cpu/core/thread that runs the
|
||
command.
|
||
|
||
Also, if you specify a reserved or unimplemented MSR address, it
|
||
will cause a general protection exception (which is not currently
|
||
being handled) and the system will reboot.
|
||
|
||
|
||
File: grub.info, Node: read, Next: reboot, Prev: rdmsr, Up: Command-line and menu entry commands
|
||
|
||
16.3.60 read
|
||
------------
|
||
|
||
-- Command: read [var]
|
||
Read a line of input from the user. If an environment variable VAR
|
||
is given, set that environment variable to the line of input that
|
||
was read, with no terminating newline.
|
||
|
||
|
||
File: grub.info, Node: reboot, Next: regexp, Prev: read, Up: Command-line and menu entry commands
|
||
|
||
16.3.61 reboot
|
||
--------------
|
||
|
||
-- Command: reboot
|
||
Reboot the computer.
|
||
|
||
|
||
File: grub.info, Node: regexp, Next: rmmod, Prev: reboot, Up: Command-line and menu entry commands
|
||
|
||
16.3.62 regexp
|
||
--------------
|
||
|
||
-- Command: regexp ['--set' [number:]var] regexp string
|
||
Test if regular expression REGEXP matches STRING. Supported
|
||
regular expressions are POSIX.2 Extended Regular Expressions. If
|
||
option '--set' is given, store NUMBERth matched subexpression in
|
||
variable VAR. Subexpressions are numbered in order of their
|
||
opening parentheses starting from '1'. NUMBER defaults to '1'.
|
||
|
||
|
||
File: grub.info, Node: rmmod, Next: save_env, Prev: regexp, Up: Command-line and menu entry commands
|
||
|
||
16.3.63 rmmod
|
||
-------------
|
||
|
||
-- Command: rmmod module
|
||
Remove a loaded MODULE.
|
||
|
||
|
||
File: grub.info, Node: save_env, Next: search, Prev: rmmod, Up: Command-line and menu entry commands
|
||
|
||
16.3.64 save_env
|
||
----------------
|
||
|
||
-- Command: save_env ['--file' file] var ...
|
||
Save the named variables from the environment to the environment
|
||
block file. *Note Environment block::.
|
||
|
||
The '--file' option overrides the default location of the
|
||
environment block.
|
||
|
||
This command will operate successfully even when environment
|
||
variable 'check_signatures' is set to 'enforce' (*note
|
||
check_signatures::), since it writes to disk and does not alter the
|
||
behavior of GRUB based on any contents of disk that have been read.
|
||
It is possible to modify a digitally signed environment block file
|
||
from within GRUB using this command, such that its signature will
|
||
no longer be valid on subsequent boots. Care should be taken in
|
||
such advanced configurations to avoid rendering the system
|
||
unbootable. *Note Using digital signatures::, for more
|
||
information.
|
||
|
||
|
||
File: grub.info, Node: search, Next: sendkey, Prev: save_env, Up: Command-line and menu entry commands
|
||
|
||
16.3.65 search
|
||
--------------
|
||
|
||
-- Command: search ['--file'|'--label'|'--fs-uuid'] ['--set' [var]]
|
||
['--no-floppy'] name
|
||
Search devices by file ('-f', '--file'), filesystem label ('-l',
|
||
'--label'), or filesystem UUID ('-u', '--fs-uuid').
|
||
|
||
If the '--set' option is used, the first device found is set as the
|
||
value of environment variable VAR. The default variable is 'root'.
|
||
|
||
The '--no-floppy' option prevents searching floppy devices, which
|
||
can be slow.
|
||
|
||
The 'search.file', 'search.fs_label', and 'search.fs_uuid' commands
|
||
are aliases for 'search --file', 'search --label', and 'search
|
||
--fs-uuid' respectively.
|
||
|
||
|
||
File: grub.info, Node: sendkey, Next: set, Prev: search, Up: Command-line and menu entry commands
|
||
|
||
16.3.66 sendkey
|
||
---------------
|
||
|
||
-- Command: sendkey
|
||
['--num'|'--caps'|'--scroll'|'--insert'|'--pause'|'--left-shift'|'--right-shift'|'--sysrq'|'--numkey'|'--capskey'|'--scrollkey'|'--insertkey'|'--left-alt'|'--right-alt'|'--left-ctrl'|'--right-ctrl'
|
||
'on'|'off']... ['no-led'] keystroke
|
||
Insert keystrokes into the keyboard buffer when booting. Sometimes
|
||
an operating system or chainloaded boot loader requires particular
|
||
keys to be pressed: for example, one might need to press a
|
||
particular key to enter "safe mode", or when chainloading another
|
||
boot loader one might send keystrokes to it to navigate its menu.
|
||
|
||
You may provide up to 16 keystrokes (the length of the BIOS
|
||
keyboard buffer). Keystroke names may be upper-case or lower-case
|
||
letters, digits, or taken from the following table:
|
||
|
||
Name Key
|
||
-------------------------------------------------------------------
|
||
escape Escape
|
||
exclam !
|
||
at @
|
||
numbersign #
|
||
dollar $
|
||
percent %
|
||
caret ^
|
||
ampersand &
|
||
asterisk *
|
||
parenleft (
|
||
parenright )
|
||
minus -
|
||
underscore _
|
||
equal =
|
||
plus +
|
||
backspace Backspace
|
||
tab Tab
|
||
bracketleft [
|
||
braceleft {
|
||
bracketright ]
|
||
braceright }
|
||
enter Enter
|
||
control press and release Control
|
||
semicolon ;
|
||
colon :
|
||
quote '
|
||
doublequote "
|
||
backquote '
|
||
tilde ~
|
||
shift press and release left Shift
|
||
backslash \
|
||
bar |
|
||
comma ,
|
||
less <
|
||
period .
|
||
greater >
|
||
slash /
|
||
question ?
|
||
rshift press and release right Shift
|
||
alt press and release Alt
|
||
space space bar
|
||
capslock Caps Lock
|
||
F1 F1
|
||
F2 F2
|
||
F3 F3
|
||
F4 F4
|
||
F5 F5
|
||
F6 F6
|
||
F7 F7
|
||
F8 F8
|
||
F9 F9
|
||
F10 F10
|
||
F11 F11
|
||
F12 F12
|
||
num1 1 (numeric keypad)
|
||
num2 2 (numeric keypad)
|
||
num3 3 (numeric keypad)
|
||
num4 4 (numeric keypad)
|
||
num5 5 (numeric keypad)
|
||
num6 6 (numeric keypad)
|
||
num7 7 (numeric keypad)
|
||
num8 8 (numeric keypad)
|
||
num9 9 (numeric keypad)
|
||
num0 0 (numeric keypad)
|
||
numperiod . (numeric keypad)
|
||
numend End (numeric keypad)
|
||
numdown Down (numeric keypad)
|
||
numpgdown Page Down (numeric keypad)
|
||
numleft Left (numeric keypad)
|
||
numcenter 5 with Num Lock inactive (numeric
|
||
keypad)
|
||
numright Right (numeric keypad)
|
||
numhome Home (numeric keypad)
|
||
numup Up (numeric keypad)
|
||
numpgup Page Up (numeric keypad)
|
||
numinsert Insert (numeric keypad)
|
||
numdelete Delete (numeric keypad)
|
||
numasterisk * (numeric keypad)
|
||
numminus - (numeric keypad)
|
||
numplus + (numeric keypad)
|
||
numslash / (numeric keypad)
|
||
numenter Enter (numeric keypad)
|
||
delete Delete
|
||
insert Insert
|
||
home Home
|
||
end End
|
||
pgdown Page Down
|
||
pgup Page Up
|
||
down Down
|
||
up Up
|
||
left Left
|
||
right Right
|
||
|
||
As well as keystrokes, the 'sendkey' command takes various options
|
||
that affect the BIOS keyboard status flags. These options take an
|
||
'on' or 'off' parameter, specifying that the corresponding status
|
||
flag be set or unset; omitting the option for a given status flag
|
||
will leave that flag at its initial state at boot. The '--num',
|
||
'--caps', '--scroll', and '--insert' options emulate setting the
|
||
corresponding mode, while the '--numkey', '--capskey',
|
||
'--scrollkey', and '--insertkey' options emulate pressing and
|
||
holding the corresponding key. The other status flag options are
|
||
self-explanatory.
|
||
|
||
If the '--no-led' option is given, the status flag options will
|
||
have no effect on keyboard LEDs.
|
||
|
||
If the 'sendkey' command is given multiple times, then only the
|
||
last invocation has any effect.
|
||
|
||
Since 'sendkey' manipulates the BIOS keyboard buffer, it may cause
|
||
hangs, reboots, or other misbehaviour on some systems. If the
|
||
operating system or boot loader that runs after GRUB uses its own
|
||
keyboard driver rather than the BIOS keyboard functions, then
|
||
'sendkey' will have no effect.
|
||
|
||
This command is only available on PC BIOS systems.
|
||
|
||
|
||
File: grub.info, Node: set, Next: sha1sum, Prev: sendkey, Up: Command-line and menu entry commands
|
||
|
||
16.3.67 set
|
||
-----------
|
||
|
||
-- Command: set [envvar=value]
|
||
Set the environment variable ENVVAR to VALUE. If invoked with no
|
||
arguments, print all environment variables with their values.
|
||
|
||
|
||
File: grub.info, Node: sha1sum, Next: sha256sum, Prev: set, Up: Command-line and menu entry commands
|
||
|
||
16.3.68 sha1sum
|
||
---------------
|
||
|
||
-- Command: sha1sum arg ...
|
||
Alias for 'hashsum --hash sha1 arg ...'. See command 'hashsum'
|
||
(*note hashsum::) for full description.
|
||
|
||
|
||
File: grub.info, Node: sha256sum, Next: sha512sum, Prev: sha1sum, Up: Command-line and menu entry commands
|
||
|
||
16.3.69 sha256sum
|
||
-----------------
|
||
|
||
-- Command: sha256sum arg ...
|
||
Alias for 'hashsum --hash sha256 arg ...'. See command 'hashsum'
|
||
(*note hashsum::) for full description.
|
||
|
||
|
||
File: grub.info, Node: sha512sum, Next: sleep, Prev: sha256sum, Up: Command-line and menu entry commands
|
||
|
||
16.3.70 sha512sum
|
||
-----------------
|
||
|
||
-- Command: sha512sum arg ...
|
||
Alias for 'hashsum --hash sha512 arg ...'. See command 'hashsum'
|
||
(*note hashsum::) for full description.
|
||
|
||
|
||
File: grub.info, Node: sleep, Next: smbios, Prev: sha512sum, Up: Command-line and menu entry commands
|
||
|
||
16.3.71 sleep
|
||
-------------
|
||
|
||
-- Command: sleep ['--verbose'] ['--interruptible'] count
|
||
Sleep for COUNT seconds. If option '--interruptible' is given,
|
||
allow pressing <ESC>, <F4> or holding down <SHIFT> to interrupt
|
||
sleep. With '--verbose' show countdown of remaining seconds. Exit
|
||
code is set to 0 if timeout expired and to 1 if timeout was
|
||
interrupted using any of the mentioned keys.
|
||
|
||
|
||
File: grub.info, Node: smbios, Next: source, Prev: sleep, Up: Command-line and menu entry commands
|
||
|
||
16.3.72 smbios
|
||
--------------
|
||
|
||
-- Command: smbios ['--type' TYPE] ['--handle' HANDLE] ['--match'
|
||
MATCH] ('--get-byte' | '--get-word' | '--get-dword' |
|
||
'--get-qword' | '--get-string' | '--get-uuid') OFFSET ['--set'
|
||
VARIABLE]
|
||
Retrieve SMBIOS information.
|
||
|
||
The 'smbios' command returns the value of a field in an SMBIOS
|
||
structure. The following options determine which structure to
|
||
select.
|
||
|
||
* Specifying '--type' will select structures with a matching
|
||
TYPE. The type can be any integer from 0 to 255.
|
||
* Specifying '--handle' will select structures with a matching
|
||
HANDLE. The handle can be any integer from 0 to 65535.
|
||
* Specifying '--match' will select structure number MATCH in the
|
||
filtered list of structures; e.g. 'smbios --type 4 --match 2'
|
||
will select the second Process Information (Type 4) structure.
|
||
The list is always ordered the same as the hardware's SMBIOS
|
||
table. The match number must be a positive integer. If
|
||
unspecified, the first matching structure will be selected.
|
||
|
||
The remaining options determine which field in the selected SMBIOS
|
||
structure to return. Only one of these options may be specified at
|
||
a time.
|
||
|
||
* When given '--get-byte', return the value of the byte at
|
||
OFFSET bytes into the selected SMBIOS structure. It will be
|
||
formatted as an unsigned decimal integer.
|
||
* When given '--get-word', return the value of the word (two
|
||
bytes) at OFFSET bytes into the selected SMBIOS structure. It
|
||
will be formatted as an unsigned decimal integer.
|
||
* When given '--get-dword', return the value of the dword (four
|
||
bytes) at OFFSET bytes into the selected SMBIOS structure. It
|
||
will be formatted as an unsigned decimal integer.
|
||
* When given '--get-qword', return the value of the qword (eight
|
||
bytes) at OFFSET bytes into the selected SMBIOS structure. It
|
||
will be formatted as an unsigned decimal integer.
|
||
* When given '--get-string', return the string with its index
|
||
found at OFFSET bytes into the selected SMBIOS structure.
|
||
* When given '--get-uuid', return the value of the UUID (sixteen
|
||
bytes) at OFFSET bytes into the selected SMBIOS structure. It
|
||
will be formatted as lower-case hyphenated hexadecimal digits,
|
||
with the first three fields as little-endian, and the rest
|
||
printed byte-by-byte.
|
||
|
||
The default action is to print the value of the requested field to
|
||
the console, but a variable name can be specified with '--set' to
|
||
store the value instead of printing it.
|
||
|
||
For example, this will store and then display the system
|
||
manufacturer's name.
|
||
|
||
smbios --type 1 --get-string 4 --set system_manufacturer
|
||
echo $system_manufacturer
|
||
|
||
|
||
File: grub.info, Node: source, Next: test, Prev: smbios, Up: Command-line and menu entry commands
|
||
|
||
16.3.73 source
|
||
--------------
|
||
|
||
-- Command: source file
|
||
Read FILE as a configuration file, as if its contents had been
|
||
incorporated directly into the sourcing file. Unlike 'configfile'
|
||
(*note configfile::), this executes the contents of FILE without
|
||
changing context: any environment variable changes made by the
|
||
commands in FILE will be preserved after 'source' returns, and the
|
||
menu will not be shown immediately.
|
||
|
||
|
||
File: grub.info, Node: test, Next: true, Prev: source, Up: Command-line and menu entry commands
|
||
|
||
16.3.74 test
|
||
------------
|
||
|
||
-- Command: test expression
|
||
Evaluate EXPRESSION and return zero exit status if result is true,
|
||
non zero status otherwise.
|
||
|
||
EXPRESSION is one of:
|
||
|
||
STRING1 '==' STRING2
|
||
the strings are equal
|
||
STRING1 '!=' STRING2
|
||
the strings are not equal
|
||
STRING1 '<' STRING2
|
||
STRING1 is lexicographically less than STRING2
|
||
STRING1 '<=' STRING2
|
||
STRING1 is lexicographically less or equal than STRING2
|
||
STRING1 '>' STRING2
|
||
STRING1 is lexicographically greater than STRING2
|
||
STRING1 '>=' STRING2
|
||
STRING1 is lexicographically greater or equal than STRING2
|
||
INTEGER1 '-eq' INTEGER2
|
||
INTEGER1 is equal to INTEGER2
|
||
INTEGER1 '-ge' INTEGER2
|
||
INTEGER1 is greater than or equal to INTEGER2
|
||
INTEGER1 '-gt' INTEGER2
|
||
INTEGER1 is greater than INTEGER2
|
||
INTEGER1 '-le' INTEGER2
|
||
INTEGER1 is less than or equal to INTEGER2
|
||
INTEGER1 '-lt' INTEGER2
|
||
INTEGER1 is less than INTEGER2
|
||
INTEGER1 '-ne' INTEGER2
|
||
INTEGER1 is not equal to INTEGER2
|
||
PREFIXINTEGER1 '-pgt' PREFIXINTEGER2
|
||
INTEGER1 is greater than INTEGER2 after stripping off common
|
||
non-numeric PREFIX.
|
||
PREFIXINTEGER1 '-plt' PREFIXINTEGER2
|
||
INTEGER1 is less than INTEGER2 after stripping off common
|
||
non-numeric PREFIX.
|
||
FILE1 '-nt' FILE2
|
||
FILE1 is newer than FILE2 (modification time). Optionally
|
||
numeric BIAS may be directly appended to '-nt' in which case
|
||
it is added to the first file modification time.
|
||
FILE1 '-ot' FILE2
|
||
FILE1 is older than FILE2 (modification time). Optionally
|
||
numeric BIAS may be directly appended to '-ot' in which case
|
||
it is added to the first file modification time.
|
||
'-d' FILE
|
||
FILE exists and is a directory
|
||
'-e' FILE
|
||
FILE exists
|
||
'-f' FILE
|
||
FILE exists and is not a directory
|
||
'-s' FILE
|
||
FILE exists and has a size greater than zero
|
||
'-n' STRING
|
||
the length of STRING is nonzero
|
||
STRING
|
||
STRING is equivalent to '-n STRING'
|
||
'-z' STRING
|
||
the length of STRING is zero
|
||
'(' EXPRESSION ')'
|
||
EXPRESSION is true
|
||
'!' EXPRESSION
|
||
EXPRESSION is false
|
||
EXPRESSION1 '-a' EXPRESSION2
|
||
both EXPRESSION1 and EXPRESSION2 are true
|
||
EXPRESSION1 EXPRESSION2
|
||
both EXPRESSION1 and EXPRESSION2 are true. This syntax is not
|
||
POSIX-compliant and is not recommended.
|
||
EXPRESSION1 '-o' EXPRESSION2
|
||
either EXPRESSION1 or EXPRESSION2 is true
|
||
|
||
|
||
File: grub.info, Node: true, Next: trust, Prev: test, Up: Command-line and menu entry commands
|
||
|
||
16.3.75 true
|
||
------------
|
||
|
||
-- Command: true
|
||
Do nothing, successfully. This is mainly useful in control
|
||
constructs such as 'if' and 'while' (*note Shell-like scripting::).
|
||
|
||
|
||
File: grub.info, Node: trust, Next: unset, Prev: true, Up: Command-line and menu entry commands
|
||
|
||
16.3.76 trust
|
||
-------------
|
||
|
||
-- Command: trust ['--skip-sig'] pubkey_file
|
||
Read public key from PUBKEY_FILE and add it to GRUB's internal list
|
||
of trusted public keys. These keys are used to validate digital
|
||
signatures when environment variable 'check_signatures' is set to
|
||
'enforce'. Note that if 'check_signatures' is set to 'enforce'
|
||
when 'trust' executes, then PUBKEY_FILE must itself be properly
|
||
signed. The '--skip-sig' option can be used to disable
|
||
signature-checking when reading PUBKEY_FILE itself. It is expected
|
||
that '--skip-sig' is useful for testing and manual booting. *Note
|
||
Using digital signatures::, for more information.
|
||
|
||
|
||
File: grub.info, Node: unset, Next: verify_detached, Prev: trust, Up: Command-line and menu entry commands
|
||
|
||
16.3.77 unset
|
||
-------------
|
||
|
||
-- Command: unset envvar
|
||
Unset the environment variable ENVVAR.
|
||
|
||
|
||
File: grub.info, Node: verify_detached, Next: videoinfo, Prev: unset, Up: Command-line and menu entry commands
|
||
|
||
16.3.78 verify_detached
|
||
-----------------------
|
||
|
||
-- Command: verify_detached ['--skip-sig'] file signature_file
|
||
[pubkey_file]
|
||
Verifies a GPG-style detached signature, where the signed file is
|
||
FILE, and the signature itself is in file SIGNATURE_FILE.
|
||
Optionally, a specific public key to use can be specified using
|
||
PUBKEY_FILE. When environment variable 'check_signatures' is set
|
||
to 'enforce', then PUBKEY_FILE must itself be properly signed by an
|
||
already-trusted key. An unsigned PUBKEY_FILE can be loaded by
|
||
specifying '--skip-sig'. If PUBKEY_FILE is omitted, then public
|
||
keys from GRUB's trusted keys (*note list_trusted::, *note trust::,
|
||
and *note distrust::) are tried.
|
||
|
||
Exit code '$?' is set to 0 if the signature validates successfully.
|
||
If validation fails, it is set to a non-zero value. *Note Using
|
||
digital signatures::, for more information.
|
||
|
||
|
||
File: grub.info, Node: videoinfo, Next: wrmsr, Prev: verify_detached, Up: Command-line and menu entry commands
|
||
|
||
16.3.79 videoinfo
|
||
-----------------
|
||
|
||
-- Command: videoinfo [[WxH]xD]
|
||
List available video modes. If resolution is given, show only
|
||
matching modes.
|
||
|
||
|
||
File: grub.info, Node: wrmsr, Next: xen_hypervisor, Prev: videoinfo, Up: Command-line and menu entry commands
|
||
|
||
16.3.80 wrmsr
|
||
-------------
|
||
|
||
-- Command:: wrmsr 0xADDR 0xVALUE
|
||
Write a 0xVALUE to a model-specific register at address 0xADDR.
|
||
|
||
Please note that on SMP systems, writing to a MSR that has a scope
|
||
per hardware thread, implies that the value that is written only
|
||
applies to the particular cpu/core/thread that runs the command.
|
||
|
||
Also, if you specify a reserved or unimplemented MSR address, it
|
||
will cause a general protection exception (which is not currently
|
||
being handled) and the system will reboot.
|
||
|
||
Note: The command is not allowed when lockdown is enforced (*note
|
||
Lockdown::). This is done to prevent subverting various security
|
||
mechanisms.
|
||
|
||
|
||
File: grub.info, Node: xen_hypervisor, Next: xen_module, Prev: wrmsr, Up: Command-line and menu entry commands
|
||
|
||
16.3.81 xen_hypervisor
|
||
----------------------
|
||
|
||
-- Command: xen_hypervisor file [arguments] ...
|
||
Load a Xen hypervisor binary from FILE. The rest of the line is
|
||
passed verbatim as the "kernel command-line". Any other binaries
|
||
must be reloaded after using this command. This command is only
|
||
available on AArch64 systems.
|
||
|
||
|
||
File: grub.info, Node: xen_module, Prev: xen_hypervisor, Up: Command-line and menu entry commands
|
||
|
||
16.3.82 xen_module
|
||
------------------
|
||
|
||
-- Command: xen_module [--nounzip] file [arguments]
|
||
Load a module for xen hypervisor at the booting process of xen.
|
||
The rest of the line is passed verbatim as the module command line.
|
||
Modules should be loaded in the following order: - dom0 kernel
|
||
image - dom0 ramdisk if present - XSM policy if present This
|
||
command is only available on AArch64 systems.
|
||
|
||
|
||
File: grub.info, Node: Networking commands, Prev: Command-line and menu entry commands, Up: Commands
|
||
|
||
16.4 The list of networking commands
|
||
====================================
|
||
|
||
* Menu:
|
||
|
||
* net_add_addr:: Add a network address
|
||
* net_add_dns:: Add a DNS server
|
||
* net_add_route:: Add routing entry
|
||
* net_bootp:: Perform a bootp/DHCP autoconfiguration
|
||
* net_del_addr:: Remove IP address from interface
|
||
* net_del_dns:: Remove a DNS server
|
||
* net_del_route:: Remove a route entry
|
||
* net_dhcp:: Perform a DHCP autoconfiguration
|
||
* net_get_dhcp_option:: Retrieve DHCP options
|
||
* net_ipv6_autoconf:: Perform IPv6 autoconfiguration
|
||
* net_ls_addr:: List interfaces
|
||
* net_ls_cards:: List network cards
|
||
* net_ls_dns:: List DNS servers
|
||
* net_ls_routes:: List routing entries
|
||
* net_nslookup:: Perform a DNS lookup
|
||
|
||
|
||
File: grub.info, Node: net_add_addr, Next: net_add_dns, Up: Networking commands
|
||
|
||
16.4.1 net_add_addr
|
||
-------------------
|
||
|
||
-- Command: net_add_addr INTERFACE CARD ADDRESS
|
||
Configure additional network INTERFACE with ADDRESS on a network
|
||
CARD. ADDRESS can be either IP in dotted decimal notation, or
|
||
symbolic name which is resolved using DNS lookup. If successful,
|
||
this command also adds local link routing entry to the default
|
||
subnet of ADDRESS with name INTERFACE':local' via INTERFACE.
|
||
|
||
|
||
File: grub.info, Node: net_add_dns, Next: net_add_route, Prev: net_add_addr, Up: Networking commands
|
||
|
||
16.4.2 net_add_dns
|
||
------------------
|
||
|
||
-- Command: net_add_dns SERVER
|
||
Resolve SERVER IP address and add to the list of DNS servers used
|
||
during name lookup.
|
||
|
||
|
||
File: grub.info, Node: net_add_route, Next: net_bootp, Prev: net_add_dns, Up: Networking commands
|
||
|
||
16.4.3 net_add_route
|
||
--------------------
|
||
|
||
-- Command: net_add_route SHORTNAME IP[/PREFIX] [INTERFACE | 'gw'
|
||
GATEWAY]
|
||
Add route to network with address IP as modified by PREFIX via
|
||
either local INTERFACE or GATEWAY. PREFIX is optional and defaults
|
||
to 32 for IPv4 address and 128 for IPv6 address. Route is
|
||
identified by SHORTNAME which can be used to remove it (*note
|
||
net_del_route::).
|
||
|
||
|
||
File: grub.info, Node: net_bootp, Next: net_del_addr, Prev: net_add_route, Up: Networking commands
|
||
|
||
16.4.4 net_bootp
|
||
----------------
|
||
|
||
-- Command: net_bootp [CARD]
|
||
Alias for net_dhcp, for compatibility with older Grub versions.
|
||
Will perform the same DHCP handshake with potential fallback to
|
||
BOOTP as the net_dhcp command (*note net_dhcp::).
|
||
|
||
|
||
File: grub.info, Node: net_del_addr, Next: net_del_dns, Prev: net_bootp, Up: Networking commands
|
||
|
||
16.4.5 net_del_addr
|
||
-------------------
|
||
|
||
-- Command: net_del_addr INTERFACE
|
||
Remove configured INTERFACE with associated address.
|
||
|
||
|
||
File: grub.info, Node: net_del_dns, Next: net_del_route, Prev: net_del_addr, Up: Networking commands
|
||
|
||
16.4.6 net_del_dns
|
||
------------------
|
||
|
||
-- Command: net_del_dns ADDRESS
|
||
Remove ADDRESS from list of servers used during name lookup.
|
||
|
||
|
||
File: grub.info, Node: net_del_route, Next: net_dhcp, Prev: net_del_dns, Up: Networking commands
|
||
|
||
16.4.7 net_del_route
|
||
--------------------
|
||
|
||
-- Command: net_del_route SHORTNAME
|
||
Remove route entry identified by SHORTNAME.
|
||
|
||
|
||
File: grub.info, Node: net_dhcp, Next: net_get_dhcp_option, Prev: net_del_route, Up: Networking commands
|
||
|
||
16.4.8 net_dhcp
|
||
---------------
|
||
|
||
-- Command: net_dhcp [CARD]
|
||
Perform configuration of CARD using DHCP protocol. If no card name
|
||
is specified, try to configure all existing cards. Falls back to
|
||
the BOOTP protocol, if needed. If configuration was successful,
|
||
interface with name CARD':dhcp' and configured address is added to
|
||
CARD. Additionally the following DHCP options are recognized and
|
||
processed:
|
||
|
||
'1 (Subnet Mask)'
|
||
Used to calculate network local routing entry for interface
|
||
CARD':dhcp'.
|
||
'3 (Router)'
|
||
Adds default route entry with the name CARD':dhcp:default' via
|
||
gateway from DHCP option. Note that only option with single
|
||
route is accepted.
|
||
'6 (Domain Name Server)'
|
||
Adds all servers from option value to the list of servers used
|
||
during name resolution.
|
||
'12 (Host Name)'
|
||
Sets environment variable 'net_'<CARD>'_dhcp_hostname' (*note
|
||
net_<INTERFACE>_hostname::) to the value of option.
|
||
'15 (Domain Name)'
|
||
Sets environment variable 'net_'<CARD>'_dhcp_domain' (*note
|
||
net_<INTERFACE>_domain::) to the value of option.
|
||
'17 (Root Path)'
|
||
Sets environment variable 'net_'<CARD>'_dhcp_rootpath' (*note
|
||
net_<INTERFACE>_rootpath::) to the value of option.
|
||
'18 (Extensions Path)'
|
||
Sets environment variable 'net_'<CARD>'_dhcp_extensionspath'
|
||
(*note net_<INTERFACE>_extensionspath::) to the value of
|
||
option.
|
||
'66 (TFTP Server Name)'
|
||
Sets environment variable 'net_'<CARD>'_dhcp_server_name'
|
||
(*note net_<INTERFACE>_dhcp_server_name::) to the value of
|
||
option.
|
||
'67 (Filename)'
|
||
Sets environment variable 'net_'<CARD>'_boot_file' (*note
|
||
net_<INTERFACE>_boot_file::) to the value of option.
|
||
|
||
|
||
File: grub.info, Node: net_get_dhcp_option, Next: net_ipv6_autoconf, Prev: net_dhcp, Up: Networking commands
|
||
|
||
16.4.9 net_get_dhcp_option
|
||
--------------------------
|
||
|
||
-- Command: net_get_dhcp_option VAR INTERFACE NUMBER TYPE
|
||
Request DHCP option NUMBER of TYPE via INTERFACE. TYPE can be one
|
||
of 'string', 'number' or 'hex'. If option is found, assign its
|
||
value to variable VAR. Values of types 'number' and 'hex' are
|
||
converted to string representation.
|
||
|
||
|
||
File: grub.info, Node: net_ipv6_autoconf, Next: net_ls_addr, Prev: net_get_dhcp_option, Up: Networking commands
|
||
|
||
16.4.10 net_ipv6_autoconf
|
||
-------------------------
|
||
|
||
-- Command: net_ipv6_autoconf [CARD]
|
||
Perform IPv6 autoconfiguration by adding to the CARD interface with
|
||
name CARD':link' and link local MAC-based address. If no card is
|
||
specified, perform autoconfiguration for all existing cards.
|
||
|
||
|
||
File: grub.info, Node: net_ls_addr, Next: net_ls_cards, Prev: net_ipv6_autoconf, Up: Networking commands
|
||
|
||
16.4.11 net_ls_addr
|
||
-------------------
|
||
|
||
-- Command: net_ls_addr
|
||
List all configured interfaces with their MAC and IP addresses.
|
||
|
||
|
||
File: grub.info, Node: net_ls_cards, Next: net_ls_dns, Prev: net_ls_addr, Up: Networking commands
|
||
|
||
16.4.12 net_ls_cards
|
||
--------------------
|
||
|
||
-- Command: net_ls_cards
|
||
List all detected network cards with their MAC address.
|
||
|
||
|
||
File: grub.info, Node: net_ls_dns, Next: net_ls_routes, Prev: net_ls_cards, Up: Networking commands
|
||
|
||
16.4.13 net_ls_dns
|
||
------------------
|
||
|
||
-- Command: net_ls_dns
|
||
List addresses of DNS servers used during name lookup.
|
||
|
||
|
||
File: grub.info, Node: net_ls_routes, Next: net_nslookup, Prev: net_ls_dns, Up: Networking commands
|
||
|
||
16.4.14 net_ls_routes
|
||
---------------------
|
||
|
||
-- Command: net_ls_routes
|
||
List routing entries.
|
||
|
||
|
||
File: grub.info, Node: net_nslookup, Prev: net_ls_routes, Up: Networking commands
|
||
|
||
16.4.15 net_nslookup
|
||
--------------------
|
||
|
||
-- Command: net_nslookup NAME [SERVER]
|
||
Resolve address of NAME using DNS server SERVER. If no server is
|
||
given, use default list of servers.
|
||
|
||
|
||
File: grub.info, Node: Internationalisation, Next: Security, Prev: Commands, Up: Top
|
||
|
||
17 Internationalisation
|
||
***********************
|
||
|
||
17.1 Charset
|
||
============
|
||
|
||
GRUB uses UTF-8 internally other than in rendering where some
|
||
GRUB-specific appropriate representation is used. All text files
|
||
(including config) are assumed to be encoded in UTF-8.
|
||
|
||
17.2 Filesystems
|
||
================
|
||
|
||
NTFS, JFS, UDF, HFS+, exFAT, long filenames in FAT, Joliet part of
|
||
ISO9660 are treated as UTF-16 as per specification. AFS and BFS are
|
||
read as UTF-8, again according to specification. BtrFS, cpio, tar,
|
||
squash4, minix, minix2, minix3, ROMFS, ReiserFS, XFS, ext2, ext3, ext4,
|
||
FAT (short names), F2FS, RockRidge part of ISO9660, nilfs2, UFS1, UFS2
|
||
and ZFS are assumed to be UTF-8. This might be false on systems
|
||
configured with legacy charset but as long as the charset used is
|
||
superset of ASCII you should be able to access ASCII-named files. And
|
||
it's recommended to configure your system to use UTF-8 to access the
|
||
filesystem, convmv may help with migration. ISO9660 (plain) filenames
|
||
are specified as being ASCII or being described with unspecified escape
|
||
sequences. GRUB assumes that the ISO9660 names are UTF-8 (since any
|
||
ASCII is valid UTF-8). There are some old CD-ROMs which use CP437 in
|
||
non-compliant way. You're still able to access files with names
|
||
containing only ASCII characters on such filesystems though. You're
|
||
also able to access any file if the filesystem contains valid Joliet
|
||
(UTF-16) or RockRidge (UTF-8). AFFS, SFS and HFS never use unicode and
|
||
GRUB assumes them to be in Latin1, Latin1 and MacRoman respectively.
|
||
GRUB handles filesystem case-insensitivity however no attempt is
|
||
performed at case conversion of international characters so e.g. a file
|
||
named lowercase greek alpha is treated as different from the one named
|
||
as uppercase alpha. The filesystems in questions are NTFS (except POSIX
|
||
namespace), HFS+ (configurable at mkfs time, default insensitive), SFS
|
||
(configurable at mkfs time, default insensitive), JFS (configurable at
|
||
mkfs time, default sensitive), HFS, AFFS, FAT, exFAT and ZFS
|
||
(configurable on per-subvolume basis by property "casesensitivity",
|
||
default sensitive). On ZFS subvolumes marked as case insensitive files
|
||
containing lowercase international characters are inaccessible. Also
|
||
like all supported filesystems except HFS+ and ZFS (configurable on
|
||
per-subvolume basis by property "normalization", default none) GRUB
|
||
makes no attempt at check of canonical equivalence so a file name
|
||
u-diaresis is treated as distinct from u+combining diaresis. This
|
||
however means that in order to access file on HFS+ its name must be
|
||
specified in normalisation form D. On normalized ZFS subvolumes
|
||
filenames out of normalisation are inaccessible.
|
||
|
||
17.3 Output terminal
|
||
====================
|
||
|
||
Firmware output console "console" on ARC and IEEE1275 are limited to
|
||
ASCII.
|
||
|
||
BIOS firmware console and VGA text are limited to ASCII and some
|
||
pseudographics.
|
||
|
||
None of above mentioned is appropriate for displaying international
|
||
and any unsupported character is replaced with question mark except
|
||
pseudographics which we attempt to approximate with ASCII.
|
||
|
||
EFI console on the other hand nominally supports UTF-16 but actual
|
||
language coverage depends on firmware and may be very limited.
|
||
|
||
The encoding used on serial can be chosen with 'terminfo' as either
|
||
ASCII, UTF-8 or "visual UTF-8". Last one is against the specification
|
||
but results in correct rendering of right-to-left on some readers which
|
||
don't have own bidi implementation.
|
||
|
||
On emu GRUB checks if charset is UTF-8 and uses it if so and uses
|
||
ASCII otherwise.
|
||
|
||
When using gfxterm or gfxmenu GRUB itself is responsible for
|
||
rendering the text. In this case GRUB is limited by loaded fonts. If
|
||
fonts contain all required characters then bidirectional text, cursive
|
||
variants and combining marks other than enclosing, half (e.g. left half
|
||
tilde or combining overline) and double ones. Ligatures aren't
|
||
supported though. This should cover European, Middle Eastern (if you
|
||
don't mind lack of lam-alif ligature in Arabic) and East Asian scripts.
|
||
Notable unsupported scripts are Brahmic family and derived as well as
|
||
Mongolian, Tifinagh, Korean Jamo (precomposed characters have no
|
||
problem) and tonal writing (2e5-2e9). GRUB also ignores deprecated (as
|
||
specified in Unicode) characters (e.g. tags). GRUB also doesn't handle
|
||
so called "annotation characters" If you can complete either of two
|
||
lists or, better, propose a patch to improve rendering, please contact
|
||
developer team.
|
||
|
||
17.4 Input terminal
|
||
===================
|
||
|
||
Firmware console on BIOS, IEEE1275 and ARC doesn't allow you to enter
|
||
non-ASCII characters. EFI specification allows for such but author is
|
||
unaware of any actual implementations. Serial input is currently
|
||
limited for latin1 (unlikely to change). Own keyboard implementations
|
||
(at_keyboard and usb_keyboard) supports any key but work on
|
||
one-char-per-keystroke. So no dead keys or advanced input method. Also
|
||
there is no keymap change hotkey. In practice it makes difficult to
|
||
enter any text using non-Latin alphabet. Moreover all current input
|
||
consumers are limited to ASCII.
|
||
|
||
17.5 Gettext
|
||
============
|
||
|
||
GRUB supports being translated. For this you need to have language *.mo
|
||
files in $prefix/locale, load gettext module and set "lang" variable.
|
||
|
||
17.6 Regexp
|
||
===========
|
||
|
||
Regexps work on unicode characters, however no attempt at checking
|
||
cannonical equivalence has been made. Moreover the classes like
|
||
[:alpha:] match only ASCII subset.
|
||
|
||
17.7 Other
|
||
==========
|
||
|
||
Currently GRUB always uses YEAR-MONTH-DAY HOUR:MINUTE:SECOND [WEEKDAY]
|
||
24-hour datetime format but weekdays are translated. GRUB always uses
|
||
the decimal number format with [0-9] as digits and . as descimal
|
||
separator and no group separator. IEEE1275 aliases are matched
|
||
case-insensitively except non-ASCII which is matched as binary. Similar
|
||
behaviour is for matching OSBundleRequired. Since IEEE1275 aliases and
|
||
OSBundleRequired don't contain any non-ASCII it should never be a
|
||
problem in practice. Case-sensitive identifiers are matched as raw
|
||
strings, no canonical equivalence check is performed. Case-insenstive
|
||
identifiers are matched as RAW but additionally [a-z] is equivalent to
|
||
[A-Z]. GRUB-defined identifiers use only ASCII and so should
|
||
user-defined ones. Identifiers containing non-ASCII may work but aren't
|
||
supported. Only the ASCII space characters (space U+0020, tab U+000b,
|
||
CR U+000d and LF U+000a) are recognised. Other unicode space characters
|
||
aren't a valid field separator. 'test' (*note test::) tests <, >, <=,
|
||
>=, -pgt and -plt compare the strings in the lexicographical order of
|
||
unicode codepoints, replicating the behaviour of test from coreutils.
|
||
environment variables and commands are listed in the same order.
|
||
|
||
|
||
File: grub.info, Node: Security, Next: Platform limitations, Prev: Internationalisation, Up: Top
|
||
|
||
18 Security
|
||
***********
|
||
|
||
* Menu:
|
||
|
||
* Authentication and authorisation:: Users and access control
|
||
* Using digital signatures:: Booting digitally signed code
|
||
* UEFI secure boot and shim:: Booting digitally signed PE files
|
||
* Secure Boot Advanced Targeting:: Embedded information for generation number based revocation
|
||
* Measured Boot:: Measuring boot components
|
||
* Lockdown:: Lockdown when booting on a secure setup
|
||
|
||
|
||
File: grub.info, Node: Authentication and authorisation, Next: Using digital signatures, Up: Security
|
||
|
||
18.1 Authentication and authorisation in GRUB
|
||
=============================================
|
||
|
||
By default, the boot loader interface is accessible to anyone with
|
||
physical access to the console: anyone can select and edit any menu
|
||
entry, and anyone can get direct access to a GRUB shell prompt. For
|
||
most systems, this is reasonable since anyone with direct physical
|
||
access has a variety of other ways to gain full access, and requiring
|
||
authentication at the boot loader level would only serve to make it
|
||
difficult to recover broken systems.
|
||
|
||
However, in some environments, such as kiosks, it may be appropriate
|
||
to lock down the boot loader to require authentication before performing
|
||
certain operations.
|
||
|
||
The 'password' (*note password::) and 'password_pbkdf2' (*note
|
||
password_pbkdf2::) commands can be used to define users, each of which
|
||
has an associated password. 'password' sets the password in plain text,
|
||
requiring 'grub.cfg' to be secure; 'password_pbkdf2' sets the password
|
||
hashed using the Password-Based Key Derivation Function (RFC 2898),
|
||
requiring the use of 'grub-mkpasswd-pbkdf2' (*note Invoking
|
||
grub-mkpasswd-pbkdf2::) to generate password hashes.
|
||
|
||
In order to enable authentication support, the 'superusers'
|
||
environment variable must be set to a list of usernames, separated by
|
||
any of spaces, commas, semicolons, pipes, or ampersands. Superusers are
|
||
permitted to use the GRUB command line, edit menu entries, and execute
|
||
any menu entry. If 'superusers' is set, then use of the command line
|
||
and editing of menu entries are automatically restricted to superusers.
|
||
Setting 'superusers' to empty string effectively disables both access to
|
||
CLI and editing of menu entries. Note: The environment variable needs
|
||
to be exported to also affect the section defined by the 'submenu'
|
||
command (*note submenu::).
|
||
|
||
Other users may be allowed to execute specific menu entries by giving
|
||
a list of usernames (as above) using the '--users' option to the
|
||
'menuentry' command (*note menuentry::). If the '--unrestricted' option
|
||
is used for a menu entry, then that entry is unrestricted. If the
|
||
'--users' option is not used for a menu entry, then that only superusers
|
||
are able to use it.
|
||
|
||
Putting this together, a typical 'grub.cfg' fragment might look like
|
||
this:
|
||
|
||
set superusers="root"
|
||
password_pbkdf2 root grub.pbkdf2.sha512.10000.biglongstring
|
||
password user1 insecure
|
||
|
||
menuentry "May be run by any user" --unrestricted {
|
||
set root=(hd0,1)
|
||
linux /vmlinuz
|
||
}
|
||
|
||
menuentry "Superusers only" --users "" {
|
||
set root=(hd0,1)
|
||
linux /vmlinuz single
|
||
}
|
||
|
||
menuentry "May be run by user1 or a superuser" --users user1 {
|
||
set root=(hd0,2)
|
||
chainloader +1
|
||
}
|
||
|
||
The 'grub-mkconfig' program does not yet have built-in support for
|
||
generating configuration files with authentication. You can use
|
||
'/etc/grub.d/40_custom' to add simple superuser authentication, by
|
||
adding 'set superusers=' and 'password' or 'password_pbkdf2' commands.
|
||
|
||
|
||
File: grub.info, Node: Using digital signatures, Next: UEFI secure boot and shim, Prev: Authentication and authorisation, Up: Security
|
||
|
||
18.2 Using digital signatures in GRUB
|
||
=====================================
|
||
|
||
GRUB's 'core.img' can optionally provide enforcement that all files
|
||
subsequently read from disk are covered by a valid digital signature.
|
||
This document does *not* cover how to ensure that your platform's
|
||
firmware (e.g., Coreboot) validates 'core.img'.
|
||
|
||
If environment variable 'check_signatures' (*note check_signatures::)
|
||
is set to 'enforce', then every attempt by the GRUB 'core.img' to load
|
||
another file 'foo' implicitly invokes 'verify_detached foo foo.sig'
|
||
(*note verify_detached::). 'foo.sig' must contain a valid digital
|
||
signature over the contents of 'foo', which can be verified with a
|
||
public key currently trusted by GRUB (*note list_trusted::, *note
|
||
trust::, and *note distrust::). If validation fails, then file 'foo'
|
||
cannot be opened. This failure may halt or otherwise impact the boot
|
||
process.
|
||
|
||
An initial trusted public key can be embedded within the GRUB
|
||
'core.img' using the '--pubkey' option to 'grub-install' (*note Invoking
|
||
grub-install::).
|
||
|
||
GRUB uses GPG-style detached signatures (meaning that a file
|
||
'foo.sig' will be produced when file 'foo' is signed), and currently
|
||
supports the DSA and RSA signing algorithms. A signing key can be
|
||
generated as follows:
|
||
|
||
gpg --gen-key
|
||
|
||
An individual file can be signed as follows:
|
||
|
||
gpg --detach-sign /path/to/file
|
||
|
||
For successful validation of all of GRUB's subcomponents and the
|
||
loaded OS kernel, they must all be signed. One way to accomplish this
|
||
is the following (after having already produced the desired 'grub.cfg'
|
||
file, e.g., by running 'grub-mkconfig' (*note Invoking grub-mkconfig::):
|
||
|
||
# Edit /dev/shm/passphrase.txt to contain your signing key's passphrase
|
||
for i in `find /boot -name "*.cfg" -or -name "*.lst" -or \
|
||
-name "*.mod" -or -name "vmlinuz*" -or -name "initrd*" -or \
|
||
-name "grubenv"`;
|
||
do
|
||
gpg --batch --detach-sign --passphrase-fd 0 $i < \
|
||
/dev/shm/passphrase.txt
|
||
done
|
||
shred /dev/shm/passphrase.txt
|
||
|
||
See also: *note check_signatures::, *note verify_detached::, *note
|
||
trust::, *note list_trusted::, *note distrust::, *note load_env::, *note
|
||
save_env::.
|
||
|
||
Note that internally signature enforcement is controlled by setting
|
||
the environment variable 'check_signatures' equal to 'enforce'. Passing
|
||
one or more '--pubkey' options to 'grub-mkimage' implicitly defines
|
||
'check_signatures' equal to 'enforce' in 'core.img' prior to processing
|
||
any configuration files.
|
||
|
||
Note that signature checking does *not* prevent an attacker with
|
||
(serial, physical, ...) console access from dropping manually to the
|
||
GRUB console and executing:
|
||
|
||
set check_signatures=no
|
||
|
||
To prevent this, password-protection (*note Authentication and
|
||
authorisation::) is essential. Note that even with GRUB password
|
||
protection, GRUB itself cannot prevent someone with physical access to
|
||
the machine from altering that machine's firmware (e.g., Coreboot or
|
||
BIOS) configuration to cause the machine to boot from a different
|
||
(attacker-controlled) device. GRUB is at best only one link in a secure
|
||
boot chain.
|
||
|
||
|
||
File: grub.info, Node: UEFI secure boot and shim, Next: Secure Boot Advanced Targeting, Prev: Using digital signatures, Up: Security
|
||
|
||
18.3 UEFI secure boot and shim support
|
||
======================================
|
||
|
||
The GRUB, except the 'chainloader' command, works with the UEFI secure
|
||
boot and the shim. This functionality is provided by the shim_lock
|
||
verifier. It is built into the 'core.img' and is registered if the UEFI
|
||
secure boot is enabled. The 'shim_lock' variable is set to 'y' when
|
||
shim_lock verifier is registered. If it is desired to use UEFI secure
|
||
boot without shim, one can disable shim_lock by disabling shim
|
||
verification with MokSbState UEFI variable or by building grub image
|
||
with '--disable-shim-lock' option.
|
||
|
||
All GRUB modules not stored in the 'core.img', OS kernels, ACPI
|
||
tables, Device Trees, etc. have to be signed, e.g, using PGP.
|
||
Additionally, the commands that can be used to subvert the UEFI secure
|
||
boot mechanism, such as 'iorw' and 'memrw' will not be available when
|
||
the UEFI secure boot is enabled. This is done for security reasons and
|
||
are enforced by the GRUB Lockdown mechanism (*note Lockdown::).
|
||
|
||
|
||
File: grub.info, Node: Secure Boot Advanced Targeting, Next: Measured Boot, Prev: UEFI secure boot and shim, Up: Security
|
||
|
||
18.4 Embedded information for generation number based revocation
|
||
================================================================
|
||
|
||
The Secure Boot Advanced Targeting (SBAT) is a mechanism to allow the
|
||
revocation of components in the boot path by using generation numbers
|
||
embedded into the EFI binaries. The SBAT metadata is located in an
|
||
.sbat data section that has set of UTF-8 strings as comma-separated
|
||
values (CSV). See <https://github.com/rhboot/shim/blob/main/SBAT.md> for
|
||
more details.
|
||
|
||
To add a data section containing the SBAT information into the
|
||
binary, the '--sbat' option of 'grub-mkimage' command should be used.
|
||
The content of a CSV file, encoded with UTF-8, is copied as is to the
|
||
.sbat data section into the generated EFI binary. The CSV file can be
|
||
stored anywhere on the file system.
|
||
|
||
grub-mkimage -O x86_64-efi -o grubx64.efi -p '(tftp)/grub' --sbat sbat.csv efinet tftp
|
||
|
||
|
||
File: grub.info, Node: Measured Boot, Next: Lockdown, Prev: Secure Boot Advanced Targeting, Up: Security
|
||
|
||
18.5 Measuring boot components
|
||
==============================
|
||
|
||
If the tpm module is loaded and the platform has a Trusted Platform
|
||
Module installed, GRUB will log each command executed and each file
|
||
loaded into the TPM event log and extend the PCR values in the TPM
|
||
correspondingly. All events will be logged into the PCR described below
|
||
with a type of EV_IPL and an event description as described below.
|
||
|
||
Event type PCR Description
|
||
---------------------------------------------------------------------------
|
||
Command 8 All executed commands (including those
|
||
from configuration files) will be logged
|
||
and measured as entered with a prefix of
|
||
"grub_cmd: "
|
||
Kernel command line 8 Any command line passed to a kernel will
|
||
be logged and measured as entered with a
|
||
prefix of "kernel_cmdline: "
|
||
Module command line 8 Any command line passed to a kernel
|
||
module will be logged and measured as
|
||
entered with a prefix of "module_cmdline:
|
||
"
|
||
Files 9 Any file read by GRUB will be logged and
|
||
measured with a descriptive text
|
||
corresponding to the filename.
|
||
|
||
GRUB will not measure its own 'core.img' - it is expected that
|
||
firmware will carry this out. GRUB will also not perform any
|
||
measurements until the tpm module is loaded. As such it is recommended
|
||
that the tpm module be built into 'core.img' in order to avoid a
|
||
potential gap in measurement between 'core.img' being loaded and the tpm
|
||
module being loaded.
|
||
|
||
Measured boot is currently only supported on EFI platforms.
|
||
|
||
|
||
File: grub.info, Node: Lockdown, Prev: Measured Boot, Up: Security
|
||
|
||
18.6 Lockdown when booting on a secure setup
|
||
============================================
|
||
|
||
The GRUB can be locked down when booted on a secure boot environment,
|
||
for example if the UEFI secure boot is enabled. On a locked down
|
||
configuration, the GRUB will be restricted and some operations/commands
|
||
cannot be executed.
|
||
|
||
The 'lockdown' variable is set to 'y' when the GRUB is locked down.
|
||
Otherwise it does not exit.
|
||
|
||
|
||
File: grub.info, Node: Platform limitations, Next: Platform-specific operations, Prev: Security, Up: Top
|
||
|
||
19 Platform limitations
|
||
***********************
|
||
|
||
GRUB2 is designed to be portable and is actually ported across
|
||
platforms. We try to keep all platforms at the level. Unfortunately
|
||
some platforms are better supported than others. This is detailed in
|
||
current and 2 following sections.
|
||
|
||
All platforms have an artificially GRUB imposed disk size restriction
|
||
of 1 EiB. In some cases, larger disk sizes can be used, but access will
|
||
not be allowed beyond 1 EiB.
|
||
|
||
LUKS2 devices with size larger than 16 EiB are currently not
|
||
supported. They can not be created as crypto devices by cryptomount, so
|
||
can not even be partially read from. LUKS have no limitations other
|
||
than those imposed by the format.
|
||
|
||
ARC platform is unable to change datetime (firmware doesn't seem to
|
||
provide a function for it). EMU has similar limitation.
|
||
|
||
On EMU platform no serial port is available.
|
||
|
||
Console charset refers only to firmware-assisted console. gfxterm is
|
||
always Unicode (see Internationalisation section for its limitations).
|
||
Serial is configurable to UTF-8 or ASCII (see Internationalisation). In
|
||
case of qemu and coreboot ports the refered console is vga_text.
|
||
Loongson always uses gfxterm.
|
||
|
||
Most limited one is ASCII. CP437 provides additionally
|
||
pseudographics. GRUB2 doesn't use any language characters from CP437 as
|
||
often CP437 is replaced by national encoding compatible only in
|
||
pseudographics. Unicode is the most versatile charset which supports
|
||
many languages. However the actual console may be much more limited
|
||
depending on firmware
|
||
|
||
On BIOS, network is supported only if the image is loaded through
|
||
network. On sparc64, GRUB is unable to determine which server it was
|
||
booted from.
|
||
|
||
Direct ATA/AHCI support allows to circumvent various firmware
|
||
limitations but isn't needed for normal operation except on baremetal
|
||
ports.
|
||
|
||
AT keyboard support allows keyboard layout remapping and support for
|
||
keys not available through firmware. It isn't needed for normal
|
||
operation except baremetal ports.
|
||
|
||
Speaker allows morse and spkmodem communication.
|
||
|
||
USB support provides benefits similar to ATA (for USB disks) or AT
|
||
(for USB keyboards). In addition it allows USBserial.
|
||
|
||
Chainloading refers to the ability to load another bootloader through
|
||
the same protocol
|
||
|
||
Hints allow faster disk discovery by already knowing in advance which
|
||
is the disk in question. On some platforms hints are correct unless you
|
||
move the disk between boots. On other platforms it's just an educated
|
||
guess. Note that hint failure results in just reduced performance, not
|
||
a failure
|
||
|
||
BadRAM is the ability to mark some of the RAM as "bad". Note: due to
|
||
protocol limitations mips-loongson (with Linux protocol) and
|
||
mips-qemu_mips can use only memory up to first hole.
|
||
|
||
Bootlocation is ability of GRUB to automatically detect where it
|
||
boots from. "disk" means the detection is limited to detecting the disk
|
||
with partition being discovered on install time. "partition" means that
|
||
disk and partiton can be automatically discovered. "file" means that
|
||
boot image file name as well as disk and partition can be discovered.
|
||
For consistency, default install ignores partition and relies solely on
|
||
disk detection. If no bootlocation discovery is available or boot and
|
||
grub-root disks are different, UUID is used instead. On ARC if no
|
||
device to install to is specified, UUID is used instead as well.
|
||
|
||
BIOS Coreboot Multiboot Qemu
|
||
video yes yes yes yes
|
||
console CP437 CP437 CP437 CP437
|
||
charset
|
||
network yes (*) no no no
|
||
ATA/AHCI yes yes yes yes
|
||
AT keyboard yes yes yes yes
|
||
Speaker yes yes yes yes
|
||
USB yes yes yes yes
|
||
chainloader local yes yes no
|
||
cpuid partial partial partial partial
|
||
rdmsr partial partial partial partial
|
||
wrmsr partial partial partial partial
|
||
hints guess guess guess guess
|
||
PCI yes yes yes yes
|
||
badram yes yes yes yes
|
||
compression always pointless no no
|
||
exit yes no no no
|
||
bootlocation disk no no no
|
||
|
||
ia32 EFI amd64 EFI ia32 Itanium
|
||
IEEE1275
|
||
video yes yes no no
|
||
console Unicode Unicode ASCII Unicode
|
||
charset
|
||
network yes yes yes yes
|
||
ATA/AHCI yes yes yes no
|
||
AT keyboard yes yes yes no
|
||
Speaker yes yes yes no
|
||
USB yes yes yes no
|
||
chainloader local local no local
|
||
cpuid partial partial partial no
|
||
rdmsr partial partial partial no
|
||
wrmsr partial partial partial no
|
||
hints guess guess good guess
|
||
PCI yes yes yes no
|
||
badram yes yes no yes
|
||
compression no no no no
|
||
exit yes yes yes yes
|
||
bootlocation file file file, file
|
||
ignored
|
||
|
||
Loongson sparc64 Powerpc ARC
|
||
video yes no yes no
|
||
console N/A ASCII ASCII ASCII
|
||
charset
|
||
network no yes (*) yes no
|
||
ATA/AHCI yes no no no
|
||
AT keyboard yes no no no
|
||
Speaker no no no no
|
||
USB yes no no no
|
||
chainloader yes no no no
|
||
cpuid no no no no
|
||
rdmsr no no no no
|
||
wrmsr no no no no
|
||
hints good good good no
|
||
PCI yes no no no
|
||
badram yes (*) no no no
|
||
compression configurable no no configurable
|
||
exit no yes yes yes
|
||
bootlocation no partition file file (*)
|
||
|
||
MIPS qemu emu xen
|
||
video no yes no
|
||
console CP437 Unicode (*) ASCII
|
||
charset
|
||
network no yes no
|
||
ATA/AHCI yes no no
|
||
AT keyboard yes no no
|
||
Speaker no no no
|
||
USB N/A yes no
|
||
chainloader yes no yes
|
||
cpuid no no yes
|
||
rdmsr no no yes
|
||
wrmsr no no yes
|
||
hints guess no no
|
||
PCI no no no
|
||
badram yes (*) no no
|
||
compression configurable no no
|
||
exit no yes no
|
||
bootlocation no file no
|
||
|
||
|
||
File: grub.info, Node: Platform-specific operations, Next: Supported kernels, Prev: Platform limitations, Up: Top
|
||
|
||
20 Outline
|
||
**********
|
||
|
||
Some platforms have features which allows to implement some commands
|
||
useless or not implementable on others.
|
||
|
||
Quick summary:
|
||
|
||
Information retrieval:
|
||
|
||
* mipsel-loongson: lsspd
|
||
* mips-arc: lsdev
|
||
* efi: lsefisystab, lssal, lsefimmap, lsefi
|
||
* i386-pc: lsapm
|
||
* i386-coreboot: lscoreboot, coreboot_boottime, cbmemc
|
||
* acpi-enabled (i386-pc, i386-coreboot, i386-multiboot, *-efi):
|
||
lsacpi
|
||
|
||
Workarounds for platform-specific issues:
|
||
* i386-efi/x86_64-efi: loadbios, fakebios, fix_video
|
||
* acpi-enabled (i386-pc, i386-coreboot, i386-multiboot, *-efi): acpi
|
||
(override ACPI tables)
|
||
* i386-pc: drivemap
|
||
* i386-pc: sendkey
|
||
|
||
Advanced operations for power users:
|
||
* x86: iorw (direct access to I/O ports)
|
||
|
||
Miscelaneous:
|
||
* cmos (x86-*, ieee1275, mips-qemu_mips, mips-loongson): cmostest
|
||
(used on some laptops to check for special power-on key), cmosclean
|
||
* i386-pc: play
|
||
|
||
|
||
File: grub.info, Node: Supported kernels, Next: Troubleshooting, Prev: Platform-specific operations, Up: Top
|
||
|
||
21 Supported boot targets
|
||
*************************
|
||
|
||
X86 support is summarised in the following table. "Yes" means that the
|
||
kernel works on the given platform, "crashes" means an early kernel
|
||
crash which we hope will be fixed by concerned kernel developers. "no"
|
||
means GRUB doesn't load the given kernel on a given platform.
|
||
"headless" means that the kernel works but lacks console drivers (you
|
||
can still use serial or network console). In case of "no" and "crashes"
|
||
the reason is given in footnote.
|
||
BIOS Coreboot
|
||
BIOS chainloading yes no (1)
|
||
NTLDR yes no (1)
|
||
Plan9 yes no (1)
|
||
Freedos yes no (1)
|
||
FreeBSD bootloader yes crashes (1)
|
||
32-bit kFreeBSD yes crashes (5)
|
||
64-bit kFreeBSD yes crashes (5)
|
||
32-bit kNetBSD yes crashes (1)
|
||
64-bit kNetBSD yes crashes
|
||
32-bit kOpenBSD yes yes
|
||
64-bit kOpenBSD yes yes
|
||
Multiboot yes yes
|
||
Multiboot2 yes yes
|
||
32-bit Linux (legacy protocol) yes no (1)
|
||
64-bit Linux (legacy protocol) yes no (1)
|
||
32-bit Linux (modern protocol) yes yes
|
||
64-bit Linux (modern protocol) yes yes
|
||
32-bit XNU yes ?
|
||
64-bit XNU yes ?
|
||
32-bit EFI chainloader no (2) no (2)
|
||
64-bit EFI chainloader no (2) no (2)
|
||
Appleloader no (2) no (2)
|
||
|
||
Multiboot Qemu
|
||
BIOS chainloading no (1) no (1)
|
||
NTLDR no (1) no (1)
|
||
Plan9 no (1) no (1)
|
||
FreeDOS no (1) no (1)
|
||
FreeBSD bootloader crashes (1) crashes (1)
|
||
32-bit kFreeBSD crashes (5) crashes (5)
|
||
64-bit kFreeBSD crashes (5) crashes (5)
|
||
32-bit kNetBSD crashes (1) crashes (1)
|
||
64-bit kNetBSD yes yes
|
||
32-bit kOpenBSD yes yes
|
||
64-bit kOpenBSD yes yes
|
||
Multiboot yes yes
|
||
Multiboot2 yes yes
|
||
32-bit Linux (legacy protocol) no (1) no (1)
|
||
64-bit Linux (legacy protocol) no (1) no (1)
|
||
32-bit Linux (modern protocol) yes yes
|
||
64-bit Linux (modern protocol) yes yes
|
||
32-bit XNU ? ?
|
||
64-bit XNU ? ?
|
||
32-bit EFI chainloader no (2) no (2)
|
||
64-bit EFI chainloader no (2) no (2)
|
||
Appleloader no (2) no (2)
|
||
|
||
ia32 EFI amd64 EFI
|
||
BIOS chainloading no (1) no (1)
|
||
NTLDR no (1) no (1)
|
||
Plan9 no (1) no (1)
|
||
FreeDOS no (1) no (1)
|
||
FreeBSD bootloader crashes (1) crashes (1)
|
||
32-bit kFreeBSD headless headless
|
||
64-bit kFreeBSD headless headless
|
||
32-bit kNetBSD crashes (1) crashes (1)
|
||
64-bit kNetBSD yes yes
|
||
32-bit kOpenBSD headless headless
|
||
64-bit kOpenBSD headless headless
|
||
Multiboot yes yes
|
||
Multiboot2 yes yes
|
||
32-bit Linux (legacy protocol) no (1) no (1)
|
||
64-bit Linux (legacy protocol) no (1) no (1)
|
||
32-bit Linux (modern protocol) yes yes
|
||
64-bit Linux (modern protocol) yes yes
|
||
32-bit XNU yes yes
|
||
64-bit XNU yes (4) yes
|
||
32-bit EFI chainloader yes no (3)
|
||
64-bit EFI chainloader no (3) yes
|
||
Appleloader yes yes
|
||
|
||
ia32 IEEE1275
|
||
BIOS chainloading no (1)
|
||
NTLDR no (1)
|
||
Plan9 no (1)
|
||
FreeDOS no (1)
|
||
FreeBSD bootloader crashes (1)
|
||
32-bit kFreeBSD crashes (5)
|
||
64-bit kFreeBSD crashes (5)
|
||
32-bit kNetBSD crashes (1)
|
||
64-bit kNetBSD ?
|
||
32-bit kOpenBSD ?
|
||
64-bit kOpenBSD ?
|
||
Multiboot ?
|
||
Multiboot2 ?
|
||
32-bit Linux (legacy protocol) no (1)
|
||
64-bit Linux (legacy protocol) no (1)
|
||
32-bit Linux (modern protocol) ?
|
||
64-bit Linux (modern protocol) ?
|
||
32-bit XNU ?
|
||
64-bit XNU ?
|
||
32-bit EFI chainloader no (2)
|
||
64-bit EFI chainloader no (2)
|
||
Appleloader no (2)
|
||
|
||
1. Requires BIOS
|
||
2. EFI only
|
||
3. 32-bit and 64-bit EFI have different structures and work in
|
||
different CPU modes so it's not possible to chainload 32-bit
|
||
bootloader on 64-bit platform and vice-versa
|
||
4. Some modules may need to be disabled
|
||
5. Requires ACPI
|
||
|
||
PowerPC, IA64 and Sparc64 ports support only Linux. MIPS port
|
||
supports Linux and multiboot2.
|
||
|
||
21.1 Boot tests
|
||
===============
|
||
|
||
As you have seen in previous chapter the support matrix is pretty big
|
||
and some of the configurations are only rarely used. To ensure the
|
||
quality bootchecks are available for all x86 targets except EFI
|
||
chainloader, Appleloader and XNU. All x86 platforms have bootcheck
|
||
facility except ieee1275. Multiboot, multiboot2, BIOS chainloader,
|
||
ntldr and freebsd-bootloader boot targets are tested only with a fake
|
||
kernel images. Only Linux is tested among the payloads using Linux
|
||
protocols.
|
||
|
||
Following variables must be defined:
|
||
|
||
GRUB_PAYLOADS_DIR directory containing the required kernels
|
||
GRUB_CBFSTOOL cbfstool from Coreboot package (for coreboot
|
||
platform only)
|
||
GRUB_COREBOOT_ROM empty Coreboot ROM
|
||
GRUB_QEMU_OPTS additional options to be supplied to QEMU
|
||
|
||
Required files are:
|
||
|
||
kfreebsd_env.i386 32-bit kFreeBSD device hints
|
||
kfreebsd.i386 32-bit FreeBSD kernel image
|
||
kfreebsd.x86_64, same from 64-bit kFreeBSD
|
||
kfreebsd_env.x86_64
|
||
knetbsd.i386 32-bit NetBSD kernel image
|
||
knetbsd.miniroot.i386 32-bit kNetBSD miniroot.kmod.
|
||
knetbsd.x86_64, same from 64-bit kNetBSD
|
||
knetbsd.miniroot.x86_64
|
||
kopenbsd.i386 32-bit OpenBSD kernel bsd.rd image
|
||
kopenbsd.x86_64 same from 64-bit kOpenBSD
|
||
linux.i386 32-bit Linux
|
||
linux.x86_64 64-bit Linux
|
||
|
||
|
||
File: grub.info, Node: Troubleshooting, Next: Invoking grub-install, Prev: Supported kernels, Up: Top
|
||
|
||
22 Error messages produced by GRUB
|
||
**********************************
|
||
|
||
* Menu:
|
||
|
||
* GRUB only offers a rescue shell::
|
||
* Firmware stalls instead of booting GRUB::
|
||
|
||
|
||
File: grub.info, Node: GRUB only offers a rescue shell, Next: Firmware stalls instead of booting GRUB, Up: Troubleshooting
|
||
|
||
22.1 GRUB only offers a rescue shell
|
||
====================================
|
||
|
||
GRUB's normal start-up procedure involves setting the 'prefix'
|
||
environment variable to a value set in the core image by 'grub-install',
|
||
setting the 'root' variable to match, loading the 'normal' module from
|
||
the prefix, and running the 'normal' command (*note normal::). This
|
||
command is responsible for reading '/boot/grub/grub.cfg', running the
|
||
menu, and doing all the useful things GRUB is supposed to do.
|
||
|
||
If, instead, you only get a rescue shell, this usually means that
|
||
GRUB failed to load the 'normal' module for some reason. It may be
|
||
possible to work around this temporarily: for instance, if the reason
|
||
for the failure is that 'prefix' is wrong (perhaps it refers to the
|
||
wrong device, or perhaps the path to '/boot/grub' was not correctly made
|
||
relative to the device), then you can correct this and enter normal mode
|
||
manually:
|
||
|
||
# Inspect the current prefix (and other preset variables):
|
||
set
|
||
# Find out which devices are available:
|
||
ls
|
||
# Set to the correct value, which might be something like this:
|
||
set prefix=(hd0,1)/grub
|
||
set root=(hd0,1)
|
||
insmod normal
|
||
normal
|
||
|
||
However, any problem that leaves you in the rescue shell probably
|
||
means that GRUB was not correctly installed. It may be more useful to
|
||
try to reinstall it properly using 'grub-install DEVICE' (*note Invoking
|
||
grub-install::). When doing this, there are a few things to remember:
|
||
|
||
* Drive ordering in your operating system may not be the same as the
|
||
boot drive ordering used by your firmware. Do not assume that your
|
||
first hard drive (e.g. '/dev/sda') is the one that your firmware
|
||
will boot from. 'device.map' (*note Device map::) can be used to
|
||
override this, but it is usually better to use UUIDs or file system
|
||
labels and avoid depending on drive ordering entirely.
|
||
|
||
* At least on BIOS systems, if you tell 'grub-install' to install
|
||
GRUB to a partition but GRUB has already been installed in the
|
||
master boot record, then the GRUB installation in the partition
|
||
will be ignored.
|
||
|
||
* If possible, it is generally best to avoid installing GRUB to a
|
||
partition (unless it is a special partition for the use of GRUB
|
||
alone, such as the BIOS Boot Partition used on GPT). Doing this
|
||
means that GRUB may stop being able to read its core image due to a
|
||
file system moving blocks around, such as while defragmenting,
|
||
running checks, or even during normal operation. Installing to the
|
||
whole disk device is normally more robust.
|
||
|
||
* Check that GRUB actually knows how to read from the device and file
|
||
system containing '/boot/grub'. It will not be able to read from
|
||
encrypted devices with unsupported encryption scheme, nor from file
|
||
systems for which support has not yet been added to GRUB.
|
||
|
||
|
||
File: grub.info, Node: Firmware stalls instead of booting GRUB, Prev: GRUB only offers a rescue shell, Up: Troubleshooting
|
||
|
||
22.2 Firmware stalls instead of booting GRUB
|
||
============================================
|
||
|
||
The EFI implementation of some older MacBook laptops stalls when it gets
|
||
presented a grub-mkrescue ISO image for x86_64-efi target on an USB
|
||
stick. Affected are models of year 2010 or earlier. Workaround is to
|
||
zeroize the bytes 446 to 461 of the EFI partition, where mformat has put
|
||
a partition table entry which claims partition start at block 0. This
|
||
change will not hamper bootability on other machines.
|
||
|
||
|
||
File: grub.info, Node: Invoking grub-install, Next: Invoking grub-mkconfig, Prev: Troubleshooting, Up: Top
|
||
|
||
23 Invoking grub-install
|
||
************************
|
||
|
||
The program 'grub-install' generates a GRUB core image using
|
||
'grub-mkimage' and installs it on your system. You must specify the
|
||
device name on which you want to install GRUB, like this:
|
||
|
||
grub-install INSTALL_DEVICE
|
||
|
||
The device name INSTALL_DEVICE is an OS device name or a GRUB device
|
||
name.
|
||
|
||
'grub-install' accepts the following options:
|
||
|
||
'--help'
|
||
Print a summary of the command-line options and exit.
|
||
|
||
'--version'
|
||
Print the version number of GRUB and exit.
|
||
|
||
'--boot-directory=DIR'
|
||
Install GRUB images under the directory 'DIR/grub/' This option is
|
||
useful when you want to install GRUB into a separate partition or a
|
||
removable disk. If this option is not specified then it defaults
|
||
to '/boot', so
|
||
|
||
grub-install /dev/sda
|
||
|
||
is equivalent to
|
||
|
||
grub-install --boot-directory=/boot/ /dev/sda
|
||
|
||
Here is an example in which you have a separate "boot" partition
|
||
which is mounted on '/mnt/boot':
|
||
|
||
grub-install --boot-directory=/mnt/boot /dev/sdb
|
||
|
||
'--recheck'
|
||
Recheck the device map, even if '/boot/grub/device.map' already
|
||
exists. You should use this option whenever you add/remove a disk
|
||
into/from your computer.
|
||
|
||
'--no-rs-codes'
|
||
By default on x86 BIOS systems, 'grub-install' will use some extra
|
||
space in the bootloader embedding area for Reed-Solomon
|
||
error-correcting codes. This enables GRUB to still boot
|
||
successfully if some blocks are corrupted. The exact amount of
|
||
protection offered is dependent on available space in the embedding
|
||
area. R sectors of redundancy can tolerate up to R/2 corrupted
|
||
sectors. This redundancy may be cumbersome if attempting to
|
||
cryptographically validate the contents of the bootloader embedding
|
||
area, or in more modern systems with GPT-style partition tables
|
||
(*note BIOS installation::) where GRUB does not reside in any
|
||
unpartitioned space outside of the MBR. Disable the Reed-Solomon
|
||
codes with this option.
|
||
|
||
|
||
File: grub.info, Node: Invoking grub-mkconfig, Next: Invoking grub-mkpasswd-pbkdf2, Prev: Invoking grub-install, Up: Top
|
||
|
||
24 Invoking grub-mkconfig
|
||
*************************
|
||
|
||
The program 'grub-mkconfig' generates a configuration file for GRUB
|
||
(*note Simple configuration::).
|
||
|
||
grub-mkconfig -o /boot/grub/grub.cfg
|
||
|
||
'grub-mkconfig' accepts the following options:
|
||
|
||
'--help'
|
||
Print a summary of the command-line options and exit.
|
||
|
||
'--version'
|
||
Print the version number of GRUB and exit.
|
||
|
||
'-o FILE'
|
||
'--output=FILE'
|
||
Send the generated configuration file to FILE. The default is to
|
||
send it to standard output.
|
||
|
||
|
||
File: grub.info, Node: Invoking grub-mkpasswd-pbkdf2, Next: Invoking grub-mkrelpath, Prev: Invoking grub-mkconfig, Up: Top
|
||
|
||
25 Invoking grub-mkpasswd-pbkdf2
|
||
********************************
|
||
|
||
The program 'grub-mkpasswd-pbkdf2' generates password hashes for GRUB
|
||
(*note Security::).
|
||
|
||
grub-mkpasswd-pbkdf2
|
||
|
||
'grub-mkpasswd-pbkdf2' accepts the following options:
|
||
|
||
'-c NUMBER'
|
||
'--iteration-count=NUMBER'
|
||
Number of iterations of the underlying pseudo-random function.
|
||
Defaults to 10000.
|
||
|
||
'-l NUMBER'
|
||
'--buflen=NUMBER'
|
||
Length of the generated hash. Defaults to 64.
|
||
|
||
'-s NUMBER'
|
||
'--salt=NUMBER'
|
||
Length of the salt. Defaults to 64.
|
||
|
||
|
||
File: grub.info, Node: Invoking grub-mkrelpath, Next: Invoking grub-mkrescue, Prev: Invoking grub-mkpasswd-pbkdf2, Up: Top
|
||
|
||
26 Invoking grub-mkrelpath
|
||
**************************
|
||
|
||
The program 'grub-mkrelpath' makes a file system path relative to the
|
||
root of its containing file system. For instance, if '/usr' is a mount
|
||
point, then:
|
||
|
||
$ grub-mkrelpath /usr/share/grub/unicode.pf2
|
||
'/share/grub/unicode.pf2'
|
||
|
||
This is mainly used internally by other GRUB utilities such as
|
||
'grub-mkconfig' (*note Invoking grub-mkconfig::), but may occasionally
|
||
also be useful for debugging.
|
||
|
||
'grub-mkrelpath' accepts the following options:
|
||
|
||
'--help'
|
||
Print a summary of the command-line options and exit.
|
||
|
||
'--version'
|
||
Print the version number of GRUB and exit.
|
||
|
||
|
||
File: grub.info, Node: Invoking grub-mkrescue, Next: Invoking grub-mount, Prev: Invoking grub-mkrelpath, Up: Top
|
||
|
||
27 Invoking grub-mkrescue
|
||
*************************
|
||
|
||
The program 'grub-mkrescue' generates a bootable GRUB rescue image
|
||
(*note Making a GRUB bootable CD-ROM::).
|
||
|
||
grub-mkrescue -o grub.iso
|
||
|
||
All arguments not explicitly listed as 'grub-mkrescue' options are
|
||
passed on directly to 'xorriso' in 'mkisofs' emulation mode. Options
|
||
passed to 'xorriso' will normally be interpreted as 'mkisofs' options;
|
||
if the option '--' is used, then anything after that will be interpreted
|
||
as native 'xorriso' options.
|
||
|
||
Non-option arguments specify additional source directories. This is
|
||
commonly used to add extra files to the image:
|
||
|
||
mkdir -p disk/boot/grub
|
||
(add extra files to 'disk/boot/grub')
|
||
grub-mkrescue -o grub.iso disk
|
||
|
||
'grub-mkrescue' accepts the following options:
|
||
|
||
'--help'
|
||
Print a summary of the command-line options and exit.
|
||
|
||
'--version'
|
||
Print the version number of GRUB and exit.
|
||
|
||
'-o FILE'
|
||
'--output=FILE'
|
||
Save output in FILE. This "option" is required.
|
||
|
||
'--modules=MODULES'
|
||
Pre-load the named GRUB modules in the image. Multiple entries in
|
||
MODULES should be separated by whitespace (so you will probably
|
||
need to quote this for your shell).
|
||
|
||
'--rom-directory=DIR'
|
||
If generating images for the QEMU or Coreboot platforms, copy the
|
||
resulting 'qemu.img' or 'coreboot.elf' files respectively to the
|
||
DIR directory as well as including them in the image.
|
||
|
||
'--xorriso=FILE'
|
||
Use FILE as the 'xorriso' program, rather than the built-in
|
||
default.
|
||
|
||
'--grub-mkimage=FILE'
|
||
Use FILE as the 'grub-mkimage' program, rather than the built-in
|
||
default.
|
||
|
||
|
||
File: grub.info, Node: Invoking grub-mount, Next: Invoking grub-probe, Prev: Invoking grub-mkrescue, Up: Top
|
||
|
||
28 Invoking grub-mount
|
||
**********************
|
||
|
||
The program 'grub-mount' performs a read-only mount of any file system
|
||
or file system image that GRUB understands, using GRUB's file system
|
||
drivers via FUSE. (It is only available if FUSE development files were
|
||
present when GRUB was built.) This has a number of uses:
|
||
|
||
* It provides a convenient way to check how GRUB will view a file
|
||
system at boot time. You can use normal command-line tools to
|
||
compare that view with that of your operating system, making it
|
||
easy to find bugs.
|
||
|
||
* It offers true read-only mounts. Linux does not have these for
|
||
journalling file systems, because it will always attempt to replay
|
||
the journal at mount time; while you can temporarily mark the block
|
||
device read-only to avoid this, that causes the mount to fail.
|
||
Since GRUB intentionally contains no code for writing to file
|
||
systems, it can easily provide a guaranteed read-only mount
|
||
mechanism.
|
||
|
||
* It allows you to examine any file system that GRUB understands
|
||
without needing to load additional modules into your running
|
||
kernel, which may be useful in constrained environments such as
|
||
installers.
|
||
|
||
* Since it can examine file system images (contained in regular
|
||
files) just as easily as file systems on block devices, you can use
|
||
it to inspect any file system image that GRUB understands with only
|
||
enough privileges to use FUSE, even if nobody has yet written a
|
||
FUSE module specifically for that file system type.
|
||
|
||
Using 'grub-mount' is normally as simple as:
|
||
|
||
grub-mount /dev/sda1 /mnt
|
||
|
||
'grub-mount' must be given one or more images and a mount point as
|
||
non-option arguments (if it is given more than one image, it will treat
|
||
them as a RAID set), and also accepts the following options:
|
||
|
||
'--help'
|
||
Print a summary of the command-line options and exit.
|
||
|
||
'--version'
|
||
Print the version number of GRUB and exit.
|
||
|
||
'-C'
|
||
'--crypto'
|
||
Mount encrypted devices, prompting for a passphrase if necessary.
|
||
|
||
'-d STRING'
|
||
'--debug=STRING'
|
||
Show debugging output for conditions matching STRING.
|
||
|
||
'-K prompt|FILE'
|
||
'--zfs-key=prompt|FILE'
|
||
Load a ZFS encryption key. If you use 'prompt' as the argument,
|
||
'grub-mount' will read a passphrase from the terminal; otherwise,
|
||
it will read key material from the specified file.
|
||
|
||
'-r DEVICE'
|
||
'--root=DEVICE'
|
||
Set the GRUB root device to DEVICE. You do not normally need to
|
||
set this; 'grub-mount' will automatically set the root device to
|
||
the root of the supplied file system.
|
||
|
||
If DEVICE is just a number, then it will be treated as a partition
|
||
number within the supplied image. This means that, if you have an
|
||
image of an entire disk in 'disk.img', then you can use this
|
||
command to mount its second partition:
|
||
|
||
grub-mount -r 2 disk.img mount-point
|
||
|
||
'-v'
|
||
'--verbose'
|
||
Print verbose messages.
|
||
|
||
|
||
File: grub.info, Node: Invoking grub-probe, Next: Invoking grub-script-check, Prev: Invoking grub-mount, Up: Top
|
||
|
||
29 Invoking grub-probe
|
||
**********************
|
||
|
||
The program 'grub-probe' probes device information for a given path or
|
||
device.
|
||
|
||
grub-probe --target=fs /boot/grub
|
||
grub-probe --target=drive --device /dev/sda1
|
||
|
||
'grub-probe' must be given a path or device as a non-option argument,
|
||
and also accepts the following options:
|
||
|
||
'--help'
|
||
Print a summary of the command-line options and exit.
|
||
|
||
'--version'
|
||
Print the version number of GRUB and exit.
|
||
|
||
'-d'
|
||
'--device'
|
||
If this option is given, then the non-option argument is a system
|
||
device name (such as '/dev/sda1'), and 'grub-probe' will print
|
||
information about that device. If it is not given, then the
|
||
non-option argument is a filesystem path (such as '/boot/grub'),
|
||
and 'grub-probe' will print information about the device containing
|
||
that part of the filesystem.
|
||
|
||
'-m FILE'
|
||
'--device-map=FILE'
|
||
Use FILE as the device map (*note Device map::) rather than the
|
||
default, usually '/boot/grub/device.map'.
|
||
|
||
'-t TARGET'
|
||
'--target=TARGET'
|
||
Print information about the given path or device as defined by
|
||
TARGET. The available targets and their meanings are:
|
||
|
||
'fs'
|
||
GRUB filesystem module.
|
||
'fs_uuid'
|
||
Filesystem Universally Unique Identifier (UUID).
|
||
'fs_label'
|
||
Filesystem label.
|
||
'drive'
|
||
GRUB device name.
|
||
'device'
|
||
System device name.
|
||
'partmap'
|
||
GRUB partition map module.
|
||
'abstraction'
|
||
GRUB abstraction module (e.g. 'lvm').
|
||
'cryptodisk_uuid'
|
||
Crypto device UUID.
|
||
'msdos_parttype'
|
||
MBR partition type code (two hexadecimal digits).
|
||
'hints_string'
|
||
A string of platform search hints suitable for passing to the
|
||
'search' command (*note search::).
|
||
'bios_hints'
|
||
Search hints for the PC BIOS platform.
|
||
'ieee1275_hints'
|
||
Search hints for the IEEE1275 platform.
|
||
'baremetal_hints'
|
||
Search hints for platforms where disks are addressed directly
|
||
rather than via firmware.
|
||
'efi_hints'
|
||
Search hints for the EFI platform.
|
||
'arc_hints'
|
||
Search hints for the ARC platform.
|
||
'compatibility_hint'
|
||
A guess at a reasonable GRUB drive name for this device, which
|
||
may be used as a fallback if the 'search' command fails.
|
||
'disk'
|
||
System device name for the whole disk.
|
||
|
||
'-v'
|
||
'--verbose'
|
||
Print verbose messages.
|
||
|
||
|
||
File: grub.info, Node: Invoking grub-script-check, Next: Obtaining and Building GRUB, Prev: Invoking grub-probe, Up: Top
|
||
|
||
30 Invoking grub-script-check
|
||
*****************************
|
||
|
||
The program 'grub-script-check' takes a GRUB script file (*note
|
||
Shell-like scripting::) and checks it for syntax errors, similar to
|
||
commands such as 'sh -n'. It may take a PATH as a non-option argument;
|
||
if none is supplied, it will read from standard input.
|
||
|
||
grub-script-check /boot/grub/grub.cfg
|
||
|
||
'grub-script-check' accepts the following options:
|
||
|
||
'--help'
|
||
Print a summary of the command-line options and exit.
|
||
|
||
'--version'
|
||
Print the version number of GRUB and exit.
|
||
|
||
'-v'
|
||
'--verbose'
|
||
Print each line of input after reading it.
|
||
|
||
|
||
File: grub.info, Node: Obtaining and Building GRUB, Next: Reporting bugs, Prev: Invoking grub-script-check, Up: Top
|
||
|
||
Appendix A How to obtain and build GRUB
|
||
***************************************
|
||
|
||
*Caution:* GRUB requires binutils-2.9.1.0.23 or later because the
|
||
GNU assembler has been changed so that it can produce real 16bits
|
||
machine code between 2.9.1 and 2.9.1.0.x. See
|
||
<http://sources.redhat.com/binutils/>, to obtain information on how
|
||
to get the latest version.
|
||
|
||
GRUB is available from the GNU alpha archive site
|
||
<ftp://ftp.gnu.org/gnu/grub> or any of its mirrors. The file will be
|
||
named grub-version.tar.gz. The current version is 2.06, so the file you
|
||
should grab is:
|
||
|
||
<ftp://ftp.gnu.org/gnu/grub/grub-2.06.tar.gz>
|
||
|
||
To unbundle GRUB use the instruction:
|
||
|
||
zcat grub-2.06.tar.gz | tar xvf -
|
||
|
||
which will create a directory called 'grub-2.06' with all the
|
||
sources. You can look at the file 'INSTALL' for detailed instructions
|
||
on how to build and install GRUB, but you should be able to just do:
|
||
|
||
cd grub-2.06
|
||
./configure
|
||
make install
|
||
|
||
Also, the latest version is available using Git. See
|
||
<http://www.gnu.org/software/grub/grub-download.html> for more
|
||
information.
|
||
|
||
|
||
File: grub.info, Node: Reporting bugs, Next: Future, Prev: Obtaining and Building GRUB, Up: Top
|
||
|
||
Appendix B Reporting bugs
|
||
*************************
|
||
|
||
These are the guideline for how to report bugs. Take a look at this
|
||
list below before you submit bugs:
|
||
|
||
1. Before getting unsettled, read this manual through and through.
|
||
Also, see the GNU GRUB FAQ
|
||
(http://www.gnu.org/software/grub/grub-faq.html).
|
||
|
||
2. Always mention the information on your GRUB. The version number and
|
||
the configuration are quite important. If you build it yourself,
|
||
write the options specified to the configure script and your
|
||
operating system, including the versions of gcc and binutils.
|
||
|
||
3. If you have trouble with the installation, inform us of how you
|
||
installed GRUB. Don't omit error messages, if any. Just 'GRUB
|
||
hangs up when it boots' is not enough.
|
||
|
||
The information on your hardware is also essential. These are
|
||
especially important: the geometries and the partition tables of
|
||
your hard disk drives and your BIOS.
|
||
|
||
4. If GRUB cannot boot your operating system, write down _everything_
|
||
you see on the screen. Don't paraphrase them, like 'The foo OS
|
||
crashes with GRUB, even though it can boot with the bar boot loader
|
||
just fine'. Mention the commands you executed, the messages
|
||
printed by them, and information on your operating system including
|
||
the version number.
|
||
|
||
5. Explain what you wanted to do. It is very useful to know your
|
||
purpose and your wish, and how GRUB didn't satisfy you.
|
||
|
||
6. If you can investigate the problem yourself, please do. That will
|
||
give you and us much more information on the problem. Attaching a
|
||
patch is even better.
|
||
|
||
When you attach a patch, make the patch in unified diff format, and
|
||
write ChangeLog entries. But, even when you make a patch, don't
|
||
forget to explain the problem, so that we can understand what your
|
||
patch is for.
|
||
|
||
7. Write down anything that you think might be related. Please
|
||
understand that we often need to reproduce the same problem you
|
||
encountered in our environment. So your information should be
|
||
sufficient for us to do the same thing--Don't forget that we cannot
|
||
see your computer directly. If you are not sure whether to state a
|
||
fact or leave it out, state it! Reporting too many things is much
|
||
better than omitting something important.
|
||
|
||
If you follow the guideline above, submit a report to the Bug
|
||
Tracking System (http://savannah.gnu.org/bugs/?group=grub).
|
||
Alternatively, you can submit a report via electronic mail to
|
||
<bug-grub@gnu.org>, but we strongly recommend that you use the Bug
|
||
Tracking System, because e-mail can be passed over easily.
|
||
|
||
Once we get your report, we will try to fix the bugs.
|
||
|
||
|
||
File: grub.info, Node: Future, Next: Copying This Manual, Prev: Reporting bugs, Up: Top
|
||
|
||
Appendix C Where GRUB will go
|
||
*****************************
|
||
|
||
GRUB 2 is now quite stable and used in many production systems. We are
|
||
currently working towards a 2.0 release.
|
||
|
||
If you are interested in the development of GRUB 2, take a look at
|
||
the homepage (http://www.gnu.org/software/grub/grub.html).
|
||
|
||
|
||
File: grub.info, Node: Copying This Manual, Next: Index, Prev: Future, Up: Top
|
||
|
||
Appendix D Copying This Manual
|
||
******************************
|
||
|
||
* Menu:
|
||
|
||
* GNU Free Documentation License:: License for copying this manual.
|
||
|
||
|
||
File: grub.info, Node: GNU Free Documentation License, Up: Copying This Manual
|
||
|
||
D.1 GNU Free Documentation License
|
||
==================================
|
||
|
||
Version 1.2, November 2002
|
||
|
||
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
|
||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||
|
||
Everyone is permitted to copy and distribute verbatim copies
|
||
of this license document, but changing it is not allowed.
|
||
|
||
0. PREAMBLE
|
||
|
||
The purpose of this License is to make a manual, textbook, or other
|
||
functional and useful document "free" in the sense of freedom: to
|
||
assure everyone the effective freedom to copy and redistribute it,
|
||
with or without modifying it, either commercially or
|
||
noncommercially. Secondarily, this License preserves for the
|
||
author and publisher a way to get credit for their work, while not
|
||
being considered responsible for modifications made by others.
|
||
|
||
This License is a kind of "copyleft", which means that derivative
|
||
works of the document must themselves be free in the same sense.
|
||
It complements the GNU General Public License, which is a copyleft
|
||
license designed for free software.
|
||
|
||
We have designed this License in order to use it for manuals for
|
||
free software, because free software needs free documentation: a
|
||
free program should come with manuals providing the same freedoms
|
||
that the software does. But this License is not limited to
|
||
software manuals; it can be used for any textual work, regardless
|
||
of subject matter or whether it is published as a printed book. We
|
||
recommend this License principally for works whose purpose is
|
||
instruction or reference.
|
||
|
||
1. APPLICABILITY AND DEFINITIONS
|
||
|
||
This License applies to any manual or other work, in any medium,
|
||
that contains a notice placed by the copyright holder saying it can
|
||
be distributed under the terms of this License. Such a notice
|
||
grants a world-wide, royalty-free license, unlimited in duration,
|
||
to use that work under the conditions stated herein. The
|
||
"Document", below, refers to any such manual or work. Any member
|
||
of the public is a licensee, and is addressed as "you". You accept
|
||
the license if you copy, modify or distribute the work in a way
|
||
requiring permission under copyright law.
|
||
|
||
A "Modified Version" of the Document means any work containing the
|
||
Document or a portion of it, either copied verbatim, or with
|
||
modifications and/or translated into another language.
|
||
|
||
A "Secondary Section" is a named appendix or a front-matter section
|
||
of the Document that deals exclusively with the relationship of the
|
||
publishers or authors of the Document to the Document's overall
|
||
subject (or to related matters) and contains nothing that could
|
||
fall directly within that overall subject. (Thus, if the Document
|
||
is in part a textbook of mathematics, a Secondary Section may not
|
||
explain any mathematics.) The relationship could be a matter of
|
||
historical connection with the subject or with related matters, or
|
||
of legal, commercial, philosophical, ethical or political position
|
||
regarding them.
|
||
|
||
The "Invariant Sections" are certain Secondary Sections whose
|
||
titles are designated, as being those of Invariant Sections, in the
|
||
notice that says that the Document is released under this License.
|
||
If a section does not fit the above definition of Secondary then it
|
||
is not allowed to be designated as Invariant. The Document may
|
||
contain zero Invariant Sections. If the Document does not identify
|
||
any Invariant Sections then there are none.
|
||
|
||
The "Cover Texts" are certain short passages of text that are
|
||
listed, as Front-Cover Texts or Back-Cover Texts, in the notice
|
||
that says that the Document is released under this License. A
|
||
Front-Cover Text may be at most 5 words, and a Back-Cover Text may
|
||
be at most 25 words.
|
||
|
||
A "Transparent" copy of the Document means a machine-readable copy,
|
||
represented in a format whose specification is available to the
|
||
general public, that is suitable for revising the document
|
||
straightforwardly with generic text editors or (for images composed
|
||
of pixels) generic paint programs or (for drawings) some widely
|
||
available drawing editor, and that is suitable for input to text
|
||
formatters or for automatic translation to a variety of formats
|
||
suitable for input to text formatters. A copy made in an otherwise
|
||
Transparent file format whose markup, or absence of markup, has
|
||
been arranged to thwart or discourage subsequent modification by
|
||
readers is not Transparent. An image format is not Transparent if
|
||
used for any substantial amount of text. A copy that is not
|
||
"Transparent" is called "Opaque".
|
||
|
||
Examples of suitable formats for Transparent copies include plain
|
||
ASCII without markup, Texinfo input format, LaTeX input format,
|
||
SGML or XML using a publicly available DTD, and standard-conforming
|
||
simple HTML, PostScript or PDF designed for human modification.
|
||
Examples of transparent image formats include PNG, XCF and JPG.
|
||
Opaque formats include proprietary formats that can be read and
|
||
edited only by proprietary word processors, SGML or XML for which
|
||
the DTD and/or processing tools are not generally available, and
|
||
the machine-generated HTML, PostScript or PDF produced by some word
|
||
processors for output purposes only.
|
||
|
||
The "Title Page" means, for a printed book, the title page itself,
|
||
plus such following pages as are needed to hold, legibly, the
|
||
material this License requires to appear in the title page. For
|
||
works in formats which do not have any title page as such, "Title
|
||
Page" means the text near the most prominent appearance of the
|
||
work's title, preceding the beginning of the body of the text.
|
||
|
||
A section "Entitled XYZ" means a named subunit of the Document
|
||
whose title either is precisely XYZ or contains XYZ in parentheses
|
||
following text that translates XYZ in another language. (Here XYZ
|
||
stands for a specific section name mentioned below, such as
|
||
"Acknowledgements", "Dedications", "Endorsements", or "History".)
|
||
To "Preserve the Title" of such a section when you modify the
|
||
Document means that it remains a section "Entitled XYZ" according
|
||
to this definition.
|
||
|
||
The Document may include Warranty Disclaimers next to the notice
|
||
which states that this License applies to the Document. These
|
||
Warranty Disclaimers are considered to be included by reference in
|
||
this License, but only as regards disclaiming warranties: any other
|
||
implication that these Warranty Disclaimers may have is void and
|
||
has no effect on the meaning of this License.
|
||
|
||
2. VERBATIM COPYING
|
||
|
||
You may copy and distribute the Document in any medium, either
|
||
commercially or noncommercially, provided that this License, the
|
||
copyright notices, and the license notice saying this License
|
||
applies to the Document are reproduced in all copies, and that you
|
||
add no other conditions whatsoever to those of this License. You
|
||
may not use technical measures to obstruct or control the reading
|
||
or further copying of the copies you make or distribute. However,
|
||
you may accept compensation in exchange for copies. If you
|
||
distribute a large enough number of copies you must also follow the
|
||
conditions in section 3.
|
||
|
||
You may also lend copies, under the same conditions stated above,
|
||
and you may publicly display copies.
|
||
|
||
3. COPYING IN QUANTITY
|
||
|
||
If you publish printed copies (or copies in media that commonly
|
||
have printed covers) of the Document, numbering more than 100, and
|
||
the Document's license notice requires Cover Texts, you must
|
||
enclose the copies in covers that carry, clearly and legibly, all
|
||
these Cover Texts: Front-Cover Texts on the front cover, and
|
||
Back-Cover Texts on the back cover. Both covers must also clearly
|
||
and legibly identify you as the publisher of these copies. The
|
||
front cover must present the full title with all words of the title
|
||
equally prominent and visible. You may add other material on the
|
||
covers in addition. Copying with changes limited to the covers, as
|
||
long as they preserve the title of the Document and satisfy these
|
||
conditions, can be treated as verbatim copying in other respects.
|
||
|
||
If the required texts for either cover are too voluminous to fit
|
||
legibly, you should put the first ones listed (as many as fit
|
||
reasonably) on the actual cover, and continue the rest onto
|
||
adjacent pages.
|
||
|
||
If you publish or distribute Opaque copies of the Document
|
||
numbering more than 100, you must either include a machine-readable
|
||
Transparent copy along with each Opaque copy, or state in or with
|
||
each Opaque copy a computer-network location from which the general
|
||
network-using public has access to download using public-standard
|
||
network protocols a complete Transparent copy of the Document, free
|
||
of added material. If you use the latter option, you must take
|
||
reasonably prudent steps, when you begin distribution of Opaque
|
||
copies in quantity, to ensure that this Transparent copy will
|
||
remain thus accessible at the stated location until at least one
|
||
year after the last time you distribute an Opaque copy (directly or
|
||
through your agents or retailers) of that edition to the public.
|
||
|
||
It is requested, but not required, that you contact the authors of
|
||
the Document well before redistributing any large number of copies,
|
||
to give them a chance to provide you with an updated version of the
|
||
Document.
|
||
|
||
4. MODIFICATIONS
|
||
|
||
You may copy and distribute a Modified Version of the Document
|
||
under the conditions of sections 2 and 3 above, provided that you
|
||
release the Modified Version under precisely this License, with the
|
||
Modified Version filling the role of the Document, thus licensing
|
||
distribution and modification of the Modified Version to whoever
|
||
possesses a copy of it. In addition, you must do these things in
|
||
the Modified Version:
|
||
|
||
A. Use in the Title Page (and on the covers, if any) a title
|
||
distinct from that of the Document, and from those of previous
|
||
versions (which should, if there were any, be listed in the
|
||
History section of the Document). You may use the same title
|
||
as a previous version if the original publisher of that
|
||
version gives permission.
|
||
|
||
B. List on the Title Page, as authors, one or more persons or
|
||
entities responsible for authorship of the modifications in
|
||
the Modified Version, together with at least five of the
|
||
principal authors of the Document (all of its principal
|
||
authors, if it has fewer than five), unless they release you
|
||
from this requirement.
|
||
|
||
C. State on the Title page the name of the publisher of the
|
||
Modified Version, as the publisher.
|
||
|
||
D. Preserve all the copyright notices of the Document.
|
||
|
||
E. Add an appropriate copyright notice for your modifications
|
||
adjacent to the other copyright notices.
|
||
|
||
F. Include, immediately after the copyright notices, a license
|
||
notice giving the public permission to use the Modified
|
||
Version under the terms of this License, in the form shown in
|
||
the Addendum below.
|
||
|
||
G. Preserve in that license notice the full lists of Invariant
|
||
Sections and required Cover Texts given in the Document's
|
||
license notice.
|
||
|
||
H. Include an unaltered copy of this License.
|
||
|
||
I. Preserve the section Entitled "History", Preserve its Title,
|
||
and add to it an item stating at least the title, year, new
|
||
authors, and publisher of the Modified Version as given on the
|
||
Title Page. If there is no section Entitled "History" in the
|
||
Document, create one stating the title, year, authors, and
|
||
publisher of the Document as given on its Title Page, then add
|
||
an item describing the Modified Version as stated in the
|
||
previous sentence.
|
||
|
||
J. Preserve the network location, if any, given in the Document
|
||
for public access to a Transparent copy of the Document, and
|
||
likewise the network locations given in the Document for
|
||
previous versions it was based on. These may be placed in the
|
||
"History" section. You may omit a network location for a work
|
||
that was published at least four years before the Document
|
||
itself, or if the original publisher of the version it refers
|
||
to gives permission.
|
||
|
||
K. For any section Entitled "Acknowledgements" or "Dedications",
|
||
Preserve the Title of the section, and preserve in the section
|
||
all the substance and tone of each of the contributor
|
||
acknowledgements and/or dedications given therein.
|
||
|
||
L. Preserve all the Invariant Sections of the Document, unaltered
|
||
in their text and in their titles. Section numbers or the
|
||
equivalent are not considered part of the section titles.
|
||
|
||
M. Delete any section Entitled "Endorsements". Such a section
|
||
may not be included in the Modified Version.
|
||
|
||
N. Do not retitle any existing section to be Entitled
|
||
"Endorsements" or to conflict in title with any Invariant
|
||
Section.
|
||
|
||
O. Preserve any Warranty Disclaimers.
|
||
|
||
If the Modified Version includes new front-matter sections or
|
||
appendices that qualify as Secondary Sections and contain no
|
||
material copied from the Document, you may at your option designate
|
||
some or all of these sections as invariant. To do this, add their
|
||
titles to the list of Invariant Sections in the Modified Version's
|
||
license notice. These titles must be distinct from any other
|
||
section titles.
|
||
|
||
You may add a section Entitled "Endorsements", provided it contains
|
||
nothing but endorsements of your Modified Version by various
|
||
parties--for example, statements of peer review or that the text
|
||
has been approved by an organization as the authoritative
|
||
definition of a standard.
|
||
|
||
You may add a passage of up to five words as a Front-Cover Text,
|
||
and a passage of up to 25 words as a Back-Cover Text, to the end of
|
||
the list of Cover Texts in the Modified Version. Only one passage
|
||
of Front-Cover Text and one of Back-Cover Text may be added by (or
|
||
through arrangements made by) any one entity. If the Document
|
||
already includes a cover text for the same cover, previously added
|
||
by you or by arrangement made by the same entity you are acting on
|
||
behalf of, you may not add another; but you may replace the old
|
||
one, on explicit permission from the previous publisher that added
|
||
the old one.
|
||
|
||
The author(s) and publisher(s) of the Document do not by this
|
||
License give permission to use their names for publicity for or to
|
||
assert or imply endorsement of any Modified Version.
|
||
|
||
5. COMBINING DOCUMENTS
|
||
|
||
You may combine the Document with other documents released under
|
||
this License, under the terms defined in section 4 above for
|
||
modified versions, provided that you include in the combination all
|
||
of the Invariant Sections of all of the original documents,
|
||
unmodified, and list them all as Invariant Sections of your
|
||
combined work in its license notice, and that you preserve all
|
||
their Warranty Disclaimers.
|
||
|
||
The combined work need only contain one copy of this License, and
|
||
multiple identical Invariant Sections may be replaced with a single
|
||
copy. If there are multiple Invariant Sections with the same name
|
||
but different contents, make the title of each such section unique
|
||
by adding at the end of it, in parentheses, the name of the
|
||
original author or publisher of that section if known, or else a
|
||
unique number. Make the same adjustment to the section titles in
|
||
the list of Invariant Sections in the license notice of the
|
||
combined work.
|
||
|
||
In the combination, you must combine any sections Entitled
|
||
"History" in the various original documents, forming one section
|
||
Entitled "History"; likewise combine any sections Entitled
|
||
"Acknowledgements", and any sections Entitled "Dedications". You
|
||
must delete all sections Entitled "Endorsements."
|
||
|
||
6. COLLECTIONS OF DOCUMENTS
|
||
|
||
You may make a collection consisting of the Document and other
|
||
documents released under this License, and replace the individual
|
||
copies of this License in the various documents with a single copy
|
||
that is included in the collection, provided that you follow the
|
||
rules of this License for verbatim copying of each of the documents
|
||
in all other respects.
|
||
|
||
You may extract a single document from such a collection, and
|
||
distribute it individually under this License, provided you insert
|
||
a copy of this License into the extracted document, and follow this
|
||
License in all other respects regarding verbatim copying of that
|
||
document.
|
||
|
||
7. AGGREGATION WITH INDEPENDENT WORKS
|
||
|
||
A compilation of the Document or its derivatives with other
|
||
separate and independent documents or works, in or on a volume of a
|
||
storage or distribution medium, is called an "aggregate" if the
|
||
copyright resulting from the compilation is not used to limit the
|
||
legal rights of the compilation's users beyond what the individual
|
||
works permit. When the Document is included in an aggregate, this
|
||
License does not apply to the other works in the aggregate which
|
||
are not themselves derivative works of the Document.
|
||
|
||
If the Cover Text requirement of section 3 is applicable to these
|
||
copies of the Document, then if the Document is less than one half
|
||
of the entire aggregate, the Document's Cover Texts may be placed
|
||
on covers that bracket the Document within the aggregate, or the
|
||
electronic equivalent of covers if the Document is in electronic
|
||
form. Otherwise they must appear on printed covers that bracket
|
||
the whole aggregate.
|
||
|
||
8. TRANSLATION
|
||
|
||
Translation is considered a kind of modification, so you may
|
||
distribute translations of the Document under the terms of section
|
||
4. Replacing Invariant Sections with translations requires special
|
||
permission from their copyright holders, but you may include
|
||
translations of some or all Invariant Sections in addition to the
|
||
original versions of these Invariant Sections. You may include a
|
||
translation of this License, and all the license notices in the
|
||
Document, and any Warranty Disclaimers, provided that you also
|
||
include the original English version of this License and the
|
||
original versions of those notices and disclaimers. In case of a
|
||
disagreement between the translation and the original version of
|
||
this License or a notice or disclaimer, the original version will
|
||
prevail.
|
||
|
||
If a section in the Document is Entitled "Acknowledgements",
|
||
"Dedications", or "History", the requirement (section 4) to
|
||
Preserve its Title (section 1) will typically require changing the
|
||
actual title.
|
||
|
||
9. TERMINATION
|
||
|
||
You may not copy, modify, sublicense, or distribute the Document
|
||
except as expressly provided for under this License. Any other
|
||
attempt to copy, modify, sublicense or distribute the Document is
|
||
void, and will automatically terminate your rights under this
|
||
License. However, parties who have received copies, or rights,
|
||
from you under this License will not have their licenses terminated
|
||
so long as such parties remain in full compliance.
|
||
|
||
10. FUTURE REVISIONS OF THIS LICENSE
|
||
|
||
The Free Software Foundation may publish new, revised versions of
|
||
the GNU Free Documentation License from time to time. Such new
|
||
versions will be similar in spirit to the present version, but may
|
||
differ in detail to address new problems or concerns. See
|
||
<http://www.gnu.org/copyleft/>.
|
||
|
||
Each version of the License is given a distinguishing version
|
||
number. If the Document specifies that a particular numbered
|
||
version of this License "or any later version" applies to it, you
|
||
have the option of following the terms and conditions either of
|
||
that specified version or of any later version that has been
|
||
published (not as a draft) by the Free Software Foundation. If the
|
||
Document does not specify a version number of this License, you may
|
||
choose any version ever published (not as a draft) by the Free
|
||
Software Foundation.
|
||
|
||
D.1.1 ADDENDUM: How to use this License for your documents
|
||
----------------------------------------------------------
|
||
|
||
To use this License in a document you have written, include a copy of
|
||
the License in the document and put the following copyright and license
|
||
notices just after the title page:
|
||
|
||
Copyright (C) YEAR YOUR NAME.
|
||
Permission is granted to copy, distribute and/or modify this document
|
||
under the terms of the GNU Free Documentation License, Version 1.2
|
||
or any later version published by the Free Software Foundation;
|
||
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
|
||
Texts. A copy of the license is included in the section entitled ``GNU
|
||
Free Documentation License''.
|
||
|
||
If you have Invariant Sections, Front-Cover Texts and Back-Cover
|
||
Texts, replace the "with...Texts." line with this:
|
||
|
||
with the Invariant Sections being LIST THEIR TITLES, with
|
||
the Front-Cover Texts being LIST, and with the Back-Cover Texts
|
||
being LIST.
|
||
|
||
If you have Invariant Sections without Cover Texts, or some other
|
||
combination of the three, merge those two alternatives to suit the
|
||
situation.
|
||
|
||
If your document contains nontrivial examples of program code, we
|
||
recommend releasing these examples in parallel under your choice of free
|
||
software license, such as the GNU General Public License, to permit
|
||
their use in free software.
|
||
|