From 841662c37f1c12887a2be25abba25bffd390d759 Mon Sep 17 00:00:00 2001 From: Andreas Loibl Date: Tue, 6 May 2014 23:40:51 +0200 Subject: added /boot/efi detection for hdmap --- backend/modules/hdmap | 36 ++++++++++++++++++++++++++++++++++-- backend/modules/partitions | 18 ++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/backend/modules/hdmap b/backend/modules/hdmap index ec7af08..09e2b91 100644 --- a/backend/modules/hdmap +++ b/backend/modules/hdmap @@ -326,10 +326,42 @@ function fill_hdmap() hdmap_set "$( ( echo "$cfg_hdmap" - root_disk="$(get_disk "$(hdmap_get device of mountpoint /)")" + root_disk="$(get_disk "$(hdmap_get device of mountpoint /)")" + efi_part="$(hdmap_get device of mountpoint /boot/efi)" + for part in $(list_efi_partitions | grep "$root_disk"; list_efi_partitions | grep -v "$root_disk") + do + # prefer EFI partition on root disk + if [ -z "$efi_part" ]; then + # preselect the first of the EFI partitions found + echo "$part:/boot/efi::auto" + efi_part="$part" + else + # list other possible EFI partitions in hdmap but don't select them + echo "$part:::" + fi + done for part in $(list_partitions -usage filesystem) do - if is_removeable "$part" && [ "$(get_disk "$part")" != "$root_disk" ]; then + disk="$(get_disk "$part")" + if [ -z "$efi_part" ] && [ "$disk" = "$root_disk" ] && \ + [ "$(get_filesystem_type $part)" = "DOS" ]; then + case "$(blkid -p -s PTTYPE -o value "$disk")" in + gpt) + efi_part="$part" + ;; + dos) + # only primary MSDOS partitions can be EFI partitions + partnr="${part/$disk}" + partnr="${partnr//[^0-9]}" + [ -n "$partnr" -a "$partnr" -ge 1 -a "$partnr" -le 4 ] && efi_part="$part" + ;; + esac + if [ "$efi_part" ]; then + echo "$efi_part:/boot/efi::auto" + continue + fi + fi + if is_removeable "$part" && [ "$disk" != "$root_disk" ]; then echo "$part:::" else echo "$part:/media/$(basename "$part")::auto" diff --git a/backend/modules/partitions b/backend/modules/partitions index b586d17..9af0b96 100644 --- a/backend/modules/partitions +++ b/backend/modules/partitions @@ -169,6 +169,24 @@ function list_linux_partitions() ) | sort -u } +# Synopsis: list_efi_partitions +# +# This function lists all partitions from the disks (by list_all_disks) which have partition Id 0xef (= EFI) and DOS filesystem +# Output example: +# /dev/sda1 +# /dev/sdb1 +function list_linux_partitions() +{ + for part in $(list_all_partitions) + do + case "$(blkid -p -s PART_ENTRY_TYPE -o value "$part")" in + 0xef|c12a7328-f81f-11d2-ba4b-00a0c93ec93b) + [ "$(get_filesystem_type $part)" = "DOS" ] && echo "$part" + ;; + esac + done +} + # Synopsis: list_swap_partitions # # This function lists all partitions or lvm from the disks (by list_all_disks) which have partition Id 0x82 (= Linux swap) -- cgit v1.0