commit 8d8ce8e508960ef554947fb1fa71618667b4e386
parent f19fb2a9e112392ea14e3e51f5cdf38fd32d331c
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date: Tue, 18 Feb 2014 11:33:38 +0100
support local snapshot directories
Diffstat:
4 files changed, 36 insertions(+), 29 deletions(-)
diff --git a/post b/post
@@ -2,12 +2,6 @@
exec 1>&2
env | grep RSYNC
-# for n in $(seq 5); do
-# print $n...
-# sleep 1
-# done
-# print 'Done!'
-
set -x
[[ $RSYNC_MODULE_NAME != 'snaprep_new' ]] && exit 0
@@ -23,15 +17,7 @@ else
if [[ -a $d/.snapshot.$ts ]]; then
rm -rf $f || exit $?
else
- rsync -a --exclude=/.snapshot.\* --link-dest=$RSYNC_MODULE_PATH/ $RSYNC_MODULE_PATH/ $d/$ts/ || exit $?
+ rsync -aA --exclude=/.snapshot.\* --link-dest=$RSYNC_MODULE_PATH/ $RSYNC_MODULE_PATH/ $d/$ts/ || exit $?
mv $f $d/ || exit $?
fi
fi
-
-#marks=( $RSYNC_MODULE_PATH/.snapshot.[1-9]*(N) )
-#if (($#marks)); then
-# mark=$marks[1]
-# dst=${RSYNC_MODULE_PATH:h}/${mark##*.snapshot.}
-# [[ -e $dst ]] && exit 1
-# mv -v $RSYNC_MODULE_PATH $dst
-#fi
diff --git a/pre b/pre
@@ -7,13 +7,3 @@ set -x
f=( $RSYNC_MODULE_PATH/.snapshot.[0-9]*(N) )
if (($#f)); then $0:h/post; fi
-
-#if ! [[ -d $RSYNC_MODULE_PATH ]]; then
-# snapshots=( ${RSYNC_MODULE_PATH:h}/[1-9]*(N) )
-# if (($#snapshots)); then
-# src=$snapshots[-1]
-# rsync -a --exclude=/.snapshot.\* --link-dest=$src $src/ $RSYNC_MODULE_PATH/ || exit $?
-# else
-# mkdir -p $RSYNC_MODULE_PATH/ || exit $?
-# fi
-#fi
diff --git a/snap.push.single b/snap.push.single
@@ -1,5 +1,33 @@
#!/bin/zsh
-src=$1;shift
-dst=$1;shift
-rsync -a --delete "$@" --exclude=/.snapshot.\* $src/ $dst/ && \
-rsync -a --delete "$@" $src/ $dst/
+die() {
+ print -r - "$@"
+ exit 1
+}
+
+if [[ -z $SNAP_SRC ]]; then
+ SNAP_SRC=$1;shift
+fi
+if [[ -z $SNAP_DST ]]; then
+ SNAP_DST=$1;shift
+fi
+
+marks=( $SNAP_SRC/.snapshot.[0-9]*(N) )
+(( $#marks != 1 )) && die invalid marks ${(qqq)marks}
+
+if [[ $SNAP_DST == *:* ]]; then
+ # remote
+ rsync -aA --delete "$@" --exclude=/.snapshot.\* $SNAP_SRC/ $SNAP_DST/ && \
+ rsync -aA --delete "$@" $SNAP_SRC/ $SNAP_DST/
+else
+ # local
+ [[ -d $SNAP_DST ]] || die destination not a directory: ${(qqq)SNAP_DST}
+ ts=${f##*.}
+ snapshots=( ${SNAP_DST}/.snapshot.[1-9]*(N) )
+ if (($#snapshots)); then
+ link=${SNAP_DST}/${${snapshots[-1]}##*.}
+ rsync -aA --link-dest=$link "$@" $SNAP_SRC/ $SNAP_DST/$ts/ || exit $?
+ else
+ rsync -aA "$@" $SNAP_SRC/ $SNAP_DST/$ts/ || exit $?
+ fi
+ touch ${SNAP_DST}/$marks:t
+fi
diff --git a/snapshot.lvm2 b/snapshot.lvm2
@@ -30,6 +30,9 @@ die_lvremove() {
exit $?
}
mount "$S_DEV" "$SNAPSHOT" || die_lvremove $?
+SNAP_SRC=$SNAPSHOT
+export SNAP_SRC
+touch $SNAP_SRC/.snapshot.$(date +%s)
"$@"
RETCODE=$?
umount "$SNAPSHOT"