From f8f5960e7617b15399b25d3701f587c7abf4a79c Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Sun, 19 Dec 2021 23:13:58 +0000 Subject: [PATCH] uvol: update to 0.6 * auto-created meta volume Automatically create volume '.meta' sized 0.01% of the total space managed by uvol, the minimum size being 4 MiB. This volume should be used to keep metadata about stored volumes, such as container runtime configuration (in /var/run/uvol/.meta/uxc) or the database of installed container packages. * configurable LVM volume group Allow setting volume group to be used by uvol using UCI. This is useful on devices which do not boot off the device which should be used for uvol and hence cannot make use of autopart and physical volume detection based on kernel cmdline. Use option vg_name in uvol section of fstab UCI config package. Signed-off-by: Daniel Golle --- utils/uvol/Makefile | 4 ++-- utils/uvol/files/common.sh | 6 +++--- utils/uvol/files/lvm.sh | 11 ++++++++--- utils/uvol/files/ubi.sh | 1 + utils/uvol/files/uvol.defaults | 16 +++++++++++++++- 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/utils/uvol/Makefile b/utils/uvol/Makefile index e167e20d03..6583e6e756 100644 --- a/utils/uvol/Makefile +++ b/utils/uvol/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=uvol -PKG_VERSION:=0.5 +PKG_VERSION:=0.6 PKG_RELEASE:=$(AUTORELEASE) PKG_MAINTAINER:=Daniel Golle @@ -70,7 +70,7 @@ define Package/uvol/install $(INSTALL_BIN) ./files/ubi.sh $(1)/usr/libexec/uvol/20-ubi.sh $(INSTALL_BIN) ./files/lvm.sh $(1)/usr/libexec/uvol/50-lvm.sh $(INSTALL_BIN) ./files/uvol $(1)/usr/sbin - $(INSTALL_BIN) ./files/uvol.defaults $(1)/etc/uci-defaults/90-uvol-restore-uci + $(INSTALL_BIN) ./files/uvol.defaults $(1)/etc/uci-defaults/90-uvol-init endef $(eval $(call BuildPackage,autopart)) diff --git a/utils/uvol/files/common.sh b/utils/uvol/files/common.sh index e26c26404b..8306477720 100644 --- a/utils/uvol/files/common.sh +++ b/utils/uvol/files/common.sh @@ -23,8 +23,8 @@ uvol_uci_add() { uuid="${uuid:5}" case "$uciname" in - "_uxc") - target="/var/run/uxc" + "_meta") + target="/var/run/uvol/.meta" ;; "_"*) return 1 @@ -50,7 +50,7 @@ uvol_uci_remove() { local volname="$1" local uciname - uciname="${volname//-/_}" + uciname="${volname//[-.]/_}" uciname="${uciname//[!([:alnum:]_)]}" if [ -e "${UCI_SPOOLDIR}/add-$1" ]; then rm "${UCI_SPOOLDIR}/add-$1" diff --git a/utils/uvol/files/lvm.sh b/utils/uvol/files/lvm.sh index 08ff8d979d..0639c10f1b 100644 --- a/utils/uvol/files/lvm.sh +++ b/utils/uvol/files/lvm.sh @@ -62,8 +62,12 @@ existvol() { vg_name= exportpv() { - local reports rep pv pvs vg_name= + config_load fstab + local uvolsect="$(config_foreach echo uvol)" + [ -n "$uvolsect" ] && config_get vg_name "$uvolsect" vg_name + [ -n "$vg_name" ] && return + local reports rep pv pvs json_init json_load "$(pvs -o vg_name -S "pv_name=~^/dev/$rootdev.*\$")" json_select report @@ -152,7 +156,7 @@ getdev() { for dms in /sys/devices/virtual/block/dm-* ; do [ "$dms" = "/sys/devices/virtual/block/dm-*" ] && break read -r dm_name < "$dms/dm/name" - [ $(basename "$lv_dm_path") = "$dm_name" ] && echo "$(basename "$dms")" + [ "$(basename "$lv_dm_path")" = "$dm_name" ] && basename "$dms" done } @@ -316,6 +320,7 @@ listvols() { lv_mode="${lv_name:0:2}" lv_name="${lv_name:3}" lv_size=${lv_size%B} + [ "${lv_name:0:1}" = "." ] && continue if [ "$json_output" = "1" ]; then [ "$json_notfirst" = "1" ] && echo "," echo -e "\t{" @@ -340,7 +345,7 @@ listvols() { } detect() { - local reports rep lv lvs lv_name lv_full_name lv_mode volname devname lv_skip_activation + local reports rep lv lvs lv_name lv_full_name lv_mode volname devname local temp_up="" json_init diff --git a/utils/uvol/files/ubi.sh b/utils/uvol/files/ubi.sh index 0af34f3c02..d7593606fc 100644 --- a/utils/uvol/files/ubi.sh +++ b/utils/uvol/files/ubi.sh @@ -212,6 +212,7 @@ listvols() { esac volmode="${volname:5:2}" volname="${volname:8}" + [ "${volname:0:1}" = "." ] && continue if [ "$json_output" = "1" ]; then [ "$json_notfirst" = "1" ] && echo "," echo -e "\t{" diff --git a/utils/uvol/files/uvol.defaults b/utils/uvol/files/uvol.defaults index cbd53a3e4e..e71135f7a8 100644 --- a/utils/uvol/files/uvol.defaults +++ b/utils/uvol/files/uvol.defaults @@ -1,3 +1,17 @@ #!/bin/sh -uci -q get fstab.@uvol[0].initialized >/dev/null || uvol detect || true +uvol_init() { + local metasz freesz totalsz + uvol detect + metasz="$(uvol size .meta 2>/dev/null)" + [ "$((metasz))" -gt 0 ] && return + totalsz="$(uvol total)" + freesz="$(uvol free)" + metasz="$((totalsz / 10240))" + [ "$metasz" -lt 4194304 ] && metasz=4194304 + [ "$metasz" -gt "$freesz" ] && return + uvol create .meta "$metasz" rw + uvol up .meta +} + +uci -q get fstab.@uvol[0].initialized >/dev/null || uvol_init