@@ -31,8 +31,8 @@ ENV{DM_UDEV_LOW_PRIORITY_FLAG}!="1", OPTIONS+="link_priority=50"
IMPORT{program}=="kpartx_id %M %m $env{DM_UUID}"
# DM_TYPE only has a reasonable value for partitions on multipath.
-ENV{DM_UUID}=="*-mpath-*", ENV{DM_TYPE}=="?*" \
- SYMLINK+="disk/by-id/$env{DM_TYPE}-$env{DM_NAME}"
+ENV{DM_UUID}=="*-mpath-*", ENV{DM_TYPE}=="?*", ENV{DM_SERIAL}=="?*" \
+ SYMLINK+="disk/by-id/$env{DM_TYPE}-$env{DM_SERIAL}-part$env{DM_PART}"
ENV{DM_WWN}=="?*", ENV{DM_PART}=="?*", \
SYMLINK+="disk/by-id/wwn-$env{DM_WWN}-part$env{DM_PART}"
@@ -42,6 +42,7 @@ fi
dmuuid=${UUID#*-}
dmtbl=${UUID%%-*}
dmpart=${dmtbl#part}
+dmserial=
# kpartx types are 'part<num>'
if [ "$dmpart" = "$dmtbl" ] ; then
dmpart=
@@ -59,10 +60,12 @@ if [ "$dmtbl" = "part" ] ; then
case "$dmuuid" in
mpath-*)
dmdeps=$($DMSETUP deps -u $dmuuid)
+ dmserial=${dmuuid#mpath-}
;;
esac
elif [ "$dmtbl" = "mpath" ] ; then
dmname="$dmuuid"
+ dmserial="$dmuuid"
# We need the dependencies of the table to figure out the type
dmdeps=$($DMSETUP deps -u $UUID)
fi
@@ -84,11 +87,14 @@ if [ -n "$dmdeps" ] ; then
;;
*)
echo "DM_TYPE=scsi"
- echo "DM_WWN=0x${dmname#?}"
+ echo "DM_WWN=0x${dmserial#?}"
;;
esac
else
echo "DM_TYPE=raid"
fi
+if [[ $dmserial ]]; then
+ echo "DM_SERIAL=$dmserial"
+fi
exit 0
@@ -100,7 +100,8 @@ ENV{DM_UDEV_LOW_PRIORITY_FLAG}!="1", OPTIONS+="link_priority=50"
TEST=="/usr/lib/udev/kpartx_id", \
IMPORT{program}=="kpartx_id %M %m $env{DM_UUID}"
-ENV{DM_TYPE}=="?*", SYMLINK+="disk/by-id/$env{DM_TYPE}-$env{DM_NAME}"
+ENV{DM_TYPE}=="?*", ENV{DM_SERIAL}=="?*", \
+ SYMLINK+="disk/by-id/$env{DM_TYPE}-$env{DM_SERIAL}"
ENV{DM_WWN}=="?*", SYMLINK+="disk/by-id/wwn-$env{DM_WWN}"
LABEL="mpath_end"
With user_friendly names (or generally, with aliases), the udev rules create /dev/disk/by-id/scsi-${ALIAS} rather than /dev/disk/by-id/scsi-${ID_SERIAL}. Fix that. Signed-off-by: Martin Wilck <mwilck@suse.com> --- kpartx/dm-parts.rules | 4 ++-- kpartx/kpartx_id | 8 +++++++- multipath/11-dm-mpath.rules | 3 ++- 3 files changed, 11 insertions(+), 4 deletions(-)