mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
172 lines
3.7 KiB
Bash
172 lines
3.7 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
# Copyright (C) 2021 Red Hat, Inc. All rights reserved.
|
||
|
#
|
||
|
# This copyrighted material is made available to anyone wishing to use,
|
||
|
# modify, copy, or redistribute it subject to the terms and conditions
|
||
|
# of the GNU General Public License v.2.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with this program; if not, write to the Free Software Foundation,
|
||
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||
|
|
||
|
test_description='using multipath blacklist'
|
||
|
|
||
|
SKIP_WITH_LVMPOLLD=1
|
||
|
SKIP_WITH_LVMLOCKD=1
|
||
|
|
||
|
. lib/inittest
|
||
|
|
||
|
# FIXME: don't run this test by default because it destroys the
|
||
|
# local multipath config, the timing of multipath/dm/lvm interactions
|
||
|
# is fragile, and there's insufficient cleanup after a test fails.
|
||
|
skip
|
||
|
|
||
|
systemctl stop multipathd
|
||
|
multipath -F || true
|
||
|
rm /etc/multipath/wwids || true
|
||
|
rmmod scsi_debug || true
|
||
|
rm /etc/multipath/conf.d/lvmtest.conf || true
|
||
|
|
||
|
modprobe --dry-run scsi_debug || skip
|
||
|
multipath -l || skip
|
||
|
multipath -l | grep scsi_debug && skip
|
||
|
ls /etc/multipath/wwids && skip
|
||
|
|
||
|
# Need to use /dev/mapper/mpath
|
||
|
aux lvmconf 'devices/dir = "/dev"'
|
||
|
aux lvmconf 'devices/scan = "/dev"'
|
||
|
# Could set filter to $MP and the component /dev/sd devs
|
||
|
aux lvmconf "devices/filter = [ \"a|.*|\" ]"
|
||
|
aux lvmconf "devices/global_filter = [ \"a|.*|\" ]"
|
||
|
|
||
|
modprobe scsi_debug dev_size_mb=16 num_tgts=1
|
||
|
sleep 2
|
||
|
|
||
|
# Get scsi device name created by scsi_debug.
|
||
|
# SD = sdh
|
||
|
# SD_DEV = /dev/sdh
|
||
|
|
||
|
SD=$(grep -H scsi_debug /sys/block/sd*/device/model | cut -f4 -d /);
|
||
|
echo $SD
|
||
|
SD_DEV=/dev/$SD
|
||
|
echo $SD_DEV
|
||
|
|
||
|
# if multipath claimed SD, then io will fail
|
||
|
#dd if=$SD_DEV of=/dev/null bs=4k count=1 iflag=direct
|
||
|
#dd if=/dev/zero of=$SD_DEV bs=4k count=1 oflag=direct
|
||
|
|
||
|
# check if multipathd claimed the scsi dev when it appears and create mp dm device
|
||
|
sleep 2
|
||
|
multipath -l
|
||
|
# create the mp dm device
|
||
|
multipath $SD_DEV
|
||
|
|
||
|
# Get mpath device name created by multipath.
|
||
|
# MP = mpatha
|
||
|
# MP_DEV = /dev/maper/mpatha
|
||
|
|
||
|
MP=$(multipath -l | grep scsi_debug | cut -f1 -d ' ')
|
||
|
echo $MP
|
||
|
MP_DEV=/dev/mapper/$MP
|
||
|
echo $MP_DEV
|
||
|
|
||
|
dd if=$MP_DEV of=/dev/null bs=4k count=1 iflag=direct
|
||
|
dd if=/dev/zero of=$MP_DEV bs=4k count=1 oflag=direct
|
||
|
|
||
|
# Get wwid for the mp and sd dev.
|
||
|
WWID=$(multipath -l $MP_DEV | head -1 | awk '{print $2}' | tr -d ')' | tr -d '(')
|
||
|
echo $WWID
|
||
|
|
||
|
grep $WWID /etc/multipath/wwids
|
||
|
|
||
|
pvcreate $MP_DEV
|
||
|
vgcreate $vg1 $MP_DEV
|
||
|
|
||
|
not pvs $SD_DEV
|
||
|
pvs $MP_DEV
|
||
|
|
||
|
# remove mpath dm device then check that SD_DEV is
|
||
|
# filtered based on /etc/multipath/wwids instead of
|
||
|
# based on sysfs holder
|
||
|
multipath -f $MP
|
||
|
sleep 2
|
||
|
not pvs $SD_DEV
|
||
|
multipath $SD_DEV
|
||
|
sleep 2
|
||
|
multipath -l | grep $SD
|
||
|
|
||
|
#
|
||
|
# Add the wwid to the blacklist, then restart multipath
|
||
|
# so the sd dev should no longer be used by multipath,
|
||
|
# but the sd dev wwid is still in /etc/multipath/wwids.
|
||
|
#
|
||
|
|
||
|
mkdir /etc/multipath/conf.d/ || true
|
||
|
rm -f /etc/multipath/conf.d/lvmtest.conf
|
||
|
|
||
|
cat <<EOF > "/etc/multipath/conf.d/lvmtest.conf"
|
||
|
blacklist {
|
||
|
wwid $WWID
|
||
|
}
|
||
|
EOF
|
||
|
|
||
|
cat /etc/multipath/conf.d/lvmtest.conf
|
||
|
|
||
|
multipath -r
|
||
|
sleep 2
|
||
|
|
||
|
grep $WWID /etc/multipath/wwids
|
||
|
|
||
|
multipath -l |tee out
|
||
|
not grep $SD out
|
||
|
not grep $MP out
|
||
|
not grep $WWID out
|
||
|
|
||
|
not pvs $MP_DEV
|
||
|
pvs $SD_DEV
|
||
|
vgs $vg1
|
||
|
|
||
|
#
|
||
|
# Add the wwid to the blacklist_exceptions, in addition
|
||
|
# to the blacklist, then restart multipath so the
|
||
|
# sd dev should again be used by multipath.
|
||
|
#
|
||
|
|
||
|
rm -f /etc/multipath/conf.d/lvmtest.conf
|
||
|
|
||
|
cat <<EOF > "/etc/multipath/conf.d/lvmtest.conf"
|
||
|
blacklist {
|
||
|
wwid $WWID
|
||
|
}
|
||
|
blacklist_exceptions {
|
||
|
wwid $WWID
|
||
|
}
|
||
|
EOF
|
||
|
|
||
|
cat /etc/multipath/conf.d/lvmtest.conf
|
||
|
|
||
|
multipath -r
|
||
|
sleep 2
|
||
|
|
||
|
grep $WWID /etc/multipath/wwids
|
||
|
|
||
|
multipath -l |tee out
|
||
|
grep $SD out
|
||
|
grep $MP out
|
||
|
grep $WWID out
|
||
|
|
||
|
pvs $MP_DEV
|
||
|
not pvs $SD_DEV
|
||
|
vgs $vg1
|
||
|
lvs $vg1
|
||
|
|
||
|
sleep 2
|
||
|
vgremove -ff $vg1
|
||
|
sleep 2
|
||
|
multipath -f $MP
|
||
|
rm /etc/multipath/conf.d/lvmtest.conf
|
||
|
rm /etc/multipath/wwids
|
||
|
sleep 1
|
||
|
rmmod scsi_debug
|