summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/modules/hdmap36
-rw-r--r--backend/modules/partitions18
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)