#!/bin/sh
# Copyright (c) 2008-2008 Synology Inc. All rights reserved.

Usage() {
	echo "Copyright (c) 2008-2008 Synology Inc. All rights reserved."
	echo ""
	echo " Usage: `basename $0` vol_id {-l|-L} snap_size"
	echo ""
	if [ -z $1 ]; then
		echo "     vol_id: The id of targeted volume for snapshot taking."
		echo "  snap_size: -l Percentage%{VG|FREE}        e.g. -l 80%VG / -l 100%FREE"
		echo "         or  -L HumanReadSize[kKmMgGtTpPeE] e.g. -L 160G / -L 1T"
	else	
		echo "ERROR: $1 is not a valid parameter. Please run again."
	fi
	exit 1
}

SZF_SMBCONF="/usr/syno/etc/smb.conf"
# $1: share  $2: timestamp  $3: path
CreateShare() {
cat >> $SZF_SMBCONF << EOF
[$1.$2]
	invalid users=nobody,nobody
	valid users=nobody,admin,nobody
	comment="Snapshot of $1 (Read only)"
	path=$3
	guest ok=no
	browseable=yes
	ftp write only=no
	read list=nobody,admin,nobody
	write list=nobody,nobody
	writeable=no
EOF
}

# Check parameters #{{{
if [ -z "$1" -o "x$1" = "x-h" ]; then
	Usage
else
	Err=`echo "$1" | sed 's/[0-9]//g'`
	if [ "x$Err" != "x" ]; then
		Usage $1
	fi
fi
if [ -z "$3" ]; then
	Usage
elif [ "x$2" = "x-l" ]; then
	percent=`echo "$3" | sed 's/^\([0-9]*\).*/\1/'`
	Err=`echo "$3" | sed 's/^[0-9]*//'`
	if [ $percent -gt 100 ]; then
		Usage $3
	elif [ "x$Err" != "x%VG" -a "x$Err" != "x%FREE" ]; then
		Usage $3
	fi
elif [ "x$2" = "x-L" ]; then
	Err=`echo "$3" | sed 's/^[0-9]*[kKmMgGtTpPeE]//'`
	if [ "x$Err" != "x" ]; then
		Usage $3
	fi
else
	Usage $2
fi #}}}

volid=$1
vol="/volume$volid"
mdid=`expr $volid + 1`
pv="/dev/md$mdid"
vg="vg$volid"
lv="/dev/$vg/lv"

grep "$lv $vol " /proc/mounts > /dev/null
if [ $? != 0 ]; then
	echo "ERROR: $vol is not a valid lvm volume. Please run again."
	exit 1
fi

# sync file system before create snapshot
sync ; sync ; sync

timestamp=`date +"%y%m%d%H%M%S"`
lvs="lvs$timestamp"
snap_path="/dev/$vg/$lvs"
vol_snap="/volume${volid}.snap_${timestamp}"

echo "#lvcreate -s $lv -n $lvs $2 $3"
lvcreate -s $lv -n $lvs $2 $3
if [ $? -ne 0 ]; then
	echo "ERROR: Failed to take snapshot of $lv."
	exit 1
fi

mkdir $vol_snap
mount -o ro $snap_path $vol_snap
echo "$snap_path $vol_snap ext3 ro 0 0" >> /etc/fstab

pattern="path=$vol/"
list=`grep $pattern $SZF_SMBCONF | sed s:${pattern}::g`
for share in $list ; do
	echo "#Snapshot of the shared folder $share has been created."
	CreateShare $share $timestamp "$vol_snap/$share"
done

