#! /bin/sh
### BEGIN INIT INFO
# Provides: umountfs
# Required-Start:
# Required-Stop: umountroot
# Default-Start:
# Default-Stop: 0 6
# Short-Description: Turn off swap and unmount all local file systems.
# Description:
### END INIT INFO
do_stop () {
PROTECTED_MOUNTS="$(sed -n ':a;/^[^ ]* \/ /!{H;n;ba};{H;s/.*//;x;s/\n//;p}' /proc/mounts)"
WEAK_MTPTS="" # be gentle, don't use force
REG_MTPTS=""
TMPFS_MTPTS=""
while read -r DEV MTPT FSTYPE REST
do
echo "$PROTECTED_MOUNTS" | grep -qs "^$DEV $MTPT " && continue
case "$MTPT" in
/|/proc|/dev|/.dev|/dev/pts|/dev/shm|/dev/.static/dev|/proc/*|/sys|/sys/*|/run|/run/*)
continue
;;
esac
case "$FSTYPE" in
proc|procfs|linprocfs|sysfs|usbfs|usbdevfs|devpts)
continue
;;
tmpfs)
TMPFS_MTPTS="$MTPT $TMPFS_MTPTS"
;;
*)
if echo "$PROTECTED_MOUNTS" | grep -qs "^$DEV "; then
WEAK_MTPTS="$MTPT $WEAK_MTPTS"
else
REG_MTPTS="$MTPT $REG_MTPTS"
fi
;;
esac
done < /proc/mounts
#
# Make sure tmpfs file systems are umounted before turning off
# swap, to avoid running out of memory if the tmpfs filesystems
# use a lot of space.
#
if [ "$TMPFS_MTPTS" ]
then
if [ "$VERBOSE" = no ]
then
log_action_begin_msg "Unmounting temporary filesystems"
fstab-decode umount $TMPFS_MTPTS
log_action_end_msg $?
else
log_daemon_msg "Will now unmount temporary filesystems"
fstab-decode umount -v $TMPFS_MTPTS
log_end_msg $?
fi
fi
#
# Deactivate swap
#
if [ "$VERBOSE" = no ]
then
log_action_begin_msg "Deactivating swap"
swapoff -a >/dev/null
log_action_end_msg $?
else
log_daemon_msg "Will now deactivate swap"
swapoff -a -v
log_end_msg $?
fi
#
# Unmount local filesystems
#
if [ "$WEAK_MTPTS" ]; then
# Do not use -f umount option for WEAK_MTPTS
if [ "$VERBOSE" = no ]
then
log_action_begin_msg "Unmounting weak filesystems"
fstab-decode umount -r -d $WEAK_MTPTS
log_action_end_msg $?
else
log_daemon_msg "Will now unmount weak filesystems"
fstab-decode umount -v -r -d $WEAK_MTPTS
log_end_msg $?
fi
fi
if [ "$REG_MTPTS" ]
then
if [ "$VERBOSE" = no ]
then
log_action_begin_msg "Unmounting local filesystems"
fstab-decode umount -f -r -d $REG_MTPTS
log_action_end_msg $?
else
log_daemon_msg "Will now unmount local filesystems"
fstab-decode umount -f -v -r -d $REG_MTPTS
log_end_msg $?
fi
fi
}