chiark / gitweb /
changelog: start ~iwj again
[chiark-utils.git] / backup / snap-common
index c12bc6dcbbbafae0949efde85e7b15f02fec84ff..99234b159737be9fed1a80fdb5aa727e43559af4 100644 (file)
@@ -29,10 +29,38 @@ esac
 
 #---------- common functions
 
+lvmunmapperdevice () {
+       # turns device=/dev/mapper/... into /dev/<group>/<volume>
+       case "$device" in
+       /dev/mapper/*)
+               device="`printf '%s' "$device" | perl -pe '
+                       s,^/dev/mapper/,,;
+                       die if m,/,;
+                       s,\-\-,!,g;
+                       s,\-,/,g;
+                       s,\!,-,g;
+                       s,^,/dev/,;
+               '`"
+               ;;
+       esac
+}
+
+lvmdevice2vgroup () {
+       vgroup="${device#/dev/}"
+       vgroup="${vgroup%/*}"
+}
+
+daft_sleep () {
+       sleep 5
+}
+
 lvmdropcore () {
        snmnt="$vardir/snap-mount"
+       daft_sleep
        umount -v "$snmnt" || true
-       test ! -d "$snmnt" || rmdir -- "$snmnt"
+       daft_sleep
+       test ! -d "$snmnt" || rmdir -- "$snmnt" || rm -f "$snmnt"
+       daft_sleep
 
        set +e
        old_lv_dev="$(readlink $vardir/snap-device)"
@@ -41,14 +69,16 @@ lvmdropcore () {
 
        if [ $rc = 0 ]; then
                set +e
-               lvchange    $lvm_lvtools_opts -a n $old_lv_dev
+               daft_sleep
                lvremove -f $lvm_lvtools_opts      $old_lv_dev
+               daft_sleep
                set -e
                rm $vardir/snap-device
        fi
 }
 
 lvmextentscore1 () {
+       # vgroup must be set
        vgdisplay_out="$(really vgdisplay -c "$vgroup")"
        extents="$(printf "%s" "$vgdisplay_out" | awk -F: '{print $16}')"
        extsize="$(printf "%s" "$vgdisplay_out" | awk -F: '{print $13}')"
@@ -60,6 +90,7 @@ lvmextentscore2 () {
 }
 
 lvmcreatecore1 () {
+       # vgroup must be set
        lvpath="/dev/$vgroup/$lvm_lv"
        ln -s -- "$lvpath" "$vardir"/snap-device
        sync