diff options
Diffstat (limited to 'rc.d/init.d/functions')
-rwxr-xr-x | rc.d/init.d/functions | 29 |
1 files changed, 29 insertions, 0 deletions
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 +} |