]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/initscripts/init.d/partresize
Merge remote-tracking branch 'origin/seventeen' into seventeen
[ipfire-2.x.git] / src / initscripts / init.d / partresize
index d4e4db268528ffa99b4ba4fef542df9c67592a70..8c05f4d15e6e11921039e0ac75d4045ec7af691d 100644 (file)
@@ -6,7 +6,7 @@
 #
 # Authors     : Arne Fitzenreiter - arne_f@ipfire.org
 #
-# Version     : 1.02
+# Version     : 1.04
 #
 # Notes       :
 #
 
 case "${1}" in
        start)
+               if [ -e "/.partresize" ]; then
+                       boot_mesg "Mounting root file system in read/write mode ..."
+                       mount -o remount,rw / > /dev/null
+                       evaluate_retval
 
-               boot_mesg "Mounting root file system in read/write mode ..."
-               mount -o remount,rw / > /dev/null
-               evaluate_retval
-
-               boot_mesg "Create /etc/mtab..."
-               > /etc/mtab
-               mount -f / || failed=1
-               (exit ${failed})
-               evaluate_retval
-
-               # Detect device
-               ROOT=`mount | grep -m1 " / " | cut -d" " -f1`;
-               if [ "${ROOT:`expr length $ROOT`-2:1}" == "p" ]; then
-                       DRV=${ROOT::`expr length $ROOT`-2}
-               else
-                       DRV=${ROOT::`expr length $ROOT`-1}
-               fi
+                       boot_mesg "Create /etc/mtab..."
+                       > /etc/mtab
+                       mount -f / || failed=1
+                       (exit ${failed})
+                       evaluate_retval
+
+                       # Detect device
+                       mount | while read -r dev tmp1 mountpoint tmp2; do
+                               [ "${dev}" = "rootfs" ] && continue
+
+                               if [ "${mountpoint}" = "/" ]; then
+                                       # Find root partition number
+                                       part_num="${dev: -1}"
 
-               boot_mesg "Change Partition ${DRV}3 to all free space ..."
-               echo -e 'd\n3\nn\np\n3\n\n\nw\nq\n' | fdisk ${DRV}
+                                       # Find path to the root device
+                                       root_dev="${dev::-1}"
+                                       if [ ! -b "${dev::-1}" -a "${root_dev: -1}" = "p" ]; then
+                                               root_dev="${dev::-2}"
+                                       fi
 
-               # Erase symlink, it should run only once
-               rm -f /etc/rc.d/rcsysinit.d/S25partresize
+                                       boot_mesg "Growing root partition to maximum size..."
+                                       echo -e ',+' | sfdisk --no-reread -f -N${part_num} "${root_dev}" 2>/dev/null
 
-               boot_mesg "Rebooting ..."
-               sync
-               mount -o remount,ro / > /dev/null
-               reboot -f
+                                       # Update c,h,s values of the boot partition...
+                                       if [ ${part_num} -ne 1 -a -b "${root_dev}1" ]; then
+                                               echo -e ',' | sfdisk --no-reread -f -N1 ${DRV} &> /dev/null
+                                       fi
 
+                                       # The filesystem should be resized after
+                                       # this operation
+                                       touch /.resizefs
+
+                                       # Remove marker
+                                       rm -f /.partresize
+
+                                       # Reboot
+                                       boot_mesg "Rebooting system..."
+                                       mount -o remount,ro / &>/dev/null
+                                       sleep 15
+                                       reboot -f
+                               fi
+                       done
+               fi
                ;;
        *)
                echo "Usage: ${0} {start}"