mirror of
https://pagure.io/fedora-docs/quick-docs.git
synced 2024-11-28 23:06:36 +00:00
482 lines
13 KiB
Text
482 lines
13 KiB
Text
= GRUB 2
|
||
|
||
'''
|
||
|
||
[IMPORTANT]
|
||
======
|
||
|
||
This page was automatically converted from https://fedoraproject.org/wiki/GRUB_2
|
||
|
||
It is probably
|
||
|
||
* Badly formatted
|
||
* Missing graphics and tables that do not convert well from mediawiki
|
||
* Out-of-date
|
||
* In need of other love
|
||
|
||
Please fix it, remove this notice, and then add to `_topic_map.yml`
|
||
|
||
Pull requests accepted at https://pagure.io/fedora-docs/quick-docs
|
||
|
||
Once that is live, go to the original wiki page and add an `{{old}}`
|
||
tag, followed by a note like
|
||
|
||
....
|
||
{{admon/note|This page has a new home!|
|
||
This wiki page is no longer maintained. Please find the up-to-date
|
||
version at: https://docs.fedoraproject.org/whatever-the-url
|
||
}}
|
||
....
|
||
|
||
======
|
||
|
||
'''
|
||
|
||
|
||
[[introduction]]
|
||
Introduction
|
||
------------
|
||
|
||
GRUB 2 is the latest version of GNU GRUB, the GRand Unified Bootloader.
|
||
A bootloader is the first software program that runs when a computer
|
||
starts. It is responsible for loading and transferring control to the
|
||
operating system kernel, (Linux, in the case of Fedora). The kernel, in
|
||
turn, initializes the rest of the operating system.
|
||
|
||
GRUB 2 has replaced what was formerly known as GRUB (i.e. version 0.9x),
|
||
which has, in turn, become GRUB Legacy.
|
||
|
||
Starting with Fedora 16, GRUB 2 is the default bootloader on x86 BIOS
|
||
systems. For upgrades of BIOS systems the default is also to install
|
||
GRUB 2, but you can opt to skip bootloader configuration entirely.
|
||
|
||
[[tasks-common-issues]]
|
||
Tasks / Common issues
|
||
---------------------
|
||
|
||
[[updating-grub-2-configuration-on-bios-systems]]
|
||
Updating GRUB 2 configuration on BIOS systems
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
The grub2 packages contain commands for installing a bootloader and for
|
||
creating a bootloader configuration file.
|
||
|
||
grub2-install will install the bootloader - usually in the MBR, in free
|
||
unpartioned space, and as files in /boot. The bootloader is installed
|
||
with something like:
|
||
|
||
....
|
||
grub2-install /dev/sda
|
||
....
|
||
|
||
grub2-mkconfig will create a new configuration based on the currently
|
||
running system, what is found in /boot, what is set in
|
||
/etc/default/grub, and the customizable scripts in /etc/grub.d/ . A new
|
||
configuration file is created with:
|
||
|
||
....
|
||
grub2-mkconfig -o /boot/grub2/grub.cfg
|
||
....
|
||
|
||
The configuration format has evolved over time, and a new configuration
|
||
file might be slightly incompatible with the old bootloader. It is
|
||
therefore a good idea to first run grub2-install whenever you would need
|
||
to run grub2-mkconfig.
|
||
|
||
The Fedora installer, anaconda, will run these grub2 commands and there
|
||
is usually no reason to run them manually.
|
||
|
||
It is generally safe to directly edit /boot/grub2/grub.cfg in Fedora.
|
||
Grubby in Fedora patches the configuration when a kernel update is
|
||
performed and will try to not make any other changes than what is
|
||
necessary. (Other distributions, in particular Debian and Debian-derived
|
||
distributions provide a software patch that adds an command which is
|
||
neither included nor needed in Fedora.) Manual changes might however be
|
||
overwritten with grub2-mkconfig next time the system is upgraded with
|
||
anaconda. Some customizations can be placed in /etc/grub.d/40_custom or
|
||
/boot/grub2/custom.cfg and will survive running grub2-mkconfig.
|
||
|
||
[[updating-grub-2-configuration-on-uefi-systems]]
|
||
Updating GRUB 2 configuration on UEFI systems
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
To install or fix GRUB 2 on a UEFI system on Fedora 18 or newer, you
|
||
need to do four things:
|
||
|
||
[[create-an-esp]]
|
||
Create an ESP
|
||
^^^^^^^^^^^^^
|
||
|
||
UEFI firmware, in general, likes to boot from an EFI System Partition on
|
||
a disk with a GPT label. In `gdisk`, it looks something like this:
|
||
|
||
....
|
||
Number Start (sector) End (sector) Size Code Name
|
||
1 2048 264191 128.0 MiB EF00 EFI System
|
||
....
|
||
|
||
That partition should be formatted as FAT. If in doubt, FAT32 is a good
|
||
dialect of FAT to choose.
|
||
|
||
Fedora expects this partition to be mounted at `/boot/efi`.
|
||
|
||
[[install-the-bootloader-files]]
|
||
Install the bootloader files
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
If you don't already have the relevant packages installed, do for Fedora
|
||
22 and later versions with link:dnf[DNF] or with YUM for older Fedora
|
||
releases:
|
||
|
||
....
|
||
dnf install grub2-efi grub2-efi-modules shim
|
||
yum install grub2-efi grub2-efi-modules shim
|
||
....
|
||
|
||
If you do, then try:
|
||
|
||
....
|
||
dnf reinstall grub2-efi grub2-efi-modules shim
|
||
yum reinstall grub2-efi grub2-efi-modules shim
|
||
....
|
||
|
||
instead.
|
||
|
||
Make sure that /boot/efi is mounted when you do this.
|
||
|
||
This installs the signed shim and the GRUB 2 binary.
|
||
|
||
[[create-a-grub-2-configuration]]
|
||
Create a GRUB 2 configuration
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
Under EFI, GRUB 2 looks for its configuration in
|
||
`/boot/efi/EFI/fedora/grub.cfg`. For newly installed kernels to work,
|
||
`grubby` expects `/etc/grub2-efi.cfg` to be a symlink to the real
|
||
grub.cfg (i.e. `/boot/efi/EFI/fedora/grub.cfg`).
|
||
|
||
If you already have a grub 2 EFI config file, you should be okay. If
|
||
not, grub2-mkconfig can help, but your mileage may vary.
|
||
|
||
` grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg`
|
||
|
||
[[create-a-boot-menu-entry]]
|
||
Create a boot menu entry
|
||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
TL;DR: This should happen automatically. If it doesn't, read on.
|
||
|
||
When you power on your system, your firmware will look for EFI variables
|
||
that tell it how to boot. If you're already booted in EFI mode and EFI
|
||
runtime services are working correctly, you can configure your boot menu
|
||
with `efibootmgr`. If not, you'll have to bootstrap the process.
|
||
|
||
Fortunately, `shim` can help you bootstrap. The EFI program
|
||
`/boot/efi/EFI/BOOT/fallback.efi` will look for files called `BOOT.CSV`
|
||
in your ESP and will add boot entries corresponding to them, *if such
|
||
entries do not already appear to exist*. `shim` provides a `BOOT.CSV`
|
||
file that will add an entry for `grub2-efi` for you. So just using the
|
||
EFI Shell to invoke `fallback.efi` should do the trick. You can do this
|
||
with commands like:
|
||
|
||
....
|
||
> fs0:
|
||
> cd EFI\BOOT
|
||
> fallback.efi
|
||
....
|
||
|
||
If you have no boot entries at all, then just booting off your disk in
|
||
UEFI mode should automatically invoke `/boot/efi/EFI/BOOT/BOOTX64.EFI`,
|
||
which will, in turn, invoke `fallback.efi`.
|
||
|
||
If you already have incorrect boot entries, you'll either need to delete
|
||
them or to modify `BOOT.CSV` to create new entries with different names.
|
||
|
||
[[adding-other-operating-systems-to-the-grub-2-menu]]
|
||
Adding Other operating systems to the GRUB 2 menu
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
grub2-mkconfig will add entries for other operating systems it can find.
|
||
That will be done based on the output of the os-prober tool.
|
||
|
||
That might however not work so well, especially not for booting other
|
||
Linux operating systems, and especially not on UEFI systems. See
|
||
http://www.gnu.org/software/grub/manual/grub.html#Multi_002dboot-manual-config
|
||
.
|
||
|
||
[[setting-default-entry]]
|
||
Setting default entry
|
||
~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Due to `grub2-mkconfig` (and os-prober) we cannot predict the order of
|
||
the entries in `/boot/grub2/grub.cfg`, so we set the default by
|
||
name/title instead.
|
||
|
||
Open `/etc/default/grub` and ensure this line exists:
|
||
|
||
....
|
||
GRUB_DEFAULT=saved
|
||
....
|
||
|
||
and ensure this line not exists:
|
||
|
||
....
|
||
GRUB_SAVEDEFAULT=true
|
||
....
|
||
|
||
or ensure this line exists:
|
||
|
||
....
|
||
GRUB_SAVEDEFAULT=false
|
||
....
|
||
|
||
Apply the change to `grub.cfg` by running:
|
||
|
||
....
|
||
grub2-mkconfig -o /boot/grub2/grub.cfg
|
||
....
|
||
|
||
Now list all possible menu entries
|
||
|
||
....
|
||
grep -P "submenu|^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2
|
||
....
|
||
|
||
Now set the desired default menu entry
|
||
|
||
....
|
||
grub2-set-default "<submenu title><menu entry title>"
|
||
....
|
||
|
||
Verify the default menu entry
|
||
|
||
....
|
||
grub2-editenv list
|
||
....
|
||
|
||
If you understand the risks involved and still want to directly modify
|
||
/boot/grub2/grub.cfg, here's how you can do it:
|
||
|
||
Edit /boot/grub2/grub.cfg, and change the line
|
||
|
||
....
|
||
set default="0"
|
||
....
|
||
|
||
to
|
||
|
||
....
|
||
set default="5"
|
||
....
|
||
|
||
[[encountering-the-dreaded-grub-2-boot-prompt]]
|
||
Encountering the dreaded GRUB 2 boot prompt
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
If improperly configured, GRUB 2 may fail to load and subsequently drop
|
||
to a boot prompt. To address this issue, proceed as follows:
|
||
|
||
\0. Load the XFS and LVM modules
|
||
|
||
....
|
||
insmod xfs
|
||
insmod lvm
|
||
....
|
||
|
||
\1. List the drives which GRUB 2 sees:
|
||
|
||
....
|
||
grub2> ls
|
||
....
|
||
|
||
\2. The output for a dos partition table /dev/sda with three partitons
|
||
will look something like this:
|
||
|
||
....
|
||
(hd0) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1)
|
||
....
|
||
|
||
\3. While the output for a gpt partition table /dev/sda with four
|
||
partitions will look something like this:
|
||
|
||
....
|
||
(hd0) (hd0,gpt4) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1)
|
||
....
|
||
|
||
\4. With this information you can now probe each partition of the drive
|
||
and locate your vmlinuz and initramfs files:
|
||
|
||
....
|
||
ls (hd0,1)/
|
||
....
|
||
|
||
Will list the files on /dev/sda1. If this partition contains /boot, the
|
||
output will show the full name of vmlinuz and initramfs.
|
||
|
||
\5. Armed with the location and full name of vmlinuz and initramfs you
|
||
can now boot your system.
|
||
|
||
5a. Declare your root partition:
|
||
|
||
....
|
||
grub> set root=(hd0,3)
|
||
....
|
||
|
||
5b. Declare the kernel you wish to use:
|
||
|
||
....
|
||
grub> linux (hd0,1)/vmlinuz-3.0.0-1.fc16.i686 root=/dev/sda3 rhgb quiet selinux=0
|
||
# NOTE : add other kernel args if you have need of them
|
||
# NOTE : change the numbers to match your system
|
||
....
|
||
|
||
5c. Declare the initrd to use:
|
||
|
||
....
|
||
|
||
grub> initrd (hd0,1)/initramfs-3.0.0-1.fc16.i686.img
|
||
# NOTE : change the numbers to match your system
|
||
....
|
||
|
||
5d. Instruct GRUB 2 to boot the chosen files:
|
||
|
||
....
|
||
grub> boot
|
||
....
|
||
|
||
\6. After boot, open a terminal.
|
||
|
||
\7. Issue the grub2-mkconfig command to re-create the grub.cfg file
|
||
grub2 needed to boot your system:
|
||
|
||
....
|
||
grub2-mkconfig -o /boot/grub2/grub.cfg
|
||
....
|
||
|
||
\8. Issue the grub2-install command to install grub2 to your hard drive
|
||
and make use of your config:
|
||
|
||
....
|
||
grub2-install --boot-directory=/boot /dev/sda
|
||
# Note: your drive may have another device name. Check for it with mount command output.
|
||
....
|
||
|
||
[[additional-scenario]]
|
||
Additional Scenario
|
||
~~~~~~~~~~~~~~~~~~~
|
||
|
||
It's also possible to boot into a _configfile_ that's located on another
|
||
partition. If the user is faced with such a scenario, as is often the
|
||
case with multi-boot systems containing Ubuntu and Fedora, the following
|
||
steps in the grub rescue shell might become useful to know:
|
||
|
||
....
|
||
insmod part_msdos
|
||
insmod xfs
|
||
insmod lvm
|
||
set root='hd0,msdos1'
|
||
configfile /grub2/grub.cfg
|
||
....
|
||
|
||
Where, *hd0,msdos1* is the pertinent _boot_ partition, which holds the
|
||
grub.cfg file.
|
||
|
||
[[other-grub-2-issues]]
|
||
Other GRUB 2 issues
|
||
~~~~~~~~~~~~~~~~~~~
|
||
|
||
''' Absent Floppy Disk ''': It has been reported by some users that GRUB
|
||
2 may fail to install on a partition's boot sector if the computer
|
||
floppy controller is activated in BIOS without an actual floppy disk
|
||
drive being present. A possible workaround is to run (post OS install)
|
||
from rescue mode:
|
||
|
||
....
|
||
grub2-install <target device> --no-floppy
|
||
....
|
||
|
||
[[setting-a-password-for-interactive-edit-mode]]
|
||
Setting a password for interactive edit mode
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
If you wish to password-protect GRUB2's interactive edit mode *but* you
|
||
do not want to require users to enter a password to do a plain, simple,
|
||
ordinary boot, create /etc/grub.d/01_users with the following lines:
|
||
|
||
....
|
||
cat << EOF
|
||
set superusers="root"
|
||
export superusers
|
||
password root secret
|
||
EOF
|
||
....
|
||
|
||
To apply your changes run:
|
||
|
||
....
|
||
grub2-mkconfig -o /boot/grub2/grub.cfg
|
||
....
|
||
|
||
You can encrypt the password by using pbkdf2. Use grub2-mkpasswd-pbkdf2
|
||
to encrypt the password, then replace the password line with:
|
||
|
||
....
|
||
password_pbkdf2 root grub.pbkdf2.sha512.10000.1B4BD9B60DE889A4C50AA9458C4044CBE129C9607B6231783F7E4E7191D8254C0732F4255178E2677BBE27D03186E44815EEFBAD82737D81C87F5D24313DDDE7.E9AEB53A46A16F30735E2558100D8340049A719474AEEE7E3F44C9C5201E2CA82221DCF2A12C39112A701292BF4AA071EB13E5EC8C8C84CC4B1A83304EA10F74
|
||
....
|
||
|
||
More details can be found at
|
||
https://help.ubuntu.com/community/Grub2/Passwords[Ubuntu Help: GRUB2
|
||
Passwords].
|
||
|
||
Starting from atleast Fedora 21, the `--md5pass` kickstart option must
|
||
be set using output from grub2-mkpasswd-pbkdf2.
|
||
|
||
[[using-old-graphics-modes-in-bootloader]]
|
||
Using old graphics modes in bootloader
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Terminal device is chosen with GRUB_TERMINAL; additional quote from
|
||
http://www.gnu.org/software/grub/manual/grub.html#Simple-configuration
|
||
|
||
Valid terminal output names depend on the platform, but may include
|
||
‘console’ (PC BIOS and EFI consoles), ‘serial’ (serial terminal),
|
||
‘gfxterm’ (graphics-mode output), ‘ofconsole’ (Open Firmware console),
|
||
or ‘vga_text’ (VGA text output, mainly useful with Coreboot).
|
||
|
||
The default is to use the platform's native terminal output.
|
||
|
||
The default in Fedora is gfxterm and to get the legacy graphics modes
|
||
you need to set GRUB_TERMINAL to right variable from the description
|
||
above in /etc/default/grub
|
||
|
||
[[enable-serial-console-in-grub]]
|
||
Enable Serial Console in Grub
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
To enable Serial console in grub add the following entry's to
|
||
/etc/default/grub
|
||
|
||
( Adjust baudrate/parity/bits/flow control to fit your environment and
|
||
cables)
|
||
|
||
....
|
||
GRUB_CMDLINE_LINUX='console=tty0 console=ttyS0,115200n8'
|
||
GRUB_TERMINAL=serial
|
||
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
|
||
....
|
||
|
||
And re-generate grub
|
||
|
||
`grub2-mkconfig -o /boot/grub2/grub.cfg`
|
||
|
||
[[further-reading]]
|
||
Further Reading
|
||
---------------
|
||
|
||
* http://www.gnu.org/software/grub/manual/grub.html
|
||
* Features/Grub2
|
||
* Anaconda/Features/Grub2Migration
|
||
'''
|
||
|
||
See a typo, something missing or out of date, or anything else which can be
|
||
improved? Edit this document at https://pagure.io/fedora-docs/quick-docs.
|