X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=backup%2Fsnap-common;h=99234b159737be9fed1a80fdb5aa727e43559af4;hp=c12bc6dcbbbafae0949efde85e7b15f02fec84ff;hb=6cc6688a64eb5cea66b114e94c387a57190ff24a;hpb=b7fed73a8d9509acef0307ce94d59c047653b821 diff --git a/backup/snap-common b/backup/snap-common index c12bc6d..99234b1 100644 --- a/backup/snap-common +++ b/backup/snap-common @@ -29,10 +29,38 @@ esac #---------- common functions +lvmunmapperdevice () { + # turns device=/dev/mapper/... into /dev// + 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