summaryrefslogtreecommitdiffstats
path: root/modules.d/80lvmthinpool-monitor/start-thinpool-monitor.sh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-03 13:54:25 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-03 13:54:25 +0000
commit9cb1c4df7b9ce1a9ad1312621b0f2b16a94fba3a (patch)
tree2efb72864cc69e174c9c5ee33efb88a5f1553b48 /modules.d/80lvmthinpool-monitor/start-thinpool-monitor.sh
parentInitial commit. (diff)
downloaddracut-9cb1c4df7b9ce1a9ad1312621b0f2b16a94fba3a.tar.xz
dracut-9cb1c4df7b9ce1a9ad1312621b0f2b16a94fba3a.zip
Adding upstream version 060+5.upstream/060+5
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'modules.d/80lvmthinpool-monitor/start-thinpool-monitor.sh')
-rwxr-xr-xmodules.d/80lvmthinpool-monitor/start-thinpool-monitor.sh47
1 files changed, 47 insertions, 0 deletions
diff --git a/modules.d/80lvmthinpool-monitor/start-thinpool-monitor.sh b/modules.d/80lvmthinpool-monitor/start-thinpool-monitor.sh
new file mode 100755
index 0000000..10f4a4b
--- /dev/null
+++ b/modules.d/80lvmthinpool-monitor/start-thinpool-monitor.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+type getarg > /dev/null 2>&1 || . /lib/dracut-lib.sh
+
+LVS=$(getargs rd.lvm.lv -d rd_LVM_LV=)
+
+is_lvm2_thinp_device() {
+ _device_path=$1
+ _lvm2_thin_device=$(lvm lvs -S 'lv_layout=sparse && lv_layout=thin' \
+ --nosuffix --noheadings -o vg_name,lv_name "$_device_path" 2> /dev/null)
+
+ [ -n "$_lvm2_thin_device" ] && return $?
+}
+
+for LV in $LVS; do
+ if is_lvm2_thinp_device "/dev/$LV"; then
+ THIN_POOLS="$(lvm lvs -S 'lv_layout=sparse && lv_layout=thin' \
+ --nosuffix --noheadings -o vg_name,pool_lv "$LV" \
+ | awk '{printf("%s/%s",$1,$2);}') $THIN_POOLS"
+ fi
+done
+
+THIN_POOLS=$(echo "$THIN_POOLS" | tr ' ' '\n' | sort -u | tr '\n' ' ')
+
+if [ -n "$THIN_POOLS" ]; then
+ if [ -e "/etc/lvm/lvm.conf" ]; then
+ # Use 'monitoring=0' to override the value in lvm.conf, in case
+ # dmeventd monitoring been started after the calling.
+ CONFIG="activation {monitoring=0}"
+ else
+ CONFIG="activation {monitoring=0 thin_pool_autoextend_threshold=70 thin_pool_autoextend_percent=20}"
+ fi
+
+ # Activate the thinpool in case the thinpool is in inactive state.
+ # Otherwise lvextend will fail.
+ for THIN_POOL in $THIN_POOLS; do
+ lvm lvchange -ay "$THIN_POOL" --config "$CONFIG"
+ done
+
+ while true; do
+ for THIN_POOL in $THIN_POOLS; do
+ lvm lvextend --use-policies --config "$CONFIG" "$THIN_POOL"
+ done
+ sleep 5
+ done &
+ echo $! > /run/thinpool-moni.pid
+fi