disk space
estimation errors in livecd-iso-to-disk :
Fix disk space estimation and reporting code
The patch submitted addresses the following:
1. The estimates of disk space to-be-deleted and to-be-added ignored the
/syslinux and /EFI/boot folders (typically ~13 MiB on F-14 Live Desktop).
2. If the --skipcompression install option was selected, the compressed size of
ext3fs.img was reported (underestimating the installed size by ~975 MiB).
3. The command to estimate free space on the target device could fail if a
'newline' ever crept into the mountpoint name (not likely since the script
checks that it is unmounted first).
4. The requested and available space report could be formatted for easier
reading.
The patch does not consider or change any of the DVD or net installer code.
The EFI or multi code paths were NOT tested.
Review and testing requested.. --Fred
---------------------------------------------------------------------------------------------------------
From e9ec02cf67451bc559829c53cd559cd40d90a217 Mon Sep 17 00:00:00 2001
From: Frederick Grose <fgrose(a)gmail.com>
Date: Tue, 23 Nov 2010 00:24:16 -0500
Subject: [PATCH] Fix disk space estimation errors.
Include /syslinux and /EFI/boot folders in the estimate,
use du --apparent-size for the --skipcompression install option,
protect df from failing due to mountpoints with '\n' in their name,
and format the size report for better readability.
---
tools/livecd-iso-to-disk.sh | 66
+++++++++++++++++++++++++++++-------------
1 files changed, 45 insertions(+), 21 deletions(-)
diff --git a/tools/livecd-iso-to-disk.sh b/tools/livecd-iso-to-disk.sh
index caa7bde..320c319 100755
--- a/tools/livecd-iso-to-disk.sh
+++ b/tools/livecd-iso-to-disk.sh
@@ -571,18 +571,27 @@ if [ -d $CDMNT/LiveOS ]; then
else
check=$CDMNT
fi
-if [ -d $USBMNT/$LIVEOS ]; then
- tbd=$(du -s -B 1M $USBMNT/$LIVEOS | awk {'print $1;'})
- [ -f $USBMNT/$LIVEOS/$HOMEFILE ] && homesz=$(du -s -B 1M
$USBMNT/$LIVEOS/$HOMEFILE | awk {'print $1;'})
- [ -n "$homesz" -a -n "$keephome" ] && tbd=$(($tbd -
$homesz))
+if [[ -d $USBMNT/$LIVEOS ]]; then
+ tbd=($(du -B 1M $USBMNT/$LIVEOS))
+ [[ -s $USBMNT/$LIVEOS/$HOMEFILE ]] && \
+ homesize=($(du -B 1M $USBMNT/$LIVEOS/$HOMEFILE))
+ ((homesize > 0)) && [[ -n $keephome ]] && ((tbd -= homesize))
else
tbd=0
fi
-livesize=$(du -s -B 1M $check | awk {'print $1;'})
-if [ -n "$skipcompress" ]; then
- if [ -e $CDMNT/LiveOS/squashfs.img ]; then
+targets="$USBMNT/$SYSLINUXPATH"
+if [[ -n $efi ]]; then
+ targets+=" $USBMNT/EFI/boot"
+fi
+duTable=($(du -c -B 1M $targets 2> /dev/null))
+((tbd += ${duTable[*]: -2:1}))
+
+sources="$CDMNT/isolinux"
+[[ -n $efi ]] && sources+=" $CDMNT/EFI/boot"
+if [[ -n $skipcompress ]]; then
+ if [[ -s $CDMNT/LiveOS/squashfs.img ]]; then
if mount -o loop $CDMNT/LiveOS/squashfs.img $CDMNT; then
- livesize=$(du -s -B 1M $CDMNT/LiveOS/ext3fs.img | awk {'print
$1;'})
+ livesize=($(du -B 1M --apparent-size $CDMNT/LiveOS/ext3fs.img))
umount $CDMNT
else
echo "WARNING: --skipcompress or --xo was specified but the
currently"
@@ -591,22 +600,37 @@ if [ -n "$skipcompress" ]; then
skipcompress=""
fi
fi
+ duTable=($(du -c -B 1M $sources 2> /dev/null))
+ ((livesize += ${duTable[*]: -2:1}))
+else
+ sources+=" $check/osmin.img $check/squashfs.img"
+ duTable=($(du -c -B 1M $sources 2> /dev/null))
+ livesize=${duTable[*]: -2:1}
fi
-free=$(df -B1M $USBDEV |tail -n 1 |awk {'print $4;'})
+
+freespace=($(df -B 1M --total $USBDEV))
+freespace=${freespace[*]: -2:1}
if [ "$isotype" = "live" ]; then
- tba=$(($overlaysizemb + $homesizemb + $livesize + $swapsizemb))
- if [ $tba -gt $(($free + $tbd)) ]; then
- echo "Unable to fit live image + overlay on available space on USB
stick"
- echo "+ Size of live image: $livesize"
- [ "$overlaysizemb" -gt 0 ] && echo "+ Overlay size:
$overlaysizemb"
- [ "$homesizemb" -gt 0 ] && echo "+ Home overlay size:
$homesizemb"
- [ "$swapsizemb" -gt 0 ] && echo "+ Swap overlay size:
$swapsizemb"
- echo "---------------------------"
- echo "= Requested: $tba"
- echo "- Available: $(($free + $tbd))"
- echo "---------------------------"
- echo "= To fit, free or decrease requested size total by: $(($tba
- $free - $tbd))"
+ tba=$((overlaysizemb + homesizemb + livesize + swapsizemb))
+ if ((tba > freespace + tbd)); then
+ needed=$((tba - freespace - tbd))
+ printf "\n The live image + overlay, home, & swap space, if
requested,
+ \r will NOT fit in the space available on the target device.\n
+ \r + Size of live image: %10s MiB\n" $livesize
+ (($overlaysizemb > 0)) && \
+ printf " + Overlay size: %16s\n" $overlaysizemb
+ (($homesizemb > 0)) && \
+ printf " + Home directory size: %9s\n" $homesizemb
+ (($swapsizemb > 0)) && \
+ printf " + Swap overlay size: %11s\n" $swapsizemb
+ printf " = Total requested space: %6s MiB\n" $tba
+ printf " - Space available: %12s\n" $(($free + $tbd))
+ printf " ==============================\n"
+ printf " Space needed: %15s MiB\n\n" $needed
+ printf " To fit the installation on this device,
+ \r free space on the target, or decrease the
+ \r requested size total by: %s MiB\n\n" $needed
exitclean
fi
fi
--
1.7.3.2