#!/bin/sh set -e dm_major=$(printf %x "$(grep device-mapper /proc/devices | cut -f 1 -d ' ')") case "$(stat -Lc %t:%T /dev/mapper/dmroot)" in ca:0) # nothing needed, xvda used directly ;; ca:3) # resize partition table itself # use undocumented ---pretend-input-tty (yes, three '-') to # force unattended operation, otherwise it aborts on first # prompt, even with '-s' option echo fix | parted ---pretend-input-tty /dev/xvda print >/dev/null # then resize 3rd partition, even though it is mounted echo yes 100% | parted ---pretend-input-tty /dev/xvda resizepart 3 # and reload partition table; prefer partprobe over blockdev # --rereadpt, as it works on mounted partitions partprobe /dev/xvda ;; ca:*) echo "Unsupported partition layout, resize it manually" >&2 exit 1 ;; $dm_major:*) new_size=$(cat /sys/block/xvda/size) ro=$(cat /sys/block/xvda/ro) if [ "$ro" -eq 1 ]; then new_table="0 $new_size snapshot /dev/xvda /dev/xvdc2 N 16" else new_table="0 $new_size linear /dev/xvda 0" fi dmsetup load dmroot --table "$new_table" dmsetup resume dmroot ;; *) echo "Unsupported device type for root volume, resize it manually" >&2 exit 1 ;; esac resize2fs /dev/mapper/dmroot