When is the bios_boot partition required?
This document (000021199) is provided subject to the disclaimer at the end of this document.
Environment
SUSE Linux Enterprise Server 12
Situation
A partition with the type "bios_boot" or "BIOS boot" or "bios_grub" is required. The name is dependent on which tool is used to create the partition.
The bios_grub/bios_boot partition is owned and used solely by grub2 for embedding its core images.
The bios_grub/bios_boot partition can be added at the beginning or end of the partition list, or anywhere in between.
As long as it exists, grub2 will use the partition.
This is NOT the same as the "legacy_boot" partition type.
Resolution
The "Disklabel type" MUST be "gpt" or the "bios_boot" partition type will not be available to be used.
Example using fdisk to create the partition:
fdisk /dev/sdX Type the letter "n" (add a new partition) Partition number: 1 First sector: (default) Last sector: +10M Then, type "t" (change a partition type) Enter the number "4" to select the partition type. Or "L" to see the full list of partition types. 4 BIOS boot 21686148-6449-6E6F-744E-656564454649 fdisk -l /dev/sdc <...> Disklabel type: gpt Disk identifier: 909A3F84-49D4-8649-BF52-224D9A4B1B13 Device Start End Sectors Size Type /dev/sdc1 2048 22527 20480 10M BIOS boot
Example using parted to create the partition:
parted /dev/sdX mkpart primary ext2 12MB 22MB set 2 bios_grub on parted /dev/sdc print Model: VMware Virtual disk (scsi) Disk /dev/sdc: 12.9GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 11.5MB 10.5MB bios_grub 2 11.5MB 22.0MB 10.5MB primary bios_grub
Once the partition is created in parted with the "mkpart" subcommand, then use the "set" command to set the flag.
(parted) help set set NUMBER FLAG STATE change the FLAG on partition NUMBER NUMBER is the partition number used by Linux. On MS-DOS disk labels, the primary partitions number from 1 to 4, logical partitions from 5 onwards. FLAG is one of: boot, root, swap, hidden, raid, lvm, lba, hp-service, palo, prep, msftres, bios_grub, atvrecv, diag, legacy_boot, msftdata, irst, esp, type select 'bios_grub' (GPT) - Enable this to record that the selected partition is a GRUB BIOS partition.
Cause
2023-03-05 16:04:32 <1> update-bootloader-5483 run_command.293:'/usr/lib/bootloader/grub2/install' = 0, output: <<<<<<<<<<<<<<<< target = i386-pc + /usr/sbin/grub2-install --target=i386-pc --force --skip-fs-probe /dev/disk/by-id/scsi-361866da092a8220027c6c6007db6579e Installing for i386-pc platform. /usr/sbin/grub2-install: warning: File system `ext2' doesn't support embedding. /usr/sbin/grub2-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.. Installation finished. No error reported.This indicates a "bios_boot" partition is needed.
Additional Information
It is used to reserve enough space for embedding grub's second stage bootloader (core.img) loaded in sequence by grub's first stage bootloader in MBR. Without it the second stage bootloader has to be placed on the filesystem and use raw block's LBA recorded in first stage (aka blocklist) to address it, therefore very sensitive to failure as the underlying block could be moved around silently.
So to speak, if we want to have the booting to be reliable, the bios_grub has to be used as it can offer an independent space not interfered by the filesystem and/or abstraction disks (lvm, raid, crypto). Therefore the first stage (i.e. grub in the MBR) can safely use LBA to load and run the embedded second stage with which is configured to hold the true knowledge about the target device going to be booted.
The fdisk code shows the GUID of the device:
https://github.com/util-linux/util-linux/blob/master/include/pt-gpt-partnames.h#L20 /* Hah!IdontneedEFI */ DEF_GUID("21686148-6449-6E6F-744E-656564454649", N_("BIOS boot")),
When YaST is used in SLES12 or SLES15 to build the storage layout and GPT disk label is used but no "bios_boot" partition is created a warning is displayed:
https://github.com/yast/yast-storage/pull/137 Warning: There is no partition of type bios_grub present. Such a partition is recommended (required with Btrfs) when Grub2 is installed in the MBR of a GPT disk. It must be unformatted and approximately 1MB large."
The "BIOS Boot Partition" is noted in the screenshot here:
https://documentation.suse.com/sles/15-SP5/html/SLES-all/images/install_partitioner_expert.png
Found in the documentation:
https://documentation.suse.com/sles/15-SP5/html/SLES-all/cha-expert-partitioner.html#sec-expert-partitioner
https://en.wikipedia.org/wiki/BIOS_boot_partition
https://wikipedia.org/wiki/GUID_Partition_Table
https://www.gnu.org/software/grub/manual/grub/html_node/BIOS-installation.html#BIOS-installation
Additional info about fdisk:
https://en.opensuse.org/SDB:Partitioning
https://en.opensuse.org/openSUSE:UEFI
[1] UEFI is meant to replace and extend the old BIOS firmware.
Disclaimer
This Support Knowledgebase provides a valuable tool for SUSE customers and parties interested in our products and solutions to acquire information, ideas and learn from one another. Materials are provided for informational, personal or non-commercial use within your organization and are presented "AS IS" WITHOUT WARRANTY OF ANY KIND.
- Document ID:000021199
- Creation Date: 07-Sep-2023
- Modified Date:08-Sep-2023
-
- SUSE Linux Enterprise Server
- SUSE Linux Enterprise Server for SAP Applications
For questions or concerns with the SUSE Knowledgebase please contact: tidfeedback[at]suse.com