100 lines
3.2 KiB
Bash
Executable File
100 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# -------------------------------------------------------------------------- #
|
|
# Copyright 2002-2020, OpenNebula Project, OpenNebula Systems #
|
|
# #
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
# not use this file except in compliance with the License. You may obtain #
|
|
# a copy of the License at #
|
|
# #
|
|
# http://www.apache.org/licenses/LICENSE-2.0 #
|
|
# #
|
|
# Unless required by applicable law or agreed to in writing, software #
|
|
# distributed under the License is distributed on an "AS IS" BASIS, #
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
|
# See the License for the specific language governing permissions and #
|
|
# limitations under the License. #
|
|
#--------------------------------------------------------------------------- #
|
|
|
|
set -e
|
|
|
|
GROW_ROOTFS=${GROW_ROOTFS:-YES}
|
|
GROW_ROOTFS=${GROW_ROOTFS^^}
|
|
|
|
if [ "${GROW_ROOTFS}" != 'YES' ]; then
|
|
echo 'Skipped root filesystem growing.' >&2
|
|
exit 0
|
|
fi
|
|
|
|
# FreeBSD
|
|
if [ -x /etc/rc.d/growfs ]; then
|
|
/etc/rc.d/growfs onestart
|
|
exit $?
|
|
fi
|
|
|
|
MOUNT_LINE=$(cat /etc/mtab | grep ' / ' | grep -v '^rootfs')
|
|
DEVICE=$(echo "$MOUNT_LINE" | cut -d' ' -f1)
|
|
FSTYPE=$(echo "$MOUNT_LINE" | cut -d' ' -f3)
|
|
GROWPART=$(which growpart)
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "growpart command is missing"
|
|
exit 1
|
|
fi
|
|
|
|
if [ $(lvdisplay ${DEVICE} 2>/dev/null | wc -l) -eq 0 ]; then
|
|
DEVICE=$(findmnt -ln -o SOURCE /)
|
|
DISK=$(echo "$DEVICE" | sed 's/[0-9]*$//')
|
|
PARTITION=$(echo "$DEVICE" | sed "s|^$DISK||")
|
|
LVM="no"
|
|
fi
|
|
|
|
if [ "${LVM}" != "no" ]; then
|
|
if [ -f /etc/debian_version ]; then
|
|
DEVICE=$(mount | grep ' / ' | grep -v '^rootfs'|cut -d' ' -f1)
|
|
fi
|
|
PVRESIZE=$(which pvresize)
|
|
LVEXTEND=$(which lvextend)
|
|
DISK=$(pvdisplay |grep "PV Name"|awk '{print $3}'|sed 's/.$//')
|
|
PARTITION=$(pvdisplay |grep "PV Name"|awk '{print $3}'| sed "s|^${DISK}||")
|
|
PV=$(pvdisplay |grep "PV Name"|awk '{print $3}')
|
|
LV=$(lvdisplay ${DEVICE} |grep "LV Path"|awk '{print $3}')
|
|
|
|
# when PV is on MSDOS logical partition, detect the umbrella
|
|
# extended partition and grow it first
|
|
TABLE=$(parted -s ${DISK} print 2>/dev/null | grep 'Partition Table:' | awk '{print $3}')
|
|
if [ "${TABLE}" = 'msdos' ] && [ ${PARTITION} -gt 4 ]; then
|
|
PARTITION="$(parted -s ${DISK} print | grep 'extended' | awk '{print $1}') $PARTITION"
|
|
fi
|
|
fi
|
|
|
|
if [ -n "$DEBUG" ]; then
|
|
echo DEVICE: ${DEVICE}
|
|
echo FSTYPE: ${FSTYPE}
|
|
echo DISK: ${DISK}
|
|
echo PARTITION: ${PARTITION}
|
|
fi
|
|
|
|
(
|
|
for PART in ${PARTITION}; do
|
|
${GROWPART} ${DISK} ${PART}
|
|
done
|
|
|
|
if [ "${LVM}" != "no" ]; then
|
|
${PVRESIZE} ${PV}
|
|
${LVEXTEND} -l +100%FREE ${LV}
|
|
fi
|
|
) || : # don't fail, partition can be already extended by dracut
|
|
|
|
case "${FSTYPE}" in
|
|
ext2|ext3|ext4)
|
|
resize2fs ${DEVICE}
|
|
;;
|
|
xfs)
|
|
xfs_growfs /
|
|
;;
|
|
btrfs)
|
|
btrfs filesystem resize max /
|
|
;;
|
|
esac
|