summarylogtreecommitdiffstats
path: root/lvm_create_filesystem_snapshot
diff options
context:
space:
mode:
Diffstat (limited to 'lvm_create_filesystem_snapshot')
-rw-r--r--lvm_create_filesystem_snapshot67
1 files changed, 67 insertions, 0 deletions
diff --git a/lvm_create_filesystem_snapshot b/lvm_create_filesystem_snapshot
new file mode 100644
index 000000000000..3c919743f726
--- /dev/null
+++ b/lvm_create_filesystem_snapshot
@@ -0,0 +1,67 @@
+#!/bin/sh
+
+set -e
+
+#For 20GB
+#SNAP_SIZE="-L20G"
+SNAP_SIZE="-l50%FREE"
+
+mkdir -p /mnt/urbackup_snaps
+
+SNAP_ID=$1
+SNAP_MOUNTPOINT="$2"
+SNAP_DEST=/mnt/urbackup_snaps/$SNAP_ID
+
+if lsblk -r --output "NAME,MOUNTPOINT" --paths > /dev/null 2>&1
+then
+ VOLNAME=`lsblk -r --output "NAME,MOUNTPOINT" --paths | egrep " ${SNAP_MOUNTPOINT}\$" | head -n 1 | tr -s " " | cut -d" " -f1`
+else
+ VOLNAME=`lsblk -r --output "NAME,MOUNTPOINT" | egrep " ${SNAP_MOUNTPOINT}\$" | head -n 1 | tr -s " " | cut -d" " -f1`
+ VOLNAME="/dev/mapper/$VOLNAME"
+fi
+
+TYPE=`df -T -P | egrep " ${SNAP_MOUNTPOINT}\$" | head -n 1 | tr -s " " | cut -d" " -f2`
+
+if [ "x$VOLNAME" = x ]
+then
+ echo "Could not find LVM volume for mountpoint ${SNAP_MOUNTPOINT}"
+ exit 1
+fi
+
+export LVM_SUPPRESS_FD_WARNINGS=1
+
+VGNAME=`lvdisplay "$VOLNAME" | grep "VG Name" | tr -s " " | cut -d" " -f4`
+if [ "x$VGNAME" = x ]
+then
+ echo "Could not find LVM volume group of volume $VOLNAME"
+ exit 1
+fi
+
+if [ "x$SNAP_ID" = x ]
+then
+ echo "No snapshot id specified"
+ exit 1
+fi
+
+lvcreate $SNAP_SIZE -s -n urbackup_snap_$SNAP_ID "$VOLNAME"
+
+mkdir -p /mnt/urbackup_snaps/$SNAP_ID
+
+MOUNTOPTS="ro"
+
+if [ $TYPE = "xfs" ]
+then
+ MOUNTOPTS="ro,nouuid"
+fi
+
+if ! mount -o $MOUNTOPTS /dev/$VGNAME/urbackup_snap_$SNAP_ID /mnt/urbackup_snaps/$SNAP_ID
+then
+ echo "Mounting filesystem failed"
+ rmdir /mnt/urbackup_snaps/$SNAP_ID
+ lvremove -f /dev/$VGNAME/urbackup_snap_$SNAP_ID
+ exit 1
+fi
+
+echo "SNAPSHOT=/mnt/urbackup_snaps/$SNAP_ID"
+
+exit 0 \ No newline at end of file