Advertisement
mattrix

shrink.sh

Aug 23rd, 2017
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.32 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. DEVICE=/dev/$1 #/dev/sdc
  4. OUTPUT=$2 #./V0.2.img
  5.  
  6. PART=$(fdisk $DEVICE -l | tail -1 | awk '{print $1}'  | sed 's/[^0-9]*//g' )
  7.  
  8. echo $DEVICE
  9. echo $OUTPUT
  10. echo $PART
  11.  
  12. if [ $PART > 4 ]; then
  13.     TYPE="l"
  14.     echo "LOGICAL (EXTENDED)"
  15. else
  16.     TYPE="p"
  17.     echo "PRIMARY"
  18. fi
  19.  
  20. echo $TYPE
  21.  
  22. sleep 2
  23.  
  24. fsck.vfat -y ${DEVICE}1
  25. e2fsck -y -f ${DEVICE}$PART
  26.  
  27. for pass in {1..10}
  28. do
  29.  
  30. result=$(resize2fs -M ${DEVICE}$PART)
  31. if [ -z "$result" ]; then
  32.     break
  33. fi
  34.  
  35. blocks=$(echo "$result" | grep "Resizing" | awk '{print $7}')
  36. block_size=$(echo "$result" | grep "Resizing" | awk '{print $8}' | cut -d "(" -f2 | cut -d "k" -f1)
  37. new_size=$(($blocks * $block_size))
  38. PART_START=$(fdisk $DEVICE -l | grep ${DEVICE}$PART | awk '{print $2}')
  39. PART_END=+${new_size}K
  40.  
  41. fdisk $DEVICE <<EOF
  42. d
  43. $PART
  44. n
  45. $TYPE
  46. $PART
  47. $PART_START
  48. $PART_END
  49. w
  50. EOF
  51.  
  52. echo "Size after Pass #${pass}: $(($new_size/1024))MB"
  53.  
  54. done
  55.  
  56. block_size=$(fdisk $DEVICE -l | grep "Sector size" | awk '{print $4}')
  57. end_sector=$(fdisk $DEVICE -l | tail -1 | awk '{print $3}')
  58.  
  59. mb_size=$(((($end_sector * $block_size)/1048576)+1))
  60.  
  61. echo "Block Size: $block_size"
  62. echo "Total Sectors: $end_sector"
  63. echo ""
  64. echo "** IMAGE SIZE: $mb_size MB **"
  65. echo ""
  66.  
  67. echo "STARTING DD"
  68. echo "$DEVICE > $OUTPUT"
  69. dd bs=1M count=$mb_size if=$DEVICE of=$OUTPUT
  70. echo "DONE"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement