xref: /freebsd/stand/efi/gptboot/gptboot.efi.8 (revision 19fae0f66023a97a9b464b3beeeabb2081f575b3)
1.\" Copyright (c) 2013 Warren Block All rights reserved.
2.\" Copyright (c) 2021 Warner Losh
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\"
13.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23.\" SUCH DAMAGE.
24.\"
25.\" $FreeBSD$
26.\"
27.Dd April 13, 2023
28.Dt GPTBOOT.EFI 8
29.Os
30.Sh NAME
31.Nm gptboot.efi
32.Nd GPT bootcode for UFS on UEFI computers
33.Sh DESCRIPTION
34.Nm
35is used on UEFI computers to boot from a UFS partition on a
36GPT-partitioned disk.
37.Nm
38is installed in the EFI System Partition (ESP).
39For BIOS-based computers,
40see
41.Xr gptboot 8
42for details.
43While conceptually similar, the details differ.
44.Nm
45works only with UFS root file systems.
46Users with ZFS partitions should use
47.Xr loader.efi 8
48with
49.Xr bectl 8
50to control what dataset is used for root.
51.Pp
52What UEFI computers boot is usually controlled via the mechanisms explained in
53.Xr efibootmgr 8
54using
55.Xr loader.efi 8
56or
57.Xr boot1.efi 8 .
58However, some setups cannot use those mechanisms.
59When the users cannot rely on host-supplied UEFI variables
60or they want the contents of the media alone to decide root,
61.Nm
62accomplishes these goals.
63.Pp
64When it starts,
65.Nm
66first reads the GPT and determines which drive and partition to
67boot from, as described under
68.Sx BOOTING ,
69below.
70If it does not find an eligible partition, it returns to the UEFI
71firmware.
72The firmware will then try the next bootable item in the UEFI Boot Manager's
73list, if any, usually a different disk.
74.Sh IMPLEMENTATION NOTES
75The GPT standard allows a variable number of partitions, but
76.Nm
77only boots from tables with 128 partitions or less.
78.Sh PARTITION ATTRIBUTES
79.Nm
80checks and manages several attributes of GPT UFS partitions.
81These flags are
82.Fx
83specific and non-standard.
84.Bl -tag -width ".Cm bootfailed"
85.It Cm bootme
86Attempt to boot from this partition.
87If more than one partition has the
88.Cm bootme
89attribute set,
90.Nm
91will attempt to boot each one until successful.
92.It Cm bootonce
93Attempt to boot from this partition only one time.
94Setting this attribute with
95.Xr gpart 8
96automatically also sets the
97.Cm bootme
98attribute.
99Multiple partitions may have the
100.Cm bootonce
101and
102.Cm bootme
103attributes set.
104.It Cm bootfailed
105The
106.Cm bootfailed
107attribute marks partitions that had the
108.Cm bootonce
109attribute set, but failed to boot.
110This attribute is managed by the system.
111See
112.Sx "BOOTING"
113and
114.Sx "POST-BOOT ACTIONS"
115below for details.
116.El
117.Sh USAGE
118For normal usage, the user does not have to set or manage any of the
119partition attributes.
120.Nm
121will boot from the first UFS partition found on the device.
122.Pp
123The
124.Cm bootonce
125attribute can be used for testing an upgraded operating system on
126an already-working computer.
127The existing system partition is left untouched, and the new version
128of the operating system to be tested is installed on another partition.
129The
130.Cm bootonce
131attribute is set on that new test partition.
132The next boot is attempted from the test partition.
133Success or failure will be shown in the system log files.
134After a successful boot of the test partition, a user script can check
135the logs and change the
136.Cm bootme
137attributes so the test partition becomes the new system partition.
138Because the
139.Cm bootonce
140attribute is cleared after an attempted boot, a failed boot will not
141leave the system attempting to boot from a partition that will never
142succeed.
143Instead, the system will boot from the older, known-working operating
144system that has not been modified.
145If the
146.Cm bootme
147attribute is set on any partitions, booting will be attempted from them
148first.
149If no partitions with
150.Cm bootme
151attributes are found, booting will be attempted from the first UFS
152partition found.
153.Sh BOOTING
154.Nm
155first reads the partition table.
156All
157.Cm freebsd-ufs
158partitions with only the
159.Cm bootonce
160attribute set, indicating a failed boot, are set to
161.Cm bootfailed .
162.Nm
163then scans through all of the
164.Cm freebsd-ufs
165partitions.
166Boot behavior depends on the combination of
167.Cm bootme
168and
169.Cm bootonce
170attributes set on those partitions.
171.Bl -tag -width ".Cm bootonce + .Cm bootme"
172.It Cm bootonce + Cm bootme
173Highest priority: booting is attempted from each of the
174.Cm freebsd-ufs
175partitions with both of these attributes.
176On each partition, the
177.Cm bootme
178attribute is removed and the boot attempted.
179.It Cm bootme
180Middle priority: booting is attempted from each of the
181.Cm freebsd-ufs
182partitions with the
183.Cm bootme
184attribute.
185.El
186.Pp
187If neither
188.Cm bootonce
189nor
190.Cm bootme
191attributes are found on any partitions, booting is attempted from the
192first
193.Cm freebsd-ufs
194partition on the disk.
195.Sh POST-BOOT ACTIONS
196The startup script
197.Pa /etc/rc.d/gptboot
198checks the attributes of
199.Cm freebsd-ufs
200partitions on all GPT disks.
201Partitions with the
202.Cm bootfailed
203attribute generate a
204.Dq boot from X failed
205system log message.
206Partitions with only the
207.Cm bootonce
208attribute, indicating a partition that successfully booted, generate a
209.Dq boot from X succeeded
210system log message.
211The
212.Cm bootfailed
213attributes are cleared from all the partitions.
214The
215.Cm bootonce
216attribute is cleared from the partition that successfully booted.
217There is normally only one of these.
218.Sh FILES
219.Bl -tag -width /boot/gptboot.efi -compact
220.It Pa /boot/gptboot.efi
221bootcode binary
222.It Pa /boot/efi/efi/boot/bootx64.efi
223Default boot loader for amd64 systems.
224.It Pa /boot/efi/efi/boot/bootaa64.efi
225Default boot loader for arm64 systems.
226.It Pa /boot/efi/efi/boot/bootarm.efi
227Default boot loader for arm systems.
228.It Pa /boot/efi/efi/boot/bootriscv64.efi
229Default boot loader for riscv systems.
230.El
231.Sh EXAMPLES
232.Nm
233is installed in the ESP with
234.Xr cp 1 .
235.Pp
236Install
237.Nm
238into the ESP for the system.
239This assumes the ESP is mounted in the standard
240.Pa /boot/efi
241directory.
242For amd64, use the following
243.Bd -literal -offset indent -compact
244cp /boot/gptboot.efi /boot/efi/efi/boot/bootx64.efi
245.Ed
246For other systems, use the file listed in the
247.Sx FILES
248section.
249.Pp
250Set the
251.Cm bootme
252attribute for partition 2:
253.Bd -literal -offset indent
254gpart set -a bootme -i 2 ada0
255.Ed
256.Pp
257Set the
258.Cm bootonce
259attribute for partition 2, automatically also setting the
260.Cm bootme
261attribute:
262.Bd -literal -offset indent
263gpart set -a bootonce -i 2 ada0
264.Ed
265.Sh SEE ALSO
266.Xr rc.conf 5 ,
267.Xr boot 8 ,
268.Xr efibootmgr 8 ,
269.Xr gpart 8 ,
270.Xr gptboot 8 ,
271.Xr loader.efi 8
272.Sh HISTORY
273.Nm
274appeared in
275.Fx 13.0
276.Sh AUTHORS
277This manual page was written by
278.An Warner Losh Aq imp@FreeBSD.org .
279It is based heavily on the
280.Xr gptboot 8
281man page by
282.An Warren Block Aq wblock@FreeBSD.org .
283