diff options
Diffstat (limited to 'tests/include/mpath.sh')
-rw-r--r-- | tests/include/mpath.sh | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/tests/include/mpath.sh b/tests/include/mpath.sh new file mode 100644 index 0000000..22a68f9 --- /dev/null +++ b/tests/include/mpath.sh @@ -0,0 +1,137 @@ +#!/bin/bash + +# Copyright (c) 2016 Red Hat, Inc. +# +# 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, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Author: Lin Li <lilin@redhat.com> + + +# filename: loop.sh + +# USAGE + +test x$LXT_MPATH = x || return +LXT_MPATH=1 + +#source /mnt/tests/kernel/storage/include/bash_modules/lxt/tc.sh + +# make sure multipathd is running +get_mpath_disks() +{ + multipathd_running || texit "multipathd is not running" + multipathd -k'show maps' 2>/dev/null | grep '^mpath' | awk '{print +"/dev/mapper/" $1}' + return 0 +} + +# make sure multipathd is running +get_wwid_of_disk() +{ +# we should not use scsi_id or /dev/disk/by-id to get the wwid +# since multipath could replace the white spaces of wwid if +# having white spaces. we should use +# multipathd show paths format %w %d +# to get the wwid + + for dev in `ls /dev/disk/by-id/*` + do + if readlink $dev | grep -qw "$disk$" + then + wwid=$(basename $dev | sed 's/^[^-]*-//g') + break + fi + done + if test X$wwid = X + then + wwid=$(/lib/udev/scsi_id --page=0x83 --whitelisted --device=/dev/$disk) + fi + echo $wwid + +# multipathd_running || texit "multipathd is not running" +# local disk=$1 +# local wwid=$(multipathd show paths format %d,%w | grep "^$disk\s*," | \ +# awk -F, '{ print $2 }' | sed 's/\s//g') +# echo $wwid +} + + +# make sure multipathd is running +get_mpath_disk_by_scsi_device() +{ +# multipathd_running || texit "multipathd is not running" + local disk=$1 + wwid=$(get_wwid_of_disk $disk) + local mpath=$(multipathd show maps format %w,%n | grep "^$wwid\s*," \ + | awk -F, '{ print $2 }' | sed 's/\s//g') + echo $mpath +} + +# make sure multipathd is running +get_major_minor_by_scsi_device() +{ + multipathd_running || texit "multipathd is not running" + local disk=$1 + local mm=$(multipathd show paths format %d,%D | grep "^$disk\s*," | \ + awk -F, '{ print $2 }' | sed 's/\s//g') + echo $mm +} + +# make sure multipathd is running +get_hcil_by_scsi_device() +{ + multipathd_running || texit "multipathd is not running" + local disk=$1 + local hcil=$(multipathd show paths format %d,%i | grep "^$disk\s*," | \ + awk -F, '{ print $2 }' | sed 's/\s//g') + echo $hcil +} + +# make sure multipathd is running +is_mpath() +{ + multipathd_running || texit "multipathd is not running" + local mpath=$1 + multipathd show maps format %n | grep -w "^$mpath" &> /dev/null +} + +multipathd_running() +{ + pidof multipathd &> /dev/null && return 0 + return 1 +} + +# will set find_multipaths no and start multipathd +setup_multipath() +{ + trun "rpm -q device-mapper-multipath || yum install -y device-mapper-multipath" || texit "fail to install multipath" + test -f /etc/multipath.conf && cp /etc/multipath.conf /etc/multipath.conf.storage_qe + trun "mpathconf --enable --find_multipaths n --with_multipathd y" + trun "multipath -r" +} + +get_unused_mpath() +{ + multipathd_running &>/dev/null || texit "multipathd is not running" + rootdisk=$(get_root_disk) + rootmpath=$(get_mpath_disk_by_scsi_device $rootdisk) + if is_null $rootmpath; then + $maps=$(multipathd show maps format "%n" | grep -v name) + else + $maps=$(multipathd show maps format "%n" | grep -v name | grep -v $rootmpath) + fi + + echo $maps +} + |