commit e44890cfdd4875cea1040c85badc1d99561185d9 parent 1e01846388e1e7ff30a337b98553e39231e02cad Author: Jan Pobrislo <ccx@webprojekty.cz> Date: Fri, 25 Oct 2013 20:33:33 +0200 WIP snapshot.lvm2 code Diffstat:
| A | snapshot.lvm2 | | | 34 | ++++++++++++++++++++++++++++++++++ |
1 file changed, 34 insertions(+), 0 deletions(-)
diff --git a/snapshot.lvm2 b/snapshot.lvm2 @@ -0,0 +1,34 @@ +#!/bin/sh +# usage: snapshot.lvm2 vg/lv executable [args] +SRC="$1" +shift +S_VOL="${SRC}.snaprep" +S_DEV="/dev/${SRC}.snaprep" +SNAPSHOT="/mnt/snaprep/${SRC//\//-}" +export SNAPSHOT +LOCKDIR=/var/lock/snaprep +test -d "$LOCKDIR" || mkdir -p "$LOCKDIR" || exit $? +LOCKFILE="$LOCKDIR/lvm2.${SRC//\//-}" +touch "$LOCKFILE" || exit $? +flock -n 0 <"$LOCKFILE" || exit $? +if test -b "$S_DEV"; then + echo >&2 "removing stale snapshot" + if grep -qF "$S_DEV"; then # TODO match only on start of line + umount $S_DEV || exit $? + fi + lvremove -f "$S_DEV" +fi +if test -d "$SNAPSHOT"; then + # make sure it's empty and unused + rmdir "$SNAPSHOT" +fi +echo $$ >"$LOCKFILE" +mkdir -p "$SNAPSHOT" +lvcreate -n "${SRC##*/}.snaprep" -L "${SNAPSHOT_SIZE:-10G}" -s "$SRC" +mount "$S_DEV" "$SNAPSHOT" +"$@" +RETCODE=$? +umount "$SNAPSHOT" +lvremove -f "$S_VOL" +rm "$LOCKFILE" +exit $RETCODE