86 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| #!/sbin/runscript
 | |
| # Copyright 2007-2008 Roy Marples
 | |
| # All rights reserved
 | |
| 
 | |
| description="Mounts disks and swap according to /etc/fstab."
 | |
| 
 | |
| depend()
 | |
| {
 | |
| 	need checkfs
 | |
| }
 | |
| 
 | |
| start()
 | |
| {
 | |
| 	# Mount local filesystems in /etc/fstab.
 | |
| 	local types="noproc" x=
 | |
| 	for x in ${net_fs_list}; do
 | |
| 		types="${types},${x}"
 | |
| 	done
 | |
| 
 | |
| 	ebegin "Mounting local filesystems"
 | |
| 	mount -at "${types}"
 | |
| 	eend $? "Some local filesystem failed to mount"
 | |
| 
 | |
| 	# Always return 0 - some local mounts may not be critical for boot
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| stop()
 | |
| {
 | |
| 	# Don't unmount anything for VPS systems
 | |
| 	[ "${RC_SYS}" = "VPS" ] && return 0
 | |
| 
 | |
| 	# We never unmount / or /dev or $RC_SVCDIR
 | |
| 	local x= no_umounts="/|/dev|/dev/.*|${RC_SVCDIR}"
 | |
| 
 | |
| 	# RC_NO_UMOUNTS is an env var that can be set by plugins
 | |
| 	OIFS=${IFS} SIFS=${IFS-y}
 | |
| 	IFS=$IFS:
 | |
| 	for x in ${no_umounts} ${RC_NO_UMOUNTS}; do
 | |
| 		no_umounts="${no_umounts}|${x}"
 | |
| 	done
 | |
| 	if [ "${SIFS}" = "y" ]; then
 | |
| 		IFS=$OIFS
 | |
| 	else
 | |
| 		unset IFS
 | |
| 	fi
 | |
| 
 | |
| 	if [ "${RC_UNAME}" = "Linux" ]; then
 | |
| 		no_umounts="${no_umounts}|/proc|/proc/.*|/sys|/sys/.*"
 | |
| 	fi
 | |
| 	no_umounts="^(${no_umounts})$"
 | |
| 
 | |
| 	# Flush all pending disk writes now
 | |
| 	sync; sync
 | |
| 
 | |
| 	# Try to unmount all tmpfs filesystems not in use, else a deadlock may
 | |
| 	# occure, bug #13599.
 | |
| 	# As $RC_SVCDIR may also be tmpfs we cd to it to lock it
 | |
| 	cd "${RC_SVCDIR}"
 | |
| 	umount -a -t tmpfs 2>/dev/null
 | |
| 
 | |
| 	. "${RC_LIBDIR}"/sh/rc-mount.sh
 | |
| 
 | |
| 	# Umount loopback devices
 | |
| 	einfo "Unmounting loopback devices"
 | |
| 	eindent
 | |
| 	do_unmount "umount -d" --skip-point-regex "${no_umounts}" \
 | |
| 		--node-regex "^/dev/loop"
 | |
| 	eoutdent
 | |
| 
 | |
| 	# Now everything else, except network filesystems as the
 | |
| 	# network should be down by this point.
 | |
| 	einfo "Unmounting filesystems"
 | |
| 	eindent
 | |
| 	local fs=
 | |
| 	for x in ${net_fs_list}; do
 | |
| 		fs="${fs}${fs:+|}${x}"
 | |
| 	done
 | |
| 	[ -n "${fs}" ] && fs="^(${fs})$"
 | |
| 	do_unmount "umount" --skip-point-regex "${no_umounts}" \
 | |
| 		${fs:+--skip-fstype-regex} ${fs} --nonetdev
 | |
| 	eoutdent
 | |
| 
 | |
| 	return 0
 | |
| }
 |