#!/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} lv_size"
	echo ""
	if [ -z $1 ]; then
		echo "   vol_id: The targeted volume id."
		echo "  lv_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
} #}}}

YNConfirm() { #{{{
	read YN
	if [ "x$YN" = "xYES" ]; then
		return
	elif [ "x$YN" = "xNO" ]; then
		exit 0
	fi
	echo -n "Please enter 'YES' or 'NO': "
	YNConfirm
} #}}}

MkfsAndMount() { #{{{ $1: /dev/xxx $2: /volumeX
	mkfs.ext3 $1
	mount -o rw,usrquota,grpquota $1 $2
	quotacheck -c -g -u -F vfsv0 $2
	quotaon -F vfsv0 $2
	mkdir "$2/@tmp"

	grep -v $2 /etc/fstab > /tmp/fstab.tmp
	echo "$1 $2 ext3 defaults 0 0" >> /tmp/fstab.tmp
	mv /tmp/fstab.tmp /etc/fstab

	echo "#Start services..."
	for s in `ls /usr/syno/etc/rc.d/S*.sh`; do
		$s start > /dev/null 2>&1
	done
} #}}}

# 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 "$pv $vol " /proc/mounts > /dev/null
if [ $? != 0 ]; then
	echo "ERROR: $vol is not a valid volume. Please run again."
	exit 1
fi
cwd="/`pwd | cut -d/ -f2`"
if [ $cwd = $vol ]; then
	echo "ERROR: Please exit $vol or command cannot be excuted."
	exit 1
fi

echo -n "WARNING: All data on $vol will be deleted. Are you sure you want to continue? [YES|NO] "
YNConfirm
echo -n "Please confirm again: [YES|NO] "
YNConfirm

echo "#Stop services..."
for s in `ls /usr/syno/etc/rc.d/S*.sh | sort -r`; do
	$s stop > /dev/null 2>&1
done
echo "#umount $vol"
umount $vol
if [ $? -ne 0 ]; then
	echo "ERROR: Failed to umount $vol."
	exit 1
fi

echo "#pvcreate $pv"
pvcreate $pv
if [ $? -ne 0 ]; then
	echo "ERROR: Failed to pvcreate $pv. Back to RAID."
	MkfsAndMount $pv $vol	
	exit 1
fi
echo "#vgcreate $vg $pv"
vgcreate $vg $pv
if [ $? -ne 0 ]; then
	echo "ERROR: Failed to vgcreate $vg. Back to RAID"
	pvremove $pv
	MkfsAndMount $pv $vol
	exit 1
fi

echo "#lvcreate $vg -n lv $2 $3"
lvcreate $vg -n lv $2 $3
if [ $? -ne 0 ]; then
	echo "ERROR: Failed to lvcreate $lv. Back to RAID"
	vgremove $vg
	pvremove $pv
	MkfsAndMount $pv $vol
	exit 1
fi

MkfsAndMount $lv $vol

