Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # ******************************************
- # Resize Linux ext4 partition to fill sdcard
- # ******************************************
- if [ "$(id -u)" != "0" ]; then
- echo "Script must be run as root !"
- exit 0
- fi
- _REL=`lsb_release -sc`
- _rootpart=`mount | grep "on / " | awk '{print $1}'`
- if [ "${_rootpart}" = "/dev/mmcblk0" ]; then
- rootdrv="mmcblk0p2"
- sdcard="/dev/mmcblk0"
- elif [ "${_rootpart}" = "/dev/mmcblk0p1" ]; then
- rootdrv="mmcblk1p2"
- sdcard="/dev/mmcblk1"
- else
- echo "Root fs mount partition not found!"
- exit 1
- fi
- echo ""
- fdisk -l $sdcard | grep $sdcard
- echo ""
- _btrfs=`mount | grep -o btrfs`
- sdcard_part=`fdisk -l $sdcard | grep $rootdrv | awk '{print $1}'`
- sdcard_sect=`fdisk -l $sdcard | grep "Disk $sdcard" | awk '{print $7}'`
- if [ "${sdcard_sect}" = "" ]; then
- sdcard_sect=`fdisk -l $sdcard | grep total | awk '{print $8}'`
- fi
- sdcard_end=$(expr $sdcard_sect - 1024)
- part_start=`fdisk -l $sdcard | grep $rootdrv | awk '{print $2}'`
- part_end=`fdisk -l $sdcard | grep $rootdrv | awk '{print $3}'`
- echo " Max block: $sdcard_end"
- echo " Part end: $part_end"
- echo " Part start: $part_start"
- if [ ! "${_btrfs}" = "" ]; then
- echo " btrfs part: yes"
- _resize="btrfs filesystem resize max /"
- else
- _resize="resize2fs ${sdcard_part}"
- fi
- echo ""
- if [ $part_end -ge $sdcard_end ]; then
- echo "Partition allready maximum size !"
- rm /usr/local/bin/fs_resize_warning > /dev/null 2>&1
- exit 0
- fi
- echo -n "WARNING: Do you want to resize \"$sdcard_part\" (y/N)? "
- read -n 1 ANSWER
- if [ ! "${ANSWER}" = "y" ] ; then
- echo ""
- echo "Canceled.."
- exit 0
- fi
- echo ""
- # RESIZE PARTITION
- echo -e "p\nd\n2\nn\np\n2\n$part_start\n$sdcard_end\nw" | fdisk ${sdcard} > /dev/null 2>&1
- #if [ $? -ne 0 ]; then
- # echo "ERROR resizing partition!"
- # exit 1
- #fi
- echo "PARTITION RESIZED."
- cat > /tmp/rc.local << _EOF_
- #!/bin/sh -e
- #
- # rc.local
- #
- # This script is executed at the end of each multiuser runlevel.
- # Make sure that the script will "exit 0" on success or any other
- # value on error.
- #
- # In order to enable or disable this script just change the execution
- # bits.
- #
- # By default this script does nothing.
- echo 0 > /proc/sys/kernel/hung_task_timeout_secs
- dmesg -n 1
- _EOF_
- cat > /usr/local/bin/resize_fs << _EOF_
- #!/bin/bash
- $_resize
- if [ \$? -eq 0 ]; then
- rm /usr/local/bin/fs_resize_warning
- rm /usr/local/bin/resize_fs
- sleep 2
- if [ -d /etc/local.d ]; then
- rm /etc/local.d/opi.start
- mv /etc/local.d/opi.start.orig /etc/local.d/opi.start
- elif [ -d /etc/rc.d ]; then
- if [ -f /etc/rc.d/after.local ]; then
- rm /etc/rc.d/after.local
- mv /etc/rc.d/after.local.orig /etc/rc.d/after.local
- else
- rm /etc/rc.d/rc.local
- mv /etc/rc.d/rc.local.orig /etc/rc.d/rc.local
- fi
- else
- rm /etc/rc.local
- mv /etc/rc.local.orig /etc/rc.local
- fi
- fi
- _EOF_
- chmod +x /usr/local/bin/resize_fs > /dev/null 2>&1
- if [ -d /etc/local.d ]; then
- if [ ! -f /etc/local.d/opi.start ]; then
- cp /tmp/rc.local /etc/local.d/opi.start.orig
- echo "exit 0" >> /etc/local.d/opi.start.orig
- chmod +x /etc/local.d/opi.start.orig > /dev/null 2>&1
- fi
- echo "/usr/local/bin/resize_fs &&" >> /tmp/rc.local
- echo "exit 0" >> /tmp/rc.local
- mv /tmp/rc.local /etc/local.d/opi.start
- chmod +x /etc/local.d/opi.start > /dev/null 2>&1
- elif [ -d /etc/rc.d ]; then
- if [ -f /etc/rc.d/after.local ]; then
- mv /etc/rc.d/after.local /etc/rc.d/after.local.orig
- echo "/usr/local/bin/resize_fs &&" >> /tmp/rc.local
- echo "exit 0" >> /tmp/rc.local
- mv /tmp/rc.local /etc/rc.d/after.local
- chmod +x /etc/rc.d/after.local > /dev/null 2>&1
- else
- if [ -f /etc/rc.d/rc.local ]; then
- mv /etc/rc.d/rc.local /etc/rc.d/rc.local.orig
- else
- cp /tmp/rc.local /etc/rc.d/rc.local.orig
- echo "exit 0" >> /etc/rc.d/rc.local.orig
- chmod +x /etc/rc.d/rc.local.orig > /dev/null 2>&1
- fi
- echo "/usr/local/bin/resize_fs &&" >> /tmp/rc.local
- echo "exit 0" >> /tmp/rc.local
- mv /tmp/rc.local /etc/rc.d/rc.local
- chmod +x /etc/rc.d/rc.local > /dev/null 2>&1
- fi
- else
- if [ -f /etc/rc.local ]; then
- mv /etc/rc.local /etc/rc.local.orig
- else
- cp /tmp/rc.local /etc/rc.local.orig
- echo "exit 0" >> /etc/rc.local.orig
- chmod +x /etc/rc.local.orig > /dev/null 2>&1
- fi
- echo "/usr/local/bin/resize_fs &&" >> /tmp/rc.local
- echo "exit 0" >> /tmp/rc.local
- mv /tmp/rc.local /etc/rc.local
- chmod +x /etc/rc.local > /dev/null 2>&1
- fi
- REBOOT=1
- echo "*********************************************"
- echo "Rootfs Extended. Please REBOOT to take effect"
- echo "*********************************************"
- echo ""
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement