#!/bin/sh set -e # # List the soft prerequisites here. This is a space separated list of # names, of scripts that are in the same directory as this one, that # must be run before this one can be. # PREREQS="" case $1 in prereqs) echo "$PREREQS"; exit 0;; esac . /scripts/functions # Given the root partition, get the underlying device and partition number rootpart=$(realpath $ROOT) rootpart_nr=$(blkid -sPART_ENTRY_NUMBER -o value -p $rootpart) rootdev="/dev/$(lsblk -no pkname "$rootpart")" # Parted will detect if the GPT label is messed up and fix it # automatically, we just need to tell it to do so. parted -s $rootdev print 2>&1 | grep -z "fix the GPT" && { echo "Fix" | parted ---pretend-input-tty $rootdev print } # Check if there's free space at the end of the device free_space="$(parted -m -s $rootdev print free | tail -n1 | grep free)" if test -z "$free_space"; then # Great, we already resized; nothing left to do! exit 0 fi log_begin_msg "$0 resizing $ROOT" # Unmount for safety umount "${rootmnt}" # Expand the partition size to fill the entire device parted -s $rootdev resizepart $rootpart_nr 100% wait_for_udev 5 # Now resize the filesystem partprobe $rootdev resize2fs $rootpart # Remount root if ! mount -r ${FSTYPE:+-t "${FSTYPE}"} ${ROOTFLAGS} "${ROOT}" "${rootmnt?}"; then panic "Failed to mount ${ROOT} as root file system." fi log_end_msg