Once again I miss the obvious. So we have spaces in the partition name and the for loop is breaking on the spaces. So we should set the for loop to separate by newlines. Try the following which is just setting the IFS variable. Then I set it back at the end because I'm too lazy to check what the disk for loop uses. You don't need to change all this. Just put the "IFS" lines where I've added them near the beginning and end. Uncomment the partition size calc and see what happens.
Code:
PREVIFS=$IFS
IFS="$NEWLINEIFS";
for partition in $(lsblk -lno NAME /dev/$disk 2>/dev/null | grep -v ^$disk\$ ); do
if [ -n "$partition" ] && [ "$partition" != "$disk" ]; then
# partition_mount_type=$(lsblk -lndo TYPE /dev/"$partition" 2>/dev/null)
partition_mount_type=$(lsblk -lno NAME,TYPE /dev/$disk 2>/dev/null | grep "^$partition " | sed -e "s/$partition//g")
partition_mount_type=$(trim "$partition_mount_type")
if [ "$partition_mount_type" = "part" ]; then
partition_mount_type="partition"
partition_type="local"
else
partition_mount_type="mount point"
partition_type="$partition_mount_type"
fi
#partition_mount_point=$(lsblk -lndo MOUNTPOINT /dev/"$partition" 2>/dev/null)
partition_mount_point=$(lsblk -lno NAME,MOUNTPOINT /dev/$disk 2>/dev/null | grep "^$partition " | sed -e "s/$partition//g")
partition_mount_point=$(trim "$partition_mount_point")
#partition_name=$(lsblk -lndo LABEL /dev/"$partition" 2>/dev/null)
partition_name=$(lsblk -lno NAME,LABEL /dev/$disk 2>/dev/null | grep "^$partition " | sed -e "s/$partition//g")
partition_name=$(trim "$partition_name")
#partition_size=$(lsblk -lbndo SIZE /dev/"$partition" 2>/dev/null)
#partition_size=$(lsblk -lbo NAME,SIZE /dev/$disk 2>/dev/null | grep "^$partition " | sed -e "s/$partition//g")
partition_size=$(lsblk -lbo NAME,SIZE /dev/$disk 2>/dev/null | grep "^$partition " | rev | cut -d" " -f1 | rev)
partition_size=$((partition_size / 1024 / 1024))
#partition_format=$(lsblk -lndo FSTYPE /dev/"$partition" 2>/dev/null)
partition_format=$(lsblk -lno NAME,FSTYPE /dev/$disk 2>/dev/null | grep "^$partition " | sed -e "s/$partition//g")
partition_format=$(trim "$partition_format")
#partition_caption=$(lsblk -lndo LABEL /dev/"$partition" 2>/dev/null)
partition_caption=$(lsblk -lno NAME,LABEL /dev/$disk 2>/dev/null | grep "^$partition " | sed -e "s/$partition//g")
partition_caption=$(trim "$partition_caption")
partition_device_id="/dev/$partition"
partition_disk_index="$disk"
partition_bootable=""
partition_quotas_supported=""
partition_quotas_enabled=""
#partition_serial=$(lsblk -lndo UUID /dev/"$partition" 2>/dev/null)
partition_serial=$(lsblk -lno NAME,UUID /dev/$disk 2>/dev/null | grep "^$partition " | sed -e "s/$partition//g")
partition_serial=$(trim "$partition_serial")
#partition_free_space=$(df -m /dev/"$partition" 2>/dev/null | grep /dev/"$partition" | awk '{print $4}')
partition_free_space=$(df -m --total "$partition_mount_point" 2>/dev/null | grep ^total | awk '{print $4}')
if [ -z "$partition_free_space" ] && [ -n "$partition_serial" ]; then
partition_free_space=$(df -m /dev/disk/by-uuid/"$partition_serial" 2>/dev/null | grep "$partition_serial" | awk '{print $4}')
fi
#partition_used_space=$(df -m /dev/"$partition" 2>/dev/null | grep /dev/"$partition" | awk '{print $3}')
partition_used_space=$(df -m --total "$partition_mount_point" 2>/dev/null | grep ^total | awk '{print $3}')
if [ -z "$partition_used_space" ] && [ -n "$partition_serial" ]; then
partition_used_space=$(df -m /dev/disk/by-uuid/"$partition_serial" 2>/dev/null | grep "$partition_serial" | awk '{print $3}')
fi
if [ "$partition_format" = "swap" ]; then
partition_used_space=$(free -m | grep -i swap | awk '{print $3}')
partition_free_space=$(free -m | grep -i swap | awk '{print $4}')
fi
partition_result=$partition_result"
<item>
<serial>$(escape_xml "$partition_serial")</serial>
<name>$(escape_xml "$partition_name")</name>
<description>$(escape_xml "$partition_caption")</description>
<device>$(escape_xml "$partition_device_id")</device>
<hard_drive_index>$(escape_xml "$partition_disk_index")</hard_drive_index>
<partition_disk_index>$(escape_xml "$partition_disk_index")</partition_disk_index>
<mount_type>$(escape_xml "$partition_mount_type")</mount_type>
<mount_point>$(escape_xml "$partition_mount_point")</mount_point>
<size>$(escape_xml "$partition_size")</size>
<free>$(escape_xml "$partition_free_space")</free>
<used>$(escape_xml "$partition_used_space")</used>
<format>$(escape_xml "$partition_format")</format>
<type>$(escape_xml "$partition_type")</type>
</item>"
fi
done
IFS=$PREVIFS
done
echo " </disk>" >> "$xml_file"