diff --git a/INSTALL/ExtendPersistentImg.sh b/INSTALL/ExtendPersistentImg.sh index 21c8435a..bd51912c 100644 --- a/INSTALL/ExtendPersistentImg.sh +++ b/INSTALL/ExtendPersistentImg.sh @@ -27,6 +27,13 @@ if [ ! -f "$file" ]; then exit 1 fi +if echo $size | grep -q "^-"; then + mode="Shrink" + size=${size:1} +else + mode="Extend" +fi + if echo $size | grep -q "[^0-9]"; then print_usage exit 1 @@ -42,10 +49,25 @@ fi fsMB=$(expr $fsize / 1024 / 1024) -total=$(expr $fsMB + $size) + +if [ "$mode" = "Extend" ]; then + total=$(expr $fsMB + $size) +else + if [ $fsMB -le $size ]; then + echo "File size of $file is less than ${size}MB." + exit 1 + fi + total=$(expr $fsMB - $size) +fi + magic=$(hexdump -n3 -e '3/1 "%02X"' $file) if [ "$magic" = "584653" ]; then + if [ "$mode" = "Shrink" ]; then + echo "Shrink is not supported for XFS filesystem." + exit 1 + fi + if which xfs_growfs >/dev/null 2>&1; then cmd=xfs_growfs else @@ -61,23 +83,26 @@ else fi fi +if [ "$mode" = "Extend" ]; then + echo "$mode dat file... (current is ${fsMB}MB, append ${size}MB, total ${total}MB)" + dd if=/dev/zero bs=1M count=$size status=none >> "$file" + sync +else + echo "$mode dat file... (current is ${fsMB}MB, reduce ${size}MB, finally ${total}MB)" +fi -echo "Extend dat file... (current is ${fsMB}MB, append ${size}MB, total ${total}MB)" -dd if=/dev/zero bs=1M count=$size status=none >> "$file" -sync freeloop=$(losetup -f) losetup $freeloop "$file" if [ "$cmd" = "resize2fs" ]; then - echo "Extend ext filesystem by resize2fs ..." + echo "$mode ext filesystem by resize2fs ..." echo "resize2fs $freeloop ${total}M" e2fsck -f $freeloop resize2fs $freeloop ${total}M ret=$? else - echo "Extend xfs filesystem by xfs_growfs ..." - + echo "$mode xfs filesystem by xfs_growfs ..." tmpdir=$(mktemp -d) mount $freeloop $tmpdir xfs_growfs $freeloop @@ -87,6 +112,12 @@ fi losetup -d $freeloop +if [ $ret -eq 0 -a "$mode" = "Shrink" ]; then + echo "truncate persistent file ..." + truncate "$file" -s ${total}M + ret=$? +fi + echo "" if [ $ret -eq 0 ]; then echo "======= SUCCESS =========" @@ -94,4 +125,3 @@ else echo "======= FAILED =========" fi echo "" -