You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							117 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							117 lines
						
					
					
						
							2.8 KiB
						
					
					
				| #!/bin/sh | |
|  | |
| # based on script from http://gitorious.org/neutrino-hd/buildsystem-cs | |
| 
 | |
| . /etc/init.d/globals | |
| 
 | |
| MOUNTBASE=/media | |
| MOUNTPOINT="$MOUNTBASE/$MDEV" | |
| ROOTDEV=$(readlink /dev/root) | |
| 
 | |
| # do not add or remove root device again... | |
| [ "$ROOTDEV" = "$MDEV" ] && exit 0 | |
| 
 | |
| if [ -e /tmp/.nomdevmount ]; then | |
| 	LOGINFO "no action on $MDEV -- /tmp/.nomdevmount exists" | |
| 	exit 0 | |
| fi | |
| 
 | |
| create_symlinks() { | |
| 	DEVBASE=${MDEV:0:3} # first 3 characters | |
| 	PARTNUM=${MDEV:3}   # characters 4- | |
| 	if [ -e /sys/block/$DEVBASE/device/model ]; then # don't read if blockdevice not present | |
| 		read MODEL < /sys/block/$DEVBASE/device/model | |
| 	fi | |
| 	MODEL=${MODEL// /_} # replace ' ' with '_' | |
| 	OLDPWD=$PWD | |
| 	cd $MOUNTBASE | |
| 	if which blkid > /dev/null; then | |
| 		BLKID=$(blkid -c /dev/null /dev/$MDEV) | |
| 		eval ${BLKID#*:} | |
| 	fi | |
| 	if [ -n "$LABEL" ]; then | |
| 		LABEL=${LABEL// /_} # replace ' ' with '_' | |
| 		rm -f "$LABEL" | |
| 		ln -s $MDEV "$LABEL" | |
| 	fi | |
| 	if [ -n "$UUID" ]; then | |
| 		LINK="${TYPE}${TYPE:+-}${UUID}" | |
| 		rm -f "${LINK}" | |
| 		ln -s $MDEV "${LINK}" | |
| 	fi | |
| 	if [ -n "$MODEL" ]; then | |
| 		LINK="${MODEL}${PARTNUM:+-}${PARTNUM}" | |
| 		rm -f "${LINK}" | |
| 		ln -s $MDEV "${LINK}" | |
| 	fi | |
| 	cd $OLDPWD | |
| } | |
| 
 | |
| remove_symlinks() { | |
| 	OLDPWD=$PWD | |
| 	cd $MOUNTBASE | |
| 	for i in *; do | |
| 		[ -L "$i" ] || continue | |
| 		TARGET=$(readlink "$i") | |
| 		if [ "$TARGET" = "$MDEV" ]; then | |
| 			rm "$i" | |
| 		fi | |
| 	done | |
| 	cd $OLDPWD | |
| } | |
| 
 | |
| case "$ACTION" in | |
| 	add) | |
| 		if [ ${#MDEV} = 3 ]; then # sda, sdb, sdc => whole drive | |
| 			PARTS=$(sed -n "/ ${MDEV}[0-9]$/{s/ *[0-9]* *[0-9]* * [0-9]* //;p}" /proc/partitions) | |
| 			if [ -n "$PARTS" ]; then | |
| 				LOGINFO "drive has partitions $PARTS, not trying to mount $MDEV" | |
| 				exit 0 | |
| 			fi | |
| 		fi | |
| 		if grep -q "/dev/$MDEV" /proc/mounts; then | |
| 			LOGINFO "/dev/$MDEV already mounted - not mounting again" | |
| 			exit 0 | |
| 		fi | |
| 		LOGINFO "[$ACTION] mounting /dev/$MDEV to $MOUNTPOINT" | |
| 		# remove old mountpoint symlinks we might have for this device | |
| 		rm -f $MOUNTPOINT | |
| 		mkdir -p $MOUNTPOINT | |
| 		for i in 1 2 3 4 5 6 7 8 9; do # retry 9 times for slow devices | |
| 			# LOGINFO "mounting /dev/$MDEV to $MOUNTPOINT try $i" | |
| 			OUT1=$(mount -t auto /dev/$MDEV $MOUNTPOINT 2>&1 >/dev/null) | |
| 			RET1=$? | |
| 			[ $RET1 = 0 ] && break | |
| 			sleep 1 | |
| 		done | |
| 		if [ $RET1 = 0 ]; then | |
| 			create_symlinks | |
| 			echo 1 > /proc/stb/lcd/symbol_hdd | |
| 		else | |
| 			LOGWARN "mount   /dev/$MDEV $MOUNTPOINT failed with $RET1" | |
| 			LOGWARN "        $OUT1" | |
| 			rmdir $MOUNTPOINT | |
| 		fi | |
| 		if [ -x /bin/mdev_helper ]; then | |
| 			/bin/mdev_helper | |
| 		fi | |
| 		;; | |
| 	remove) | |
| 		LOGINFO "[$ACTION] unmounting $MOUNTBASE/$MDEV" | |
| 		grep -q "^/dev/$MDEV " /proc/mounts || exit 0 # not mounted... | |
| 		umount -lf $MOUNTBASE/$MDEV | |
| 		RET=$? | |
| 		if [ $RET = 0 ]; then | |
| 			rmdir $MOUNTPOINT | |
| 			remove_symlinks | |
| 			if ! grep -q "[hs]d[a-z][0-9]" /proc/mounts; then | |
| 				echo 0 > /proc/stb/lcd/symbol_hdd | |
| 			fi | |
| 		else | |
| 			LOGWARN "umount $MOUNTBASE/$MDEV failed with $RET" | |
| 		fi | |
| 		if [ -x /bin/mdev_helper ]; then | |
| 			/bin/mdev_helper | |
| 		fi | |
| 		;; | |
| esac
 | |
| 
 |