Initial commit.
This commit is contained in:
99
one-context.d/loc-05-grow-rootfs
Executable file
99
one-context.d/loc-05-grow-rootfs
Executable file
@@ -0,0 +1,99 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user