mirror of
https://pagure.io/fedora-docs/quick-docs.git
synced 2024-11-28 14:56:35 +00:00
483 lines
13 KiB
Text
483 lines
13 KiB
Text
|
= GRUB 2
|
|||
|
|
|||
|
'''
|
|||
|
|
|||
|
[NOTE]
|
|||
|
======
|
|||
|
|
|||
|
This page was automatically converted from https://fedoraproject.org/wiki/GRUB_2
|
|||
|
|
|||
|
It is probably
|
|||
|
|
|||
|
* Badly formatted
|
|||
|
* Missing graphics and tables that do not covert 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/fedora-howto
|
|||
|
|
|||
|
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/fedora-howto.
|