#! /bin/sh

# Snapshots source: /dev/home_data/$SHARE
# To destination: /var/backup/${SHARE}/HHhMM/ where HH=Hour, MM=Minutes
#
# Crontab: 0,30 7-18 * * * /root/scripts/snapshots.sh
# Author: c.mills@auckland.ac.nz Clark Mills Fri Oct 17 09:17:38 NZDT 2003
# Updated by bveluet@leonix.fr

export PATH=/sbin:/bin:/usr/sbin/:/usr/bin

if [ "`lsmod | grep dm-snapshot | wc -l`" -lt 1 ] ; then
	modprobe dm-snapshot
fi

SHARE=home
LSOF=17889 # Ok, it's just a big number ... randomized choice 

echo "[remount ro]"
while [ "$LSOF" -gt 0 ] ; do
	if [ "$LSOF" -ne 17889 ]; then killall -s CONT smbd; sleep 1; fi
	killall -s STOP smbd
	LSOF=`lsof -c smbd | grep /home/ | awk '{ print $4 }' | grep w$ | wc -l`

done
mount -o remount,ro /dev/sysfs/home

MINUTE=`date +%M`
HOUR=`date +%H`

if [ "$MINUTE" -gt 15 -a "$MINUTE" -lt 45 ]; then
        MINUTE='30'
else
        MINUTE='00'
fi

if [ "$MINUTE" -gt 45 ]; then
	HOUR=`echo "$HOUR + 1" | bc -l`
fi

umount /var/backup/${SHARE}/${HOUR}h${MINUTE}
lvremove -f /dev/sysfs/${SHARE}_bk${HOUR}h${MINUTE}
echo "[umount]"
echo "[lvcreate]"
lvcreate -L500M --snapshot --name ${SHARE}_bk${HOUR}h${MINUTE} /dev/sysfs/${SHARE} 
if [ ! -d /var/backup/${SHARE}/${HOUR}h${MINUTE} ]; then
  mkdir -p /var/backup/${SHARE}/${HOUR}h${MINUTE}
fi

echo "[lvcreate done]"
mount -o remount,rw /dev/sysfs/home
echo "[remount rw]"
killall -s CONT smbd

mount -t ext3 -o ro /dev/sysfs/${SHARE}_bk${HOUR}h${MINUTE} /var/backup/${SHARE}/${HOUR}h${MINUTE}
# EOF

