From 6ef3173e86c2be99b504f7c7a789dea5c0072f64 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Mon, 10 Jul 2017 13:28:40 +0200 Subject: [PATCH] add 90multipath-hostonly module hardcoding the wwid of the drives in the initramfs causes problems when the drives are cloned to a system with the same hardware, but different disk wwid's https://bugzilla.redhat.com/show_bug.cgi?id=1457311 Cherry-picked from: 5ce7cc7337a4c769b223152c083914f2052aa348 Resolves: #1457311 --- .../90multipath-hostonly/module-setup.sh | 53 +++++++++++++++++++ modules.d/90multipath/module-setup.sh | 26 --------- 2 files changed, 53 insertions(+), 26 deletions(-) create mode 100755 modules.d/90multipath-hostonly/module-setup.sh diff --git a/modules.d/90multipath-hostonly/module-setup.sh b/modules.d/90multipath-hostonly/module-setup.sh new file mode 100755 index 00000000..88839033 --- /dev/null +++ b/modules.d/90multipath-hostonly/module-setup.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# called by dracut +check() { + return 255 +} + +# called by dracut +depends() { + echo multipath + return 0 +} + +# called by dracut +install() { + local _f _allow + + is_mpath() { + local _dev=$1 + [ -e /sys/dev/block/$_dev/dm/uuid ] || return 1 + [[ $(cat /sys/dev/block/$_dev/dm/uuid) =~ mpath- ]] && return 0 + return 1 + } + + majmin_to_mpath_dev() { + local _dev + for i in /dev/mapper/*; do + [[ $i == /dev/mapper/control ]] && continue + _dev=$(get_maj_min $i) + if [ "$_dev" = "$1" ]; then + echo $i + return + fi + done + } + + add_hostonly_mpath_conf() { + is_mpath $1 && { + local _dev + + _dev=$(majmin_to_mpath_dev $1) + [ -z "$_dev" ] && return + strstr "$_allow" "$_dev" && return + _allow="$_allow --allow $_dev" + } + } + + [[ $hostonly ]] && { + for_each_host_dev_and_slaves_all add_hostonly_mpath_conf + [ -n "$_allow" ] && mpathconf $_allow --outfile ${initdir}/etc/multipath.conf + } +} + diff --git a/modules.d/90multipath/module-setup.sh b/modules.d/90multipath/module-setup.sh index 3983b7b7..232ddcd8 100755 --- a/modules.d/90multipath/module-setup.sh +++ b/modules.d/90multipath/module-setup.sh @@ -9,17 +9,6 @@ is_mpath() { return 1 } -majmin_to_mpath_dev() { - local _dev - for i in /dev/mapper/*; do - [[ $i == /dev/mapper/control ]] && continue - _dev=$(get_maj_min $i) - if [ "$_dev" = "$1" ]; then - echo $i - return - fi - done -} check() { local _rootdev @@ -81,16 +70,6 @@ installkernel() { install() { local _f _allow - add_hostonly_mpath_conf() { - is_mpath $1 && { - local _dev - - _dev=$(majmin_to_mpath_dev $1) - [ -z "$_dev" ] && return - strstr "$_allow" "$_dev" && return - _allow="$_allow --allow $_dev" - } - } inst_multiple -o \ dmsetup \ @@ -105,11 +84,6 @@ install() { /etc/multipath.conf \ /etc/multipath/* - [[ $hostonly ]] && { - for_each_host_dev_and_slaves_all add_hostonly_mpath_conf - [ -n "$_allow" ] && mpathconf $_allow --outfile ${initdir}/etc/multipath.conf - } - inst $(command -v partx) /sbin/partx inst_libdir_file "libmultipath*" "multipath/*"