source: chapter10/grub.xml@ d6f618b

xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1
Last change on this file since d6f618b was d6f618b, checked in by Xi Ruoyao <xry111@…>, 11 months ago

Merge remote-tracking branch 'origin/trunk' into xry111/loongarch

  • Property mode set to 100644
File size: 13.7 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="ch-bootable-grub" role="wrap">
9 <?dbhtml filename="grub.html"?>
10
11 <sect1info condition="script">
12 <productname>grub</productname>
13 <productnumber>&grub-version;</productnumber>
14 <address>&grub-url;</address>
15 </sect1info>
16
17 <title>Using GRUB to Set Up the Boot Process</title>
18
19 <note>
20 <para>
21 This section assume your system has UEFI support and you wish to boot
22 LFS with UEFI and GRUB built following the instructions in Chapter 8.
23 </para>
24 <para>
25 If you've installed GRUB for UEFI with optional dependencies following
26 BLFS, you should skip this page, and configure GRUB with UEFI support
27 using the instructions provided in
28 <ulink url="&blfs-book;postlfs/grub-setup.html">the BLFS page</ulink>,
29 but replace <parameter>--target=x86_64-efi</parameter> with
30 <parameter>--target=loongarch64-efi</parameter> for the 64-bit
31 LoongArch system.
32 </para>
33 <para>
34 If your system does not support UEFI or you don't want to use it,
35 you'll need to figure out how to configure the booting process of
36 the system on your own.
37 </para>
38 </note>
39
40 <sect2>
41 <title>Introduction</title>
42
43 <warning><para>Configuring GRUB incorrectly can render your system
44 inoperable without an alternate boot device such as a CD-ROM or bootable
45 USB drive. This section is not required to boot your LFS system. You may
46 just want to modify your current boot loader, e.g. Grub-Legacy, GRUB2, or
47 LILO.</para></warning>
48
49 <para>Ensure that an emergency boot disk is ready to <quote>rescue</quote>
50 the computer if the computer becomes unusable (un-bootable). If you do not
51 already have a boot device, you can create one. To create a emergency
52 boot device for UEFI, consult section <quote>Create an Emergency Boot
53 Disk</quote> in
54 <ulink url="&blfs-book;postlfs/grub-setup.html">the BLFS page</ulink>.</para>
55
56 </sect2>
57
58 <sect2>
59 <title>Turn off Secure Boot</title>
60
61 <para>LFS does not have the essential packages to support Secure Boot.
62 To set up the boot process following the instructions in this section,
63 Secure Boot must be turned off from the configuration interface of the
64 firmware. Read the documentation provided by the manufacturer of your
65 system to find out how.</para>
66 </sect2>
67
68 <sect2>
69 <title>GRUB Naming Conventions</title>
70
71 <para>GRUB uses its own naming structure for drives and partitions in
72 the form of <emphasis>(hdn,m)</emphasis>, where <emphasis>n</emphasis>
73 is the hard drive number and <emphasis>m</emphasis> is the partition
74 number. The hard drive numbers start from zero, but the partition numbers
75 start from one for normal partitions (from five for extended partitions).
76 Note that this is different from earlier versions where
77 both numbers started from zero. For example, partition <filename
78 class="partition">sda1</filename> is <emphasis>(hd0,1)</emphasis> to
79 GRUB and <filename class="partition">sdb3</filename> is
80 <emphasis>(hd1,3)</emphasis>. In contrast to Linux, GRUB does not
81 consider CD-ROM drives to be hard drives. For example, if using a CD
82 on <filename class="partition">hdb</filename> and a second hard drive
83 on <filename class="partition">hdc</filename>, that second hard drive
84 would still be <emphasis>(hd1)</emphasis>.</para>
85
86 </sect2>
87
88 <sect2>
89 <title>Setting Up the Configuration</title>
90
91 <para>GRUB works by creating an EFI executable in the EFI System
92 Partition (ESP). You can find the ESP with:</para>
93
94<screen role="nodump"><userinput>fdisk -l | grep 'EFI System'</userinput></screen>
95
96 <para>If no ESP exists on your hard drive (for example, you are building
97 LFS on a fresh new system with a Live CD as the host distro), read
98 <ulink url="&blfs-book;postlfs/grub-setup.html">the BLFS page</ulink>
99 for the instruction to create an ESP on your hard drive.</para>
100
101 <para>If the ESP is not mounted at
102 <filename class="directory">/boot/efi</filename> (in the chroot),
103 mount it now:</para>
104
105<screen role="nodump"><userinput>mkdir -pv /boot/efi
106mount /boot/efi</userinput></screen>
107
108 <note>
109 <para>The path to the device node is intentionally omitted in the
110 command. We expect the entry for mounting the ESP to
111 <filename class="directory">/boot/efi</filename> is already in
112 <filename>/etc/fstab</filename>. Add the entry before running the
113 command if you forgot to create an entry for the ESP in
114 <xref linkend="ch-bootable-fstab"/>.</para>
115 </note>
116
117 <para>The location of the boot partition is a choice of the user that
118 affects the configuration. One recommendation is to have a separate small
119 (suggested size is 200 MB) partition just for boot information. That way
120 each build, whether LFS or some commercial distro, can access the same boot
121 files and access can be made from any booted system. If you choose to do
122 this, you will need to mount the separate partition, move all files in the
123 current <filename class="directory">/boot</filename> directory (e.g. the
124 Linux kernel you just built in the previous section) to the new partition.
125 You will then need to unmount the partition and remount it as <filename
126 class="directory">/boot</filename>. If you do this, be sure to update
127 <filename>/etc/fstab</filename>.</para>
128
129 <para>Leaving <filename class="directory">/boot</filename> on
130 the current LFS partition will also work, but configuration
131 for multiple systems is more difficult.</para>
132
133 <para>Using the above information, determine the appropriate
134 designator for the root partition (or boot partition, if a separate
135 one is used). For the following example, it is assumed that the root
136 (or separate boot) partition is <filename
137 class="partition">sda2</filename>.</para>
138
139 <para>Install the GRUB files into <filename
140 class="directory">/boot/grub</filename> and the GRUB EFI executable into
141 <filename>/boot/efi/EFI/BOOT/BOOTLOONGARCH64.EFI</filename>:</para>
142
143 <warning>
144 <para>The following command will overwrite
145 <filename>BOOTLOONGARCH64.EFI</filename>. Do not run the command if
146 this is not desired, for example, if it contains a third party boot
147 manager. You can backup it with <command>cp</command> as it's a
148 regular file.</para>
149 </warning>
150
151<screen role="nodump"><userinput>grub-install --removable</userinput></screen>
152
153 <note>
154 <para>
155 <parameter>--removable</parameter> may seem strange here. The UEFI
156 firmware searches EFI executables for boot loaders in a hardcoded
157 path, <filename>EFI/BOOT/BOOTLOONGARCH64.EFI</filename> in the ESP, and other
158 boot loader paths listed in the EFI variables. We've not installed
159 the utilities for manipulating EFI variables so we need to install
160 the EFI executable into the hardcoded path. The hardcoded path is
161 usually used by removable devices (for example, USB thumb devices)
162 so the <command>grub-install</command> option for this purpose is
163 named <parameter>--removable</parameter>.
164 </para>
165 <para>
166 UEFI implementation usually prefers the boot loaders with paths
167 recorded in an EFI variable, to the boot loader with the hardcoded
168 search path. You may need to invoke the boot device selection menu
169 or setting interface of your EFI firmware on next boot to explicitly
170 select the bootloader.
171 </para>
172 <para>
173 Some UEFI implementation may completely skip the hardcoded path if
174 there are other boot loaders in the same hard drive with paths
175 recorded in an EFI variable. Then you need to create an EFI
176 variable for the newly installed boot loader. Install
177 <ulink url="&blfs-book;postlfs/efibootmgr.html">efibootmgr</ulink>,
178 then run the following commands:
179
180<screen role="nodump"><userinput>mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars
181efibootmgr -B -L LFS || true
182efibootmgr -c -L LFS -l '\EFI\BOOT\BOOTLOONGARCH64.EFI' -d /dev/sda
183umount /sys/firmware/efi/efivars</userinput></screen>
184
185 Replace <filename>/dev/sda</filename> with the device node of the
186 hard drive where you are installing GRUB into.
187 </para>
188 </note>
189
190<!-- This does not seem to be true any more
191 <note><para><application>grub-install</application> is a script and calls another
192 program, grub-probe, that may fail with a message "cannot stat `/dev/root'".
193 If so, create a temporary symbolic link from your root partition to /dev/root:</para>
194
195<screen role="nodump"><userinput>ln -sv /dev/sda2 /dev/root</userinput></screen>
196
197 <para>The symbolic link will only be present until the system is rebooted.
198 The link is only needed for the installation procedure.
199 </para></note>
200-->
201 </sect2>
202
203 <sect2 id="grub-cfg">
204 <title>Creating the GRUB Configuration File</title>
205
206 <para>Generate <filename>/boot/grub/grub.cfg</filename>:</para>
207
208 <screen><userinput>cat &gt; /boot/grub/grub.cfg &lt;&lt; "EOF"
209<literal># Begin /boot/grub/grub.cfg
210set default=0
211set timeout=5
212
213insmod part_gpt
214insmod ext2
215set root=(hd0,2)
216
217insmod all_video
218
219menuentry "GNU/Linux, Linux &linux-version;-lfs-&version;" {
220 linux /boot/vmlinuz-&linux-version;-lfs-&version; root=/dev/sda2 ro
221}</literal>
222EOF</userinput></screen>
223
224 <para>
225 The <command>insmod</command> commands load the
226 <application>GRUB</application> modules named
227 <filename>part_gpt</filename> and <filename>ext2</filename>.
228 Despite the naming, <filename>ext2</filename> actually supports
229 <systemitem class='filesystem'>ext2</systemitem>,
230 <systemitem class='filesystem'>ext3</systemitem>, and
231 <systemitem class='filesystem'>ext4</systemitem> filesystems.
232 The <command>grub-install</command> command has embedded some modules
233 into the main <application>GRUB</application> image (installed into
234 the MBR or the GRUB BIOS partition) to access the other modules
235 (in <filename class='directory'>/boot/grub/i386-pc</filename>) without
236 a chicken-or-egg issue, so with a typical configuration these two
237 modules are already embedded and those two <command>insmod</command>
238 commands will do nothing. But they do no harm anyway, and they may
239 be needed with some rare configurations.
240 </para>
241
242 <note><para>From <application>GRUB</application>'s perspective, the
243 kernel files are relative to the partition used. If you
244 used a separate /boot partition, remove /boot from the above
245 <emphasis>linux</emphasis> line. You will also need to change the
246 <emphasis>set root</emphasis> line to point to the boot partition.
247 </para></note>
248
249 <note>
250 <para>The GRUB designator for a partition may change if you added or
251 removed some disks (including removable disks like USB thumb devices).
252 The change may cause boot failure because
253 <filename>grub.cfg</filename> refers to some <quote>old</quote>
254 designators. If you wish to avoid such a problem, you may use
255 the UUID of a partition and the UUID of a filesystem instead of a GRUB designator to
256 specify a device.
257 Run <command>lsblk -o UUID,PARTUUID,PATH,MOUNTPOINT</command> to show
258 the UUIDs of your filesystems (in the <literal>UUID</literal> column) and
259 partitions (in the <literal>PARTUUID</literal> column). Then replace
260 <literal>set root=(hdx,y)</literal> with
261 <literal>search --set=root --fs-uuid <replaceable>&lt;UUID of the filesystem
262 where the kernel is installed&gt;</replaceable></literal>, and replace
263 <literal>root=/dev/sda2</literal> with
264 <literal>root=PARTUUID=<replaceable>&lt;UUID of the partition where LFS
265 is built&gt;</replaceable></literal>.</para>
266 <para>Note that the UUID of a partition is completely different from the
267 UUID of the filesystem in this partition. Some online resources may
268 instruct you to use
269 <literal>root=UUID=<replaceable>&lt;filesystem UUID&gt;</replaceable></literal>
270 instead of
271 <literal>root=PARTUUID=<replaceable>&lt;partition UUID&gt;</replaceable></literal>,
272 but doing so will require an initramfs, which is beyond the scope of
273 LFS.</para>
274 <para>The name of the device node for a partition in
275 <filename class='directory'>/dev</filename> may also change (this is less
276 likely than a GRUB designator change). You can also replace
277 paths to device nodes like <literal>/dev/sda1</literal> with
278 <literal>PARTUUID=<replaceable>&lt;partition UUID&gt;</replaceable></literal>,
279 in <filename>/etc/fstab</filename>, to avoid a potential boot failure
280 in case the device node name has changed.</para>
281 </note>
282
283 <para>GRUB is an extremely powerful program and it provides a tremendous
284 number of options for booting from a wide variety of devices, operating
285 systems, and partition types. There are also many options for customization
286 such as graphical splash screens, playing sounds, mouse input, etc. The
287 details of these options are beyond the scope of this introduction.</para>
288
289 <caution><para>There is a command, <application>grub-mkconfig</application>, that
290 can write a configuration file automatically. It uses a set of scripts in
291 /etc/grub.d/ and will destroy any customizations that you make. These scripts
292 are designed primarily for non-source distributions and are not recommended for
293 LFS. If you install a commercial Linux distribution, there is a good chance
294 that this program will be run. Be sure to back up your grub.cfg file.</para></caution>
295
296 </sect2>
297
298</sect1>
Note: See TracBrowser for help on using the repository browser.