diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh index cffe6a746..0ce0f1eb7 100644 --- a/lib/functions/image/partitioning.sh +++ b/lib/functions/image/partitioning.sh @@ -89,6 +89,7 @@ function prepare_partitions() { # default BOOTSIZE to use if not specified DEFAULT_BOOTSIZE=256 # MiB + SECTOR_SIZE=${SECTOR_SIZE:-512} # size of UEFI partition. 0 for no UEFI. Don't mix UEFISIZE>0 and BOOTSIZE>0 UEFISIZE=${UEFISIZE:-0} BIOSSIZE=${BIOSSIZE:-0} @@ -242,7 +243,16 @@ function prepare_partitions() { ) # Output the partitioning options from above to the debug log first and then pipe it into the 'sfdisk' command display_alert "Partitioning with the following options" "$partition_script_output" "debug" - echo "${partition_script_output}" | run_host_command_logged sfdisk "${SDCARD}".raw || exit_with_error "Partitioning failed!" + + # Check sfdisk version to determine if --sector-size is supported + sfdisk_version=$(sfdisk --version | awk '/util-linux/ {print $NF}') + sfdisk_version_num=$(echo "$sfdisk_version" | awk -F. '{printf "%d%02d%02d\n", $1, $2, $3}') + if [ "$sfdisk_version_num" -ge "24100" ]; then + echo "${partition_script_output}" | run_host_command_logged sfdisk --sector-size "$SECTOR_SIZE" "${SDCARD}".raw || exit_with_error "Partitioning failed!" + else + echo "${partition_script_output}" | run_host_command_logged sfdisk "${SDCARD}".raw || exit_with_error "Partitioning failed!" + fi + fi call_extension_method "post_create_partitions" <<- 'POST_CREATE_PARTITIONS' @@ -256,7 +266,11 @@ function prepare_partitions() { declare -g LOOP #--partscan is using to force the kernel for scaning partition table in preventing of partprobe errors - LOOP=$(losetup --show --partscan --find "${SDCARD}".raw) || exit_with_error "Unable to find free loop device" + if [ "$sfdisk_version_num" -ge "24100" ]; then + LOOP=$(losetup --show --partscan --find -b "$SECTOR_SIZE" "${SDCARD}".raw) || exit_with_error "Unable to find free loop device" + else + LOOP=$(losetup --show --partscan --find "${SDCARD}".raw) || exit_with_error "Unable to find free loop device" + fi display_alert "Allocated loop device" "LOOP=${LOOP}" # loop device was grabbed here, unlock