You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ublinux-init/ublinux/rc.halt.pre/95-umount

35 lines
1.4 KiB

#!/usr/bin/bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
#
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; }
PATH="/usr/lib/ublinux/scripts:${PATH}"
swapoff -a >/dev/null 2>&1
# Umount network fs
grep -E "[ ]nfs[ ]|[ ]cifs[ ]" /proc/mounts | awk '{print $2}' | grep -Ev '^/mnt/live|^/memory/' | xargs umount -lf
# Umount any enc files from /media /mnt
find /dev/mapper/* | sed s=.*/== | grep -v ^control$ | while read POINT ;do
cryptsetup status ${POINT} 2>/dev/null | grep "[[:space:]]loop:[[:space:]]" | grep -v /mnt/live/ | grep -Eq "[[:space:]]/media/|[[:space:]]/mnt/" && umount /dev/mapper/${POINT} && cryptsetup close ${POINT}
done
# Umount any loops from /media /mnt
losetup -a | tr -d :\)\( | grep -E " /media/| /mnt/" | grep -v " /mnt/live" | awk '{print $1}' | xargs umount -d >/dev/null 2>&1
# Then free any /media
grep -E " /media/| /mnt/" /proc/mounts | awk '{print $2}' | grep -v ^/mnt/live | sort -r | xargs umount >/dev/null 2>&1
# Umount any fs from /memory
grep -E " /memory.*" /proc/mounts | awk '{print $2}' | sed '1!G;h;$!d' | xargs umount -l >/dev/null 2>&1
# Umount any aufs from /media /mnt
grep -E " /mnt/.* aufs | /media/.* aufs " /proc/mounts | awk '{print $2}' | xargs umount -l >/dev/null 2>&1