From bfc2d162e0ca07d7d2a9fe4967690b6399057c3d Mon Sep 17 00:00:00 2001
From: Andrii <85483797+andriiandrieiev@users.noreply.github.com>
Date: Fri, 19 Nov 2021 13:10:42 +0200
Subject: filesystem: T3946: partition resize as a service
---
src/op_mode/force_part_resize.sh | 72 -------------------------
src/op_mode/force_root-partition-auto-resize.sh | 54 +++++++++++++++++++
2 files changed, 54 insertions(+), 72 deletions(-)
delete mode 100755 src/op_mode/force_part_resize.sh
create mode 100755 src/op_mode/force_root-partition-auto-resize.sh
(limited to 'src/op_mode')
diff --git a/src/op_mode/force_part_resize.sh b/src/op_mode/force_part_resize.sh
deleted file mode 100755
index eb0f26d8a..000000000
--- a/src/op_mode/force_part_resize.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env bash
-#
-# Copyright (C) 2021 VyOS maintainers and contributors
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-
-#
-# Function to get the vyos version from the commandline.
-#
-get_version () {
-for item in `cat /proc/cmdline`; do
- if [ "vyos-union" == "${item%=*}" ]; then
- echo ${item#*=}
- fi
-done
-}
-
-#
-# VERSION is the output of the get_version output.
-# DEVICEPART is the device partition where VyOS is mounted on.
-# DEVICEPATH is the path to the device where VyOS is mounted on.
-# DEVICE is the device of the device partition.
-# PARTNR is the device partition number used for parted.
-#
-VERSION=$(get_version)
-DEVICEPART=$(mount | grep $VERSION/grub | cut -d' ' -f1 | rev | cut -d'/' -f1 | rev)
-DEVICEPATH=$(mount | grep $VERSION/grub | cut -d' ' -f1 | rev | cut -d'/' -f2- | rev)
-DEVICE=$(lsblk -no pkname $DEVICEPATH/$DEVICEPART)
-PARTNR=$(grep -c $DEVICEPART /proc/partitions)
-
-#
-# Check if the device really exits.
-#
-fdisk -l $DEVICEPATH/$DEVICE >> /dev/null 2>&1 || (echo "could not find device $DEVICE" && exit 1)
-
-#
-# START is the partition starting sector.
-# CURSIZE is the partition start sector + the partition end sector.
-# MAXSIZE is the device end sector.
-#
-START=$(cat /sys/block/$DEVICE/$DEVICEPART/start)
-CURSIZE=$(($START+$(cat /sys/block/$DEVICE/$DEVICEPART/size)))
-MAXSIZE=$(($(cat /sys/block/$DEVICE/size)-8))
-
-#
-# Check if the device size is larger then the partition size
-# and if that is the case, resize the partition and grow the filesystem.
-#
-if [ $MAXSIZE -gt $CURSIZE ]; then
-parted "${DEVICEPATH}/${DEVICE}" ---pretend-input-tty > /dev/null 2>&1 < /dev/null 2>&1
- resize2fs ${DEVICEPATH}/$DEVICEPART > /dev/null 2>&1
-fi
-
diff --git a/src/op_mode/force_root-partition-auto-resize.sh b/src/op_mode/force_root-partition-auto-resize.sh
new file mode 100755
index 000000000..4f13e3e03
--- /dev/null
+++ b/src/op_mode/force_root-partition-auto-resize.sh
@@ -0,0 +1,54 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2021 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+# ROOT_PART_DEV – root partition device path
+# ROOT_PART_NAME – root partition device name
+# ROOT_DEV_NAME – disk device name
+# ROOT_DEV – disk device path
+# ROOT_PART_NUM – number of root partition on disk
+# ROOT_DEV_SIZE – disk total size in 512 bytes sectors
+# ROOT_PART_SIZE – root partition total size in 512 bytes sectors
+# ROOT_PART_START – number of 512 bytes sector where root partition starts
+# AVAILABLE_EXTENSION_SIZE – calculation available disk space after root partition in 512 bytes sectors
+ROOT_PART_DEV=$(findmnt /usr/lib/live/mount/persistence -o source -n)
+ROOT_PART_NAME=$(echo "$ROOT_PART_DEV" | cut -d "/" -f 3)
+ROOT_DEV_NAME=$(echo /sys/block/*/"${ROOT_PART_NAME}" | cut -d "/" -f 4)
+ROOT_DEV="/dev/${ROOT_DEV_NAME}"
+ROOT_PART_NUM=$(cat "/sys/block/${ROOT_DEV_NAME}/${ROOT_PART_NAME}/partition")
+ROOT_DEV_SIZE=$(cat "/sys/block/${ROOT_DEV_NAME}/size")
+ROOT_PART_SIZE=$(cat "/sys/block/${ROOT_DEV_NAME}/${ROOT_PART_NAME}/size")
+ROOT_PART_START=$(cat "/sys/block/${ROOT_DEV_NAME}/${ROOT_PART_NAME}/start")
+AVAILABLE_EXTENSION_SIZE=$((ROOT_DEV_SIZE - ROOT_PART_START - ROOT_PART_SIZE - 8))
+
+#
+# Check if device have space for root partition growing up.
+#
+if [ $AVAILABLE_EXTENSION_SIZE -lt 1 ]; then
+ echo "There is no available space for root partition extension"
+ exit 0;
+fi
+
+#
+# Resize the partition and grow the filesystem.
+#
+parted -m ${ROOT_DEV} ---pretend-input-tty > /dev/null 2>&1 < /dev/null 2>&1
+resize2fs ${ROOT_PART_DEV} > /dev/null 2>&1
--
cgit v1.2.3