70 lines
3.1 KiB
Diff
70 lines
3.1 KiB
Diff
From 1ca518c2a0e675ace956ef71bc79d67e4990562b Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Zaoral?= <lzaoral@redhat.com>
|
|
Date: Fri, 7 Mar 2025 13:03:14 +0100
|
|
Subject: [PATCH] 445_guess_bootloader: fix PReP Boot detection on GPT layouts
|
|
(#3420)
|
|
|
|
In layout/save/default/445_guess_bootloader.sh
|
|
fix PPC PReP Boot detection on GPT formatted disks
|
|
by checking for a "part ... prep ..." entry in disklayout.conf
|
|
as in finalize/Linux-ppc64/680_install_PPC_bootlist.sh
|
|
The before used 'file $disk_device' output is not stable.
|
|
In particular 'grep' for "ID=0x41" (PPC PReP Boot)
|
|
in the 'file' output does not work on GPT formatted disks.
|
|
Apparently 'file' detects the GPT protective MBR ("ID=0xee").
|
|
For example on PPC64le with PowerNV like
|
|
# file -s /dev/sdb
|
|
/dev/sdb: DOS/MBR boot sector; partition 1 : ID=0xee, ...
|
|
# parted -s /dev/sdb print
|
|
Partition Table: gpt
|
|
Disk Flags: pmbr_boot
|
|
Number ... Flags
|
|
1 ... prep
|
|
And also on x86_64 with a EFI system partition (ID=0xEF) like
|
|
# file -s /dev/nvme0n1
|
|
/dev/nvme0n1: DOS/MBR boot sector; partition 1 : ID=0xee, ...
|
|
# parted -s /dev/nvme0n1 print
|
|
Partition Table: gpt
|
|
Number ... Flags
|
|
1 ... boot, esp
|
|
|
|
(cherry picked from commit 1ca518c2a0e675ace956ef71bc79d67e4990562b)
|
|
---
|
|
.../layout/save/default/445_guess_bootloader.sh | 15 +++++++++------
|
|
1 file changed, 9 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/usr/share/rear/layout/save/default/445_guess_bootloader.sh b/usr/share/rear/layout/save/default/445_guess_bootloader.sh
|
|
index 1beffc9a9..f10a3834c 100644
|
|
--- a/usr/share/rear/layout/save/default/445_guess_bootloader.sh
|
|
+++ b/usr/share/rear/layout/save/default/445_guess_bootloader.sh
|
|
@@ -47,6 +47,15 @@ if [ "$ARCH" = "Linux-arm" ] ; then
|
|
return
|
|
fi
|
|
|
|
+# Check if any disk contains a PPC PReP boot partition.
|
|
+# Detection taken from usr/share/rear/finalize/Linux-ppc64/680_install_PPC_bootlist.sh
|
|
+disk_device="$( awk -F ' ' '/^part / {if ($6 ~ /prep/) {print $2}}' $LAYOUT_FILE )"
|
|
+if test "$disk_device" ; then
|
|
+ LogPrint "Using guessed bootloader 'PPC' for 'rear recover' (found PPC PReP boot partition on $disk_device)"
|
|
+ echo "PPC" >$bootloader_file
|
|
+ return
|
|
+fi
|
|
+
|
|
# Finally guess the used bootloader by inspecting the first bytes on all disks
|
|
# and use the first one that matches a known bootloader string:
|
|
for block_device in /sys/block/* ; do
|
|
@@ -54,12 +63,6 @@ for block_device in /sys/block/* ; do
|
|
# Continue with the next block device when the current block device is not a disk that can be used for booting:
|
|
[[ $blockd = hd* || $blockd = sd* || $blockd = cciss* || $blockd = vd* || $blockd = xvd* || $blockd = nvme* || $blockd = mmcblk* || $blockd = dasd* ]] || continue
|
|
disk_device=$( get_device_name $block_device )
|
|
- # Check if the disk contains a PPC PreP boot partition (ID=0x41):
|
|
- if file -s $disk_device | grep -q "ID=0x41" ; then
|
|
- LogPrint "Using guessed bootloader 'PPC' (found PPC PreP boot partition 'ID=0x41' on $disk_device)"
|
|
- echo "PPC" >$bootloader_file
|
|
- return
|
|
- fi
|
|
# Get all strings in the first 512*4=2048 bytes on the disk:
|
|
bootloader_area_strings_file="$TMP_DIR/bootloader_area_strings"
|
|
block_size=$( get_block_size ${disk_device##*/} )
|
|
|