54 lines
1.2 KiB
Bash
Executable File
54 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
_remove_dm() {
|
|
local dev=$1
|
|
local s
|
|
local devname
|
|
|
|
for s in /sys/block/"${dev}"/holders/dm-*; do
|
|
[ -e "${s}" ] || continue
|
|
_remove_dm "${s##*/}"
|
|
done
|
|
# multipath devices might have MD devices on top,
|
|
# which are removed after this script. So do not
|
|
# remove those to avoid spurious errors
|
|
case $(cat /sys/block/"${dev}"/dm/uuid) in
|
|
mpath-*)
|
|
return 0
|
|
;;
|
|
*)
|
|
devname=$(cat /sys/block/"${dev}"/dm/name)
|
|
dmsetup -v --noudevsync remove "$devname" || return $?
|
|
;;
|
|
esac
|
|
return 0
|
|
}
|
|
|
|
_do_dm_shutdown() {
|
|
local ret=0
|
|
local final=$1
|
|
local dev
|
|
|
|
info "Disassembling device-mapper devices"
|
|
for dev in /sys/block/dm-*; do
|
|
[ -e "${dev}" ] || continue
|
|
if [ "x$final" != "x" ]; then
|
|
_remove_dm "${dev##*/}" || ret=$?
|
|
else
|
|
_remove_dm "${dev##*/}" > /dev/null 2>&1 || ret=$?
|
|
fi
|
|
done
|
|
if [ "x$final" != "x" ]; then
|
|
info "dmsetup ls --tree"
|
|
dmsetup ls --tree 2>&1 | vinfo
|
|
fi
|
|
return $ret
|
|
}
|
|
|
|
if command -v dmsetup > /dev/null \
|
|
&& [ "x$(dmsetup status)" != "xNo devices found" ]; then
|
|
_do_dm_shutdown "$1"
|
|
else
|
|
:
|
|
fi
|