snaprep

git mirror of https://ccx.te2000.cz/bzr/snaprep
git clone https://ccx.te2000.cz/git/snaprep
Log | Files | Refs

commit e44890cfdd4875cea1040c85badc1d99561185d9
parent 1e01846388e1e7ff30a337b98553e39231e02cad
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date:   Fri, 25 Oct 2013 20:33:33 +0200

WIP snapshot.lvm2 code
Diffstat:
Asnapshot.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