#!/sbin/runscript # Copyright 2007-2008 Roy Marples # All rights reserved. Released under the 2-clause BSD license. description="Mounts disks and swap according to /etc/fstab." depend() { need fsck use modules mtab keyword nojail noprefix } 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 }