98 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/sh
 | |
| 
 | |
| LOGGER() {
 | |
| 	echo "[$(date +%D-%H:%M:%S)] [$$] $*" >> /tmp/automount.log
 | |
| 	logger -t "automount[$$]" "$*"
 | |
| }
 | |
| 
 | |
| get_mnt() {
 | |
| 	[ -z "$*" ] && return
 | |
| 	mnt_count=$(uci show | egrep 'fstab.@mount.*uuid' | wc -l)
 | |
| 	[ "$mnt_count" = 0 ] && return
 | |
| 	local i=1;for i in $(seq 0 $mnt_count)
 | |
| 	do
 | |
| 		if_enabled=$(uci get fstab.@mount[$i].enabled 2> /dev/null)
 | |
| 		[ "$if_enabled" != 1 ] && continue
 | |
| 		uuid=$(uci get fstab.@mount[$i].uuid 2> /dev/null)
 | |
| 		[ "$uuid" != "$1" ] && continue
 | |
| 		mnt=$(uci get fstab.@mount[$i].target 2> /dev/null)
 | |
| 		echo $mnt
 | |
| 	done
 | |
| }
 | |
| 
 | |
| if [ "$(uci get fstab.@global[0].auto_mount)" != 1 ]
 | |
| then
 | |
| 	block mount
 | |
| 	rm -f /tmp/automount.pid
 | |
| 	exit
 | |
| fi
 | |
| 
 | |
| # [ -f /tmp/automount.pid ] && exit
 | |
| echo "$$" > /tmp/automount.pid
 | |
| touch -f /tmp/automount.log
 | |
| 
 | |
| case "$HOTPLUG_TYPE,$DEVTYPE" in
 | |
| block,partition)
 | |
| 	sleep 1
 | |
| 	if [ "$ACTION" = remove -o "$ACTION" = add ]
 | |
| 	then
 | |
| 		for disk in $(mount | awk '{print $1}' | grep /dev | egrep -v "rom|mtdblock|loop|overlay");do
 | |
| 			part=$(mount | grep $disk | egrep -v "rom|mtdblock|loop|overlay" | awk '{print $3}')
 | |
| 			[ ! "$part" ] && continue
 | |
| 			skip_umount=$(lsblk --list $disk > /dev/null 2>&1; echo $?)
 | |
| 			if [ "$skip_umount" != 0 ]
 | |
| 			then
 | |
| 				umount $part 2> /dev/null || umount -l $part 2> /dev/null
 | |
| 				LOGGER "Successfully umounted [$part]"
 | |
| 				[ ! "$(ls -A $part)" ] && rm -rf $part
 | |
| 			fi
 | |
| 		done
 | |
| 	fi
 | |
| 	sleep 1
 | |
| 	if [ "$ACTION" = add ]
 | |
| 	then
 | |
| 		block mount
 | |
| 		for part in $(lsblk --list | egrep -v "mtdblock|loop|overlay" | grep part | awk '{print $1}');do
 | |
| 			blk_id="$(block info /dev/$part | egrep -o 'UUID="[0-9a-zA-Z].+' | awk -F '["]' '/UUID/{print $2}')"
 | |
| 			skip_mount=$(mount | awk '{print $1}' | grep -q $part ; echo $?)
 | |
| 			fstype=$(block info /dev/$part 2> /dev/null | egrep -o 'TYPE="[0-9a-zA-Z].+' | awk -F '["]' '/TYPE/{print $2}')
 | |
| 			if [ "$skip_mount" = 0 ]
 | |
| 			then
 | |
| 				LOGGER "Already mounted [/dev/$part] on this device"
 | |
| 				continue
 | |
| 			fi
 | |
| 			case "$fstype" in
 | |
| 			*ntfs*)
 | |
| 				extra="-o nls=utf8"
 | |
| 				[ -n "$(opkg list | grep ntfs3-oot 2> /dev/null)" ] && extra="$extra -o force"
 | |
| 				[ -n "$(opkg list | grep antfs 2> /dev/null)" ] && fstype="antfs"
 | |
| 			;;
 | |
| 			vfat)
 | |
| 				extra="-o iocharset=utf8"
 | |
| 			;;
 | |
| 			esac
 | |
| 			mnt_point="$(get_mnt $blk_id)"
 | |
| 			[ -z "$mnt_point" ] && mnt_point="/mnt/$part"
 | |
| 			LOGGER "Mounting disk [/dev/$part]($fstype:$blk_id) on [$mnt_point] ..."
 | |
| 			mkdir -p $mnt_point || LOGGER "Failed to create mount point [$mnt_point]"
 | |
| 			chmod 777 $mnt_point
 | |
| 			mount -t $fstype /dev/$part $mnt_point -o rw,defaults,discard $extra 
 | |
| 			if [ "$?" != 0 ]
 | |
| 			then
 | |
| 				mount /dev/$part $mnt_point -o rw,defaults && failed=0 || failed=1
 | |
| 			else
 | |
| 				failed=0
 | |
| 			fi
 | |
| 			[ "$failed" = 0 ] && LOGGER "Successfully mounted disk [/dev/$part]" || {
 | |
| 				LOGGER "Failed to mount disk [/dev/$part]"
 | |
| 			}
 | |
| 			sleep 1 & unset failed
 | |
| 		done
 | |
| 	fi
 | |
| ;;
 | |
| esac
 | |
| 
 | |
| rm -f /tmp/automount.pid
 | |
| LOGGER "automount: Done"
 | |
| exit 0
 |