diff options
author | k0n24d | 2016-06-20 16:57:19 +0200 |
---|---|---|
committer | k0n24d | 2016-06-20 16:57:19 +0200 |
commit | 9f97eab5feb840f1a6c6aa77d5ca28578119ae4b (patch) | |
tree | a84340982b0effcc65cbed792edbc04a354c45cc /dattobd_create_filesystem_snapshot | |
download | aur-9f97eab5feb840f1a6c6aa77d5ca28578119ae4b.tar.gz |
Initial version
Diffstat (limited to 'dattobd_create_filesystem_snapshot')
-rw-r--r-- | dattobd_create_filesystem_snapshot | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/dattobd_create_filesystem_snapshot b/dattobd_create_filesystem_snapshot new file mode 100644 index 000000000000..c4faa3612ddf --- /dev/null +++ b/dattobd_create_filesystem_snapshot @@ -0,0 +1,87 @@ +#!/bin/sh + +set -e + +mkdir -p /mnt/urbackup_snaps + +SNAP_ID=$1 +SNAP_MOUNTPOINT="$2" +SNAP_DEST=/mnt/urbackup_snaps/$SNAP_ID + +DEVICE=$(df -T -P | egrep " ${SNAP_MOUNTPOINT}\$" | head -n 1 | tr -s " " | cut -d" " -f1) +TYPE=$(df -T -P | egrep " ${SNAP_MOUNTPOINT}\$" | head -n 1 | tr -s " " | cut -d" " -f2) + +if [ "x$DEVICE" = "x" ] +then + echo "Cannot get device for filesystem $SNAP_MOUNTPOINT" + exit 1 +fi + +echo "Snapshotting device $DEVICE via dattobd..." + +NUM=0 + +while [ -e "/dev/datto$NUM" ] +do + NUM=`expr $NUM + 1` +done + +if ! modprobe dattobd +then + echo "Dattobd kernel module not available" + exit 1 +fi + +echo "Using /dev/datto$NUM..." + +sync + +dbdctl setup-snapshot "$DEVICE" "$SNAP_MOUNTPOINT/.datto_$SNAP_ID" $NUM + +echo $NUM > ${SNAP_DEST}-num + +DEV_SIZE=`blockdev --getsize /dev/datto$NUM` + +truncate -s100M $SNAP_MOUNTPOINT/.overlay_$SNAP_ID + +LODEV=`losetup -f` + +if [ "x$LODEV" = x ] +then + rm "${SNAP_DEST}-num" + rm $SNAP_MOUNTPOINT/.overlay_$SNAP_ID + dbdctl destroy $NUM + exit 1 +fi + + +losetup $LODEV $SNAP_MOUNTPOINT/.overlay_$SNAP_ID + +echo "0 $DEV_SIZE snapshot /dev/datto$NUM $LODEV N 8" | dmsetup create "wsnap-$SNAP_ID" + +echo "Mounting /dev/mapper/wsnap-$SNAP_ID..." + +mkdir -p $SNAP_DEST + +MOUNTOPTS="ro" + +if [ $TYPE = "xfs" ] +then + MOUNTOPTS="ro,nouuid" +fi + +if ! mount -o $MOUNTOPTS /dev/mapper/wsnap-$SNAP_ID $SNAP_DEST +then + echo "Mounting filesystem failed" + rmdir "$SNAP_DEST" + rm "${SNAP_DEST}-num" + dmsetup remove "wsnap-$SNAP_ID" + losetup -d $LODEV + rm $SNAP_MOUNTPOINT/.overlay_$SNAP_ID + dbdctl destroy $NUM + exit 1 +fi + +echo "SNAPSHOT=$SNAP_DEST" + +exit 0
\ No newline at end of file |