From 5331993f8ceb72e794064702b8e7e48adf43e739 Mon Sep 17 00:00:00 2001 From: Kamil Dziezyk Date: Fri, 20 Nov 2020 12:44:02 +0100 Subject: [PATCH] arm-autonomy/xenguest-mkimage: check if partition fits disk size Check if partition defined with '--disk-add-part=*' will fit in disk size defined with '--disk-size=*'. Change-Id: Ide87fe541d050497b4f2e5b5b47c1bcac8f5d37a Issue-Id: SCM-1515 Signed-off-by: Kamil Dziezyk Signed-off-by: Jon Mason --- .../xenguest/files/xenguest-mkimage | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/meta-arm-autonomy/recipes-extended/xenguest/files/xenguest-mkimage b/meta-arm-autonomy/recipes-extended/xenguest/files/xenguest-mkimage index c133e0ee..8543c010 100755 --- a/meta-arm-autonomy/recipes-extended/xenguest/files/xenguest-mkimage +++ b/meta-arm-autonomy/recipes-extended/xenguest/files/xenguest-mkimage @@ -412,13 +412,53 @@ check_size() { exit 1 } +disk_config_get_size() { + disksize=$(echo -e "$( . ${IMAGE_TMPDIR}/disk.cfg && echo $DISK_SIZE)") + check_size "${disksize}" +} + +disk_config_get_parts() { + echo -e "$( . ${IMAGE_TMPDIR}/disk.cfg && \ + typeset -p | awk '$3 ~ /^DISK_PART/ { print $3 }')" +} + +disk_config_get_free_space() { + disk_usage="0" + for partinfo in $(disk_config_get_parts) + do + partsize=$(echo "${partinfo}" | cut -d '"' -f2 | sed -e "s/:.*//") + sizeMB=$(check_size "${partsize}") + [ -n "${sizeMB}" ] || exit 1 + disk_usage=$((${sizeMB::${#sizeMB}-1} + $disk_usage)) + done + + disk_size=$(disk_config_get_size) + echo -e "$((${disk_size::${#disk_size}-1} - ${disk_usage}))M" +} + disk_config_add_part() { partconf="${1}" partid=$(echo ${partconf} | sed -e "s/:.*//") partinfo=$(echo ${partconf} | sed -e "s/[^:]*://") + partsize=$(echo ${partinfo} | cut -d ":" -f1) + + # check size "ID:*SIZE*:FORMAT:CONTENT" + partsizeMB=$(check_size "${partsize}") # Make sure we don't add the same partition twice - disk_config_rm_part ${partid} + disk_config_rm_part "${partid}" + + # check available disk space + freespace=$(disk_config_get_free_space) + if ((${partsizeMB::${#partsizeMB}-1} > ${freespace::${#freespace}-1})) + then + echo -e "Not enough free disk space(${freespace}) for partition "\ + "'${partconf}'!"\ + "\tTo adjust disk size use '--disk-size' parameter"\ + "\tor shrink the partition with '--disk-add-part' parameter" + exit 1 + fi + echo "DISK_PART${partid}=\"${partinfo}\"" >> \ ${IMAGE_TMPDIR}/disk.cfg }