[udev] rules files for event proxying and kpartx split
authorChristophe Varoqui <cvaroqui@zezette.localdomain>
Mon, 4 Jun 2007 21:41:24 +0000 (23:41 +0200)
committerChristophe Varoqui <cvaroqui@zezette.localdomain>
Mon, 4 Jun 2007 21:41:24 +0000 (23:41 +0200)
So that multipathd can use the udev-provided socket for event listening
and kpartx can have a truly independent udev setup (think dmraid without
multipath case).

Hannes Reinecke, Suse.

kpartx/kpartx.rules [new file with mode: 0644]
kpartx/kpartx_id [new file with mode: 0644]

diff --git a/kpartx/kpartx.rules b/kpartx/kpartx.rules
new file mode 100644 (file)
index 0000000..9bd7db7
--- /dev/null
@@ -0,0 +1,36 @@
+#
+# persistent links for device-mapper devices
+# only hardware-backed device-mapper devices (ie multipath, dmraid,
+# and kpartx) have meaningful persistent device names
+#
+
+KERNEL!="dm-*", GOTO="kpartx_end"
+ACTION=="remove", GOTO="kpartx_end"
+
+ENV{DM_TABLE_STATE}!="LIVE", GOTO="kpartx_end"
+
+ENV{DM_UUID}=="?*", IMPORT{program}=="/sbin/kpartx_id %M %m $env{DM_UUID}"
+
+OPTIONS="link_priority=50"
+
+# Create persistent links for multipath tables
+ENV{DM_UUID}=="mpath-*", \
+       SYMLINK+="disk/by-id/$env{DM_TYPE}-$env{DM_NAME}"
+
+# Create persistent links for dmraid tables
+ENV{DM_UUID}=="mpath-*", \
+        SYMLINK+="disk/by-id/$env{DM_TYPE}-$env{DM_NAME}"
+
+# Create persistent links for partitions
+ENV{DM_PART}=="?*", \
+        SYMLINK+="disk/by-id/$env{DM_TYPE}-$env{DM_NAME}-part$env{DM_PART}"
+
+# Create dm tables for partitions
+ENV{DM_STATE}=="ACTIVE", ENV{DM_UUID}=="mpath-*", \
+        RUN+="/sbin/kpartx -a -p -part /dev/$kernel"
+ENV{DM_STATE}=="ACTIVE", ENV{DM_UUID}=="dmraid-*", \
+        RUN+="/sbin/kpartx -a -p -part /dev/$kernel"
+
+LABEL="kpartx_end"
+
+
diff --git a/kpartx/kpartx_id b/kpartx/kpartx_id
new file mode 100644 (file)
index 0000000..e876b98
--- /dev/null
@@ -0,0 +1,93 @@
+#!/bin/bash
+#
+# kpartx_id
+#
+# Generates ID information for device-mapper tables.
+#
+# Copyright (C) 2006 SUSE Linux Products GmbH
+# Author:
+#       Hannes Reinecke <hare@suse.de>
+#
+#
+#       This program is free software; you can redistribute it and/or modify it
+#       under the terms of the GNU General Public License as published by the
+#       Free Software Foundation version 2 of the License.
+#
+# This script generates ID information used to generate persistent symlinks.
+# It relies on the UUID strings generated by the various programs; the name
+# of the tables are of no consequence.
+#
+# Please note that dmraid does not provide the UUIDs (yet); a patch has been
+# sent upstream but has not been accepted yet.
+#
+
+DMSETUP=/sbin/dmsetup
+
+MAJOR=$1
+MINOR=$2
+UUID=$3
+
+if [ -z "$MAJOR" -o -z "$MINOR" ]; then
+    echo "usage: $0 major minor"
+    exit 1;
+fi
+
+# Device-mapper not installed; not an error
+if [ ! -x $DMSETUP ] ; then
+    exit 0
+fi
+
+
+# Table UUIDs are always '<type>-<uuid>'.
+dmuuid=${UUID#*-}
+dmtbl=${UUID%%-*}
+dmpart=${dmtbl#part}
+# kpartx types are 'part<num>'
+if [ "$dmpart" == "$dmtbl" ] ; then
+    dmpart=
+else
+    dmtbl=part
+fi
+
+# Set the name of the table. We're only interested in dmraid,
+# multipath, and kpartx tables; everything else is ignored.
+if [ "$dmtbl" == "part" ] ; then
+    # The name of the kpartx table is the name of the parent table
+    dmname=$($DMSETUP info  -c --noheadings -o name -u $dmuuid)
+    echo "DM_NAME=$dmname"
+    # We need the dependencies of the parent table to figure out
+    # the type if the parent is a multipath table
+    case "$dmuuid" in
+       mpath-*)
+           dmdeps=$($DMSETUP deps -u $dmuuid)
+           ;;
+    esac
+elif [ "$dmtbl" == "mpath" ] ; then
+    dmname=$tblname
+    # We need the dependencies of the table to figure out the type
+    dmdeps=$($DMSETUP deps -u $UUID)
+elif [ "$dmtbl" == "dmraid" ] ; then
+    dmname=$tblname
+fi
+
+[ -n "$dmpart" ] && echo "DM_PART=$dmpart"
+
+# Figure out the type of the map. For non-multipath maps it's
+# always 'raid'.
+if [ -n "$dmdeps" ] ; then
+    case "$dmdeps" in
+       *\(94,*)
+            echo "DM_TYPE=dasd"
+           ;;
+       *\(9*)
+            echo "DM_TYPE=raid"
+           ;;
+       *)
+            echo "DM_TYPE=scsi"
+           ;;
+    esac
+else
+    echo "DM_TYPE=raid"
+fi
+
+exit 0