#!/bin/bash
set -e
extend_root(){
ROOT_PART="$(findmnt / -o source -n)"
ROOT_DEV="/dev/$(lsblk -no pkname "$ROOT_PART")"
PART_NUM="$(echo "$ROOT_PART" | grep -o "[[:digit:]]*$")"
PART_INFO=$(parted "$ROOT_DEV" -ms unit s p)
LAST_PART_NUM=$(echo "$PART_INFO" | tail -n 1 | cut -f 1 -d:)
PART_START=$(echo "$PART_INFO" | grep "^${PART_NUM}" | cut -f 2 -d: | sed 's/[^0-9]//g')
PART_END=$(echo "$PART_INFO" | grep "^${PART_NUM}" | cut -f 3 -d: | sed 's/[^0-9]//g')
ROOT_END=$(echo "$PART_INFO" | grep "^/dev"| cut -f 2 -d: | sed 's/[^0-9]//g')
((ROOT_END--))
if [ $PART_END -lt $ROOT_END ]; then
fdisk "$ROOT_DEV" <<EOF
p
d
$PART_NUM
n
p
$PART_NUM
$PART_START
p
w
EOF
resize2fs $ROOT_PART
echo "Extend $ROOT_PART finished." >> /var/log/extend-root.log
else
echo "Already the largest! Do not need extend any more!" >> /var/log/extend-root.log
fi
return 0
}
if extend_root; then
rm -f /etc/rc.d/init.d/extend-root.sh
else
echo "Fail to root!" >> /var/log/extend-root.log
fi