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.
53 lines
1.2 KiB
53 lines
1.2 KiB
#!/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
|
|
|