#!@PREFIX@/sbin/runscript # Copyright (c) 2007-2009 Roy Marples # Released under the 2-clause BSD license. description="Mounts disks and swap according to /etc/fstab." depend() { need fsck use lvm modules mtab after lvm modules keyword -jail -prefix -vserver -lxc } start() { # Mount local filesystems in /etc/fstab. local types="noproc" x= no_netdev= for x in $net_fs_list $extra_net_fs_list; do types="${types},${x}" done if [ "$RC_UNAME" = Linux ]; then no_netdev="-O no_netdev" fi ebegin "Mounting local filesystems" mount -at "$types" $no_netdev eend $? "Some local filesystem failed to mount" # Always return 0 - some local mounts may not be critical for boot return 0 } stop() { # We never unmount / or /dev or $RC_SVCDIR # Bug 381783 local rc_svcdir=$(echo $RC_SVCDIR | sed 's:/lib\(32\|64\)\?/:/lib(32|64)?/:g') local x= no_umounts_r="/|/dev|/dev/.*|${rc_svcdir}" no_umounts_r="${no_umounts_r}|/bin|/sbin|/lib(32|64)?|/libexec" # RC_NO_UMOUNTS is an env var that can be set by plugins local IFS="$IFS:" for x in $no_umounts $RC_NO_UMOUNTS; do no_umounts_r="$no_umounts_r|$x" done if [ "$RC_UNAME" = Linux ]; then no_umounts_r="$no_umounts_r|/proc|/proc/.*|/run|/sys|/sys/.*" fi no_umounts_r="^($no_umounts_r)$" # Flush all pending disk writes now sync; sync . "$RC_LIBEXECDIR"/sh/rc-mount.sh # Umount loop devices einfo "Unmounting loop devices" eindent do_unmount "umount -d" --skip-point-regex "$no_umounts_r" \ --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 $extra_net_fs_list; do fs="$fs${fs:+|}$x" done [ -n "$fs" ] && fs="^($fs)$" do_unmount umount --skip-point-regex "$no_umounts_r" \ "${fs:+--skip-fstype-regex}" $fs --nonetdev eoutdent return 0 }