chiark / gitweb /
remountrocp
[chiark-utils.git] / backup / snap-common
diff --git a/backup/snap-common b/backup/snap-common
new file mode 100644 (file)
index 0000000..c12bc6d
--- /dev/null
@@ -0,0 +1,66 @@
+# sourced by snap/lvm and snap/remountrocp
+
+#---------- common arg parsing
+
+nargs=$#
+opmode="$1"
+vardir="$2"
+device="$3"
+mountpoint="$4"
+
+lvm_lv=chiark-backup
+lvm_lvtools_opts='-A n'
+lvm_lvcreate_opts=
+lvm_lvcreate_args=
+
+test ! -f /etc/chiark-backup/settings.sh || . /etc/chiark-backup/settings.sh
+
+case "$nargs.$opmode" in
+4.snap|2.drop)
+       ;;
+*)
+       cat >&2 <<END
+usage: .../$snapkind snap VARDIR DEV MOUNT
+       .../$snapkind drop VARDIR
+END
+       exit 1
+       ;;
+esac
+
+#---------- common functions
+
+lvmdropcore () {
+       snmnt="$vardir/snap-mount"
+       umount -v "$snmnt" || true
+       test ! -d "$snmnt" || rmdir -- "$snmnt"
+
+       set +e
+       old_lv_dev="$(readlink $vardir/snap-device)"
+       rc=$?
+       set -e
+
+       if [ $rc = 0 ]; then
+               set +e
+               lvchange    $lvm_lvtools_opts -a n $old_lv_dev
+               lvremove -f $lvm_lvtools_opts      $old_lv_dev
+               set -e
+               rm $vardir/snap-device
+       fi
+}
+
+lvmextentscore1 () {
+       vgdisplay_out="$(really vgdisplay -c "$vgroup")"
+       extents="$(printf "%s" "$vgdisplay_out" | awk -F: '{print $16}')"
+       extsize="$(printf "%s" "$vgdisplay_out" | awk -F: '{print $13}')"
+}
+
+lvmextentscore2 () {
+       if [ $extents2 -lt $extents ]; then extents=$extents2; fi
+       lvm_lvsize_opts="-l $extents"
+}
+
+lvmcreatecore1 () {
+       lvpath="/dev/$vgroup/$lvm_lv"
+       ln -s -- "$lvpath" "$vardir"/snap-device
+       sync
+}