diff options
Diffstat (limited to 'lvm_create_filesystem_snapshot')
-rw-r--r-- | lvm_create_filesystem_snapshot | 67 |
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 |