Advertisement
Guest User

fsresize.sh

a guest
Mar 18th, 2021
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.93 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # ******************************************
  4. # Resize Linux ext4 partition to fill sdcard
  5. # ******************************************
  6.  
  7. if [ "$(id -u)" != "0" ]; then
  8. echo "Script must be run as root !"
  9. exit 0
  10. fi
  11.  
  12. _REL=`lsb_release -sc`
  13.  
  14. _rootpart=`mount | grep "on / " | awk '{print $1}'`
  15. if [ "${_rootpart}" = "/dev/mmcblk0" ]; then
  16. rootdrv="mmcblk0p2"
  17. sdcard="/dev/mmcblk0"
  18. elif [ "${_rootpart}" = "/dev/mmcblk0p1" ]; then
  19. rootdrv="mmcblk1p2"
  20. sdcard="/dev/mmcblk1"
  21. else
  22. echo "Root fs mount partition not found!"
  23. exit 1
  24. fi
  25. echo ""
  26.  
  27. fdisk -l $sdcard | grep $sdcard
  28. echo ""
  29.  
  30. _btrfs=`mount | grep -o btrfs`
  31.  
  32. sdcard_part=`fdisk -l $sdcard | grep $rootdrv | awk '{print $1}'`
  33. sdcard_sect=`fdisk -l $sdcard | grep "Disk $sdcard" | awk '{print $7}'`
  34. if [ "${sdcard_sect}" = "" ]; then
  35. sdcard_sect=`fdisk -l $sdcard | grep total | awk '{print $8}'`
  36. fi
  37. sdcard_end=$(expr $sdcard_sect - 1024)
  38.  
  39. part_start=`fdisk -l $sdcard | grep $rootdrv | awk '{print $2}'`
  40. part_end=`fdisk -l $sdcard | grep $rootdrv | awk '{print $3}'`
  41.  
  42. echo " Max block: $sdcard_end"
  43. echo " Part end: $part_end"
  44. echo " Part start: $part_start"
  45. if [ ! "${_btrfs}" = "" ]; then
  46. echo " btrfs part: yes"
  47. _resize="btrfs filesystem resize max /"
  48. else
  49. _resize="resize2fs ${sdcard_part}"
  50. fi
  51. echo ""
  52. if [ $part_end -ge $sdcard_end ]; then
  53. echo "Partition allready maximum size !"
  54. rm /usr/local/bin/fs_resize_warning > /dev/null 2>&1
  55. exit 0
  56. fi
  57.  
  58. echo -n "WARNING: Do you want to resize \"$sdcard_part\" (y/N)? "
  59. read -n 1 ANSWER
  60. if [ ! "${ANSWER}" = "y" ] ; then
  61. echo ""
  62. echo "Canceled.."
  63. exit 0
  64. fi
  65. echo ""
  66.  
  67. # RESIZE PARTITION
  68.  
  69. echo -e "p\nd\n2\nn\np\n2\n$part_start\n$sdcard_end\nw" | fdisk ${sdcard} > /dev/null 2>&1
  70. #if [ $? -ne 0 ]; then
  71. # echo "ERROR resizing partition!"
  72. # exit 1
  73. #fi
  74.  
  75. echo "PARTITION RESIZED."
  76.  
  77. cat > /tmp/rc.local << _EOF_
  78. #!/bin/sh -e
  79. #
  80. # rc.local
  81. #
  82. # This script is executed at the end of each multiuser runlevel.
  83. # Make sure that the script will "exit 0" on success or any other
  84. # value on error.
  85. #
  86. # In order to enable or disable this script just change the execution
  87. # bits.
  88. #
  89. # By default this script does nothing.
  90. echo 0 > /proc/sys/kernel/hung_task_timeout_secs
  91. dmesg -n 1
  92. _EOF_
  93.  
  94.  
  95. cat > /usr/local/bin/resize_fs << _EOF_
  96. #!/bin/bash
  97. $_resize
  98. if [ \$? -eq 0 ]; then
  99. rm /usr/local/bin/fs_resize_warning
  100. rm /usr/local/bin/resize_fs
  101. sleep 2
  102. if [ -d /etc/local.d ]; then
  103. rm /etc/local.d/opi.start
  104. mv /etc/local.d/opi.start.orig /etc/local.d/opi.start
  105. elif [ -d /etc/rc.d ]; then
  106. if [ -f /etc/rc.d/after.local ]; then
  107. rm /etc/rc.d/after.local
  108. mv /etc/rc.d/after.local.orig /etc/rc.d/after.local
  109. else
  110. rm /etc/rc.d/rc.local
  111. mv /etc/rc.d/rc.local.orig /etc/rc.d/rc.local
  112. fi
  113. else
  114. rm /etc/rc.local
  115. mv /etc/rc.local.orig /etc/rc.local
  116. fi
  117. fi
  118. _EOF_
  119.  
  120. chmod +x /usr/local/bin/resize_fs > /dev/null 2>&1
  121.  
  122.  
  123. if [ -d /etc/local.d ]; then
  124. if [ ! -f /etc/local.d/opi.start ]; then
  125. cp /tmp/rc.local /etc/local.d/opi.start.orig
  126. echo "exit 0" >> /etc/local.d/opi.start.orig
  127. chmod +x /etc/local.d/opi.start.orig > /dev/null 2>&1
  128. fi
  129. echo "/usr/local/bin/resize_fs &&" >> /tmp/rc.local
  130. echo "exit 0" >> /tmp/rc.local
  131. mv /tmp/rc.local /etc/local.d/opi.start
  132. chmod +x /etc/local.d/opi.start > /dev/null 2>&1
  133.  
  134. elif [ -d /etc/rc.d ]; then
  135. if [ -f /etc/rc.d/after.local ]; then
  136. mv /etc/rc.d/after.local /etc/rc.d/after.local.orig
  137. echo "/usr/local/bin/resize_fs &&" >> /tmp/rc.local
  138. echo "exit 0" >> /tmp/rc.local
  139. mv /tmp/rc.local /etc/rc.d/after.local
  140. chmod +x /etc/rc.d/after.local > /dev/null 2>&1
  141. else
  142. if [ -f /etc/rc.d/rc.local ]; then
  143. mv /etc/rc.d/rc.local /etc/rc.d/rc.local.orig
  144. else
  145. cp /tmp/rc.local /etc/rc.d/rc.local.orig
  146. echo "exit 0" >> /etc/rc.d/rc.local.orig
  147. chmod +x /etc/rc.d/rc.local.orig > /dev/null 2>&1
  148. fi
  149. echo "/usr/local/bin/resize_fs &&" >> /tmp/rc.local
  150. echo "exit 0" >> /tmp/rc.local
  151. mv /tmp/rc.local /etc/rc.d/rc.local
  152. chmod +x /etc/rc.d/rc.local > /dev/null 2>&1
  153. fi
  154. else
  155. if [ -f /etc/rc.local ]; then
  156. mv /etc/rc.local /etc/rc.local.orig
  157. else
  158. cp /tmp/rc.local /etc/rc.local.orig
  159. echo "exit 0" >> /etc/rc.local.orig
  160. chmod +x /etc/rc.local.orig > /dev/null 2>&1
  161. fi
  162. echo "/usr/local/bin/resize_fs &&" >> /tmp/rc.local
  163. echo "exit 0" >> /tmp/rc.local
  164. mv /tmp/rc.local /etc/rc.local
  165. chmod +x /etc/rc.local > /dev/null 2>&1
  166. fi
  167.  
  168. REBOOT=1
  169. echo "*********************************************"
  170. echo "Rootfs Extended. Please REBOOT to take effect"
  171. echo "*********************************************"
  172. echo ""
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement