From f4879ffdbc135f6a31d6db955e672cee5fbb57a0 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Tue, 31 Jan 2006 19:58:44 +0000 Subject: - check for active dmraid devices by table (rather than name) before activation --- rc.d/init.d/functions | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'rc.d/init.d') diff --git a/rc.d/init.d/functions b/rc.d/init.d/functions index 7ba1090a..59dca79a 100755 --- a/rc.d/init.d/functions +++ b/rc.d/init.d/functions @@ -475,3 +475,32 @@ confirm() { fi done } + +# resolve a device node to its major:minor numbers in decimal or hex +get_numeric_dev() { +( + fmt="%d:%d" + if [ "$1" == "hex" ]; then + fmt="%x:%x" + fi + eval printf "$fmt" $(stat -c "0x%t 0x%T" $2) +) 2>/dev/null +} + +# find the working name for a running dm device with the same table as one +# that dmraid would create +resolve_dm_name() { +( + name="$1" + + line=$(/sbin/dmraid -ay -t --ignorelocking | grep "^$name:" | cut -d\ -f2-) + newline=$line + for x in $line ; do + if [[ "$x" =~ "^/dev/" ]] ; then + majmin=$(get_numeric_dev dec $x) + newline=$(echo $newline | sed -e "s,$x\( \|$\),$majmin\1,g") + fi + done + /sbin/dmsetup table | sed -n "s/\(^[^:]\+\): $newline\( \+$\|$\)/\1/p" +) 2>/dev/null +} -- cgit v1.2.1