#!/bin/bash
CNT=0
while getopts	o: opt
do
	case ${opt} in
	o)
		OPTION=${OPTARG}
		if [ "${OPTARG}" = "bindfs" ]; then
			BINDFS="on"
		fi	
		shift
		shift
		;;
	\?)
		exit 1;;
	esac
done

if [ ! -f "${1}" -o ! -d "${2}" ]; then
	echo "Input disk image path ant mount path"
	exit 1
fi  

DEVICE=`losetup -a | grep ${1} | cut -d':' -f1`

if [ -z "${DEVICE}" ]; then
	DEVICE=`losetup -f`
	losetup -r ${DEVICE} ${1}
fi  

fdisk -lu ${DEVICE} > tmp 2> /dev/null 
kpartx -a ${DEVICE}

while read LINE
do
	if [ "`echo ${LINE} | grep Boot`" ]; then
		echo "        ${LINE}"
		CNT=`expr ${CNT} + 1`
	fi  
	if [ ${CNT} -ne 0 ]; then
		LOOP[${CNT}]=`echo "${LINE}" | grep ${DEVICE}`
		if [ "${LOOP[${CNT}]}" ]; then
			echo "${CNT}: ${LOOP[${CNT}]}"
			CNT=`expr ${CNT} + 1`
		fi  
	fi  
done < tmp 
rm -f tmp 

if [ ${CNT} -eq 0 ]; then
	case ${BINDFS} in
	on)
		BIND_DIR=/tmp/tmp-`echo ${DEVICE} | cut -d/ -f3`
		mkdir ${BIND_DIR} 
		mount -r ${DEVICE} ${BIND_DIR}
		bindfs --perms=a-w ${BIND_DIR} $2
		;;
	*)
		mount -r ${DEVICE} $2
		BIND_DIR=NULL
		;;
	esac
	ABSPATH=$(cd $(dirname "$2") && pwd)/$(basename "$2")
	echo "${DEVICE}     NULL    ${ABSPATH} 	${BIND_DIR}" >> /tmp/mount.dat
	exit 0
fi  

echo "Input mount number"
read NUMBER

if [ ${NUMBER} -ge ${CNT} -o ${NUMBER} -eq 0 ]; then
	echo "can't find number ${NUMBER}"
	exit 1
fi  

MOUNT_DEV=/dev/mapper/`echo "${LOOP[${NUMBER}]}" | cut -d' ' -f1 | cut -d'/' -f3`
LVM_DEV=`echo "${LOOP[${NUMBER}]}" | grep LVM`
LVM_CHK=`fdisk -lu ${DEVICE} | grep LVM | cut -d' ' -f1 | cut -d'/' -f3`

if [ "${LVM_DEV}" ]; then
	VG_NAME=`pvdisplay ${MOUNT_DEV} | grep "VG Name" | awk '{printf("%s",$3)}'`
	pvscan > /dev/null 2>&1
	vgscan > /dev/null 2>&1
	MOUNT_DEV=`lvscan | grep ${VG_NAME} | head -n 1 | cut -d\' -f2`
	vgchange -ay ${VG_NAME} > /dev/null 2>&1
elif [ "${LVM_CHK}" ]; then
	VG_NAME=`pvdisplay /dev/mapper/${LVM_CHK} | grep "VG Name" | awk '{printf("%s",$3)}'`
else
	VG_NAME=NULL    
fi  

case ${BINDFS} in
	on)
		BIND_DIR=/tmp/tmp-`echo ${DEVICE} | cut -d/ -f3`
		mkdir ${BIND_DIR} 
		mount -r ${MOUNT_DEV} ${BIND_DIR}
		bindfs --perms=a-w ${BIND_DIR} $2
		;;
	*)
		mount -r ${MOUNT_DEV} $2
		BIND_DIR=NULL
		;;
esac

ABSPATH=$(cd $(dirname "$2") && pwd)/$(basename "$2")
echo "${DEVICE}   ${VG_NAME}	${ABSPATH}	 ${BIND_DIR}" >> /tmp/mount.dat
