diff --git a/autosizer.sh b/autosizer.sh new file mode 100755 index 0000000..abfd393 --- /dev/null +++ b/autosizer.sh @@ -0,0 +1,53 @@ +#!/bin/bash -e +# Automatic Image file resizer +# Written by SirLagz +# http://sirlagz.net/2013/03/10/script-automatic-rpi-image-downsizer/ +strImgFile=$1 +extraSpaceMB=$2 + +if [[ ! $(whoami) =~ "root" ]]; then +echo "" +echo "**********************************" +echo "*** This should be run as root ***" +echo "**********************************" +echo "" +exit +fi + +if [[ -z $1 ]]; then +echo "Usage: ./autosizer.sh " +exit +fi + +if [[ -z $2 ]]; then +extraSpaceMB=4 +fi + +if [[ ! -e $1 || ! $(file $1) =~ "boot sector" ]]; then +echo "Error : Not an image file, or file doesn't exist" +exit +fi + +partinfo=`parted -s -m $1 unit B print` +partnumber=`echo "$partinfo" | grep ext4 | awk -F: ' { print $1 } '` +partstart=`echo "$partinfo" | grep ext4 | awk -F: ' { print substr($2,0,length($2)-1) } '` +loopback=`losetup -f --show -o $partstart $1` +e2fsck -f $loopback +minsize=`resize2fs -P $loopback | awk -F': ' ' { print $2 } '` + +blocksize=$(dumpe2fs -h $loopback | grep 'Block size' | awk -F': ' ' { print $2 }') +blocksize=${blocksize// /} + +let minsize=$minsize+$extraSpaceMB*1048576/$blocksize +resize2fs -p $loopback $minsize + +sleep 1 +losetup -d $loopback + +let partnewsize=$minsize*$blocksize +let newpartend=$partstart+$partnewsize + +part1=`parted -s $1 rm 2` +part2=`parted -s $1 unit B mkpart primary $partstart $newpartend` +endresult=`parted -s -m $1 unit B print free | tail -1 | awk -F: ' { print substr($2,0,length($2)-1) } '` +truncate -s $endresult $1