101 lines
2.2 KiB
Bash
Executable File
101 lines
2.2 KiB
Bash
Executable File
#! /bin/sh
|
|
### BEGIN INIT INFO
|
|
# Provides: umountnfs
|
|
# Required-Start:
|
|
# Required-Stop: umountfs
|
|
# Should-Stop: $network $portmap nfs-common
|
|
# Default-Start:
|
|
# Default-Stop: 0 6
|
|
# Short-Description: Unmount all network filesystems except the root fs.
|
|
# Description: Also unmounts all virtual filesystems (proc,
|
|
# devpts, usbfs, sysfs) that are not mounted at the
|
|
# top level.
|
|
### END INIT INFO
|
|
|
|
PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
|
KERNEL="$(uname -s)"
|
|
RELEASE="$(uname -r)"
|
|
. /lib/init/vars.sh
|
|
|
|
. /lib/lsb/init-functions
|
|
|
|
case "${KERNEL}:${RELEASE}" in
|
|
Linux:[01].*|Linux:2.[01].*)
|
|
FLAGS=""
|
|
;;
|
|
Linux:2.[23].*|Linux:2.4.?|Linux:2.4.?-*|Linux:2.4.10|Linux:2.4.10-*)
|
|
FLAGS="-f"
|
|
;;
|
|
*)
|
|
FLAGS="-f -l"
|
|
;;
|
|
esac
|
|
|
|
do_stop () {
|
|
# Write a reboot record to /var/log/wtmp before unmounting
|
|
halt -w
|
|
|
|
# Remove bootclean flag files (precaution against symlink attacks)
|
|
rm -f /tmp/.clean /run/.clean /run/lock/.clean
|
|
|
|
#
|
|
# Make list of points to unmount in reverse order of their creation
|
|
#
|
|
|
|
DIRS=""
|
|
while read -r DEV MTPT FSTYPE OPTS REST
|
|
do
|
|
case "$MTPT" in
|
|
/|/proc|/dev|/dev/pts|/dev/shm|/proc/*|/sys|/run|/run/*)
|
|
continue
|
|
;;
|
|
esac
|
|
case "$FSTYPE" in
|
|
nfs|nfs4|smbfs|ncp|ncpfs|cifs|coda|ocfs2|gfs|ceph)
|
|
DIRS="$MTPT $DIRS"
|
|
;;
|
|
proc|procfs|linprocfs|devpts|usbfs|usbdevfs|sysfs)
|
|
DIRS="$MTPT $DIRS"
|
|
;;
|
|
esac
|
|
case "$OPTS" in
|
|
_netdev|*,_netdev|_netdev,*|*,_netdev,*)
|
|
DIRS="$MTPT $DIRS"
|
|
;;
|
|
esac
|
|
done < /etc/mtab
|
|
|
|
if [ "$DIRS" ]
|
|
then
|
|
[ "$VERBOSE" = no ] || log_action_begin_msg "Unmounting remote and non-toplevel virtual filesystems"
|
|
fstab-decode umount $FLAGS $DIRS
|
|
ES=$?
|
|
[ "$VERBOSE" = no ] || log_action_end_msg $ES
|
|
fi
|
|
|
|
# emit unmounted-remote-filesystems hook point so any upstart jobs
|
|
# that support remote filesystems can be stopped
|
|
if [ -x /sbin/initctl ]; then
|
|
initctl --quiet emit unmounted-remote-filesystems 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
case "$1" in
|
|
start|status)
|
|
# No-op
|
|
;;
|
|
restart|reload|force-reload)
|
|
echo "Error: argument '$1' not supported" >&2
|
|
exit 3
|
|
;;
|
|
stop|"")
|
|
do_stop
|
|
;;
|
|
*)
|
|
echo "Usage: umountnfs.sh [start|stop]" >&2
|
|
exit 3
|
|
;;
|
|
esac
|
|
|
|
:
|