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
							 | 
						|
								
							 |