]> code.delx.au - monosys/commitdiff
bsnap more robust lvm snapshots
authorJames Bunton <jamesbunton@delx.au>
Mon, 29 Jan 2024 05:39:57 +0000 (16:39 +1100)
committerJames Bunton <jamesbunton@delx.au>
Mon, 29 Jan 2024 05:39:57 +0000 (16:39 +1100)
bsnap/bsnap

index 4a39f10f63c1a59d36e8bbd369c3e6c49e39f2c3..af77d1f0f9e9c32674032fe0e12e1863681d1bd4 100755 (executable)
@@ -57,25 +57,34 @@ function unsnap_bind {
 }
 
 function snap_lvm {
-    local dev="$1" mnt="$2"
+    local mnt="$2"
     local lvname="" vgname=""
-    read -r lvname vgname _ < <(lvdisplay --noheadings -C "$dev")
+    read -r lvname vgname _ < <(get_lvm_vgname_lvname "${mnt}")
+
     echo "snapshot ${vgname}/${lvname}"
-    lvcreate -L1G --snapshot --name "${lvname}snap" "${vgname}/${lvname}"
-    mount -o ro "${dev}snap" "/a${mnt}"
+    lvcreate -L1G --snapshot --name "${lvname}-snap" "${vgname}/${lvname}"
+    mount -o ro "/dev/${vgname}/${lvname}-snap" "/a${mnt}"
 }
 
 function unsnap_lvm {
-    local snapdev="${1}snap"
-    local snapmnt="/a$2"
-    if mountpoint -q "$snapmnt"; then
-        umount "$snapmnt"
+    local mnt="$2"
+    local lvname="" vgname=""
+
+    if mountpoint -q "/a$mnt"; then
+        umount "/a$mnt"
     fi
-    if [ -b "$(readlink -f "$snapdev")" ]; then
-        lvremove -f "${dev}snap"
+
+    read -r lvname vgname _ < <(get_lvm_vgname_lvname "${mnt}")
+    if lvdisplay "${vgname}/${lvname}-snap" &> /dev/null; then
+        lvremove -f "${vgname}/${lvname}-snap"
     fi
 }
 
+function get_lvm_vgname_lvname {
+    local mnt="$1" subvol=""
+    lvdisplay --noheadings -C "$(findmnt -n -o source "$mnt")"
+}
+
 function snap_btrfs {
     local mnt="$2" opts="$3" snapdir=""