On Tue, Nov 23, 2010 at 1:26 AM, Frederick Grose <[email protected]> wrote: > From Bug 656154 - Fix 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 <[email protected]> > 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 > > -- > livecd mailing list > [email protected] > https://admin.fedoraproject.org/mailman/listinfo/livecd >
Good job patching my patch. Better formatting too. -- Jason -- livecd mailing list [email protected] https://admin.fedoraproject.org/mailman/listinfo/livecd
