grubby/boot/grub/persistent/docs/04_installation

241 lines
10 KiB
Text
Raw Normal View History

2020-11-13 00:50:49 +01:00
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".
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.
Note that 'grub-install' is actually just a shell script and the real
task is done by other tools such as 'grub-mkimage'. Therefore, you may
run those commands directly to install GRUB, without using
'grub-install'. Don't do that, however, unless you are very familiar
with the internals of GRUB. Installing a boot loader on a running OS may
be extremely dangerous.
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
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.
(1) El Torito is a specification for bootable CD using BIOS
functions.
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 '#'.
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 31 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.
Each of these has different 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; and systems are sometimes partitioned
without leaving enough space before the first partition. On the other
hand, 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 31 KiB (63 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.