summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2021-03-22 18:55:07 +0100
committerZdenek Kabelac <zkabelac@redhat.com>2021-03-22 22:46:21 +0100
commit76d203517bc78508234706f3ee5ce8ce6d38bee4 (patch)
treec15bf45abaa00a676d6037e1d479376da9fe9755
parentada99f939fe24e23994244fdbe960014b355fd44 (diff)
downloadlvm2-76d203517bc78508234706f3ee5ce8ce6d38bee4.tar.gz
tests: use mdadm support
Use for testing new mdadm_create aux wrapper. Place functionality into a 2 pass loop - one for 'auto' other for 'start'. Share same tests between raid level 0 and level 1 version of raid.
-rw-r--r--test/shell/duplicate-pvs-md0.sh381
-rw-r--r--test/shell/duplicate-pvs-md1.sh570
2 files changed, 129 insertions, 822 deletions
diff --git a/test/shell/duplicate-pvs-md0.sh b/test/shell/duplicate-pvs-md0.sh
index 6ff9ba245..82a179915 100644
--- a/test/shell/duplicate-pvs-md0.sh
+++ b/test/shell/duplicate-pvs-md0.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# Copyright (C) 2012 Red Hat, Inc. All rights reserved.
+# Copyright (C) 2012-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
@@ -22,28 +22,14 @@ HINTS="$RUNDIR/lvm/hints"
_clear_online_files() {
# wait till udev is finished
aux udev_wait
- rm -f "$PVS_ONLINE_DIR"/*
- rm -f "$VGS_ONLINE_DIR"/*
+ rm -f "$PVS_ONLINE_DIR"/* "$VGS_ONLINE_DIR"/*
}
. lib/inittest
-test -f /proc/mdstat && grep -q raid0 /proc/mdstat || \
- modprobe raid0 || skip
+MD_LEVEL=${MD_LEVEL-0}
-mddev="/dev/md33"
-not grep $mddev /proc/mdstat || skip
-
-aux lvmconf 'devices/md_component_detection = 1'
-
-# This stops lvm from asking udev if a dev is an md component.
-# LVM will ask udev if a dev is an md component, but we don't
-# want to rely on that ability in this test.
-aux lvmconf 'devices/obtain_device_list_from_udev = 0'
-
-aux extend_filter_md "a|/dev/md|"
-
-aux prepare_devs 4
+aux prepare_devs 4 10
# Create an unused PV so that there is at least one PV in the hints
# when the MD dev is stopped. If there are no PVs, the hints are
@@ -55,92 +41,28 @@ pvcreate "$dev3"
# PV on md raid1|raid0, md_component_checks auto|start, mddev start|stopped,
# one raid dev disabled when mddev is stopped.
+# LVM will ask udev if a dev is an md component, but we don't
+# want to rely on that ability in this test so stops lvm from
+# asking udev if a dev is an md component.
+aux lvmconf "devices/obtain_device_list_from_udev = 0" \
+ "devices/md_component_detection = 1" \
+ "devices/md_component_checks = \"auto\""
-##########################################
-# PV on an md raid0 device, auto+started
-# md_component_checks: auto (not start)
-# mddev: started (not stopped)
-#
-
-aux lvmconf 'devices/md_component_checks = "auto"'
-
-mdadm --create --metadata=1.0 "$mddev" --level 0 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
-aux wait_md_create "$mddev"
-pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
-vgcreate $vg "$mddev"
-lvcreate -n $lv1 -l 2 -an $vg
-
-# pvs shows only the md dev as PV
-pvs "$mddev"
-not pvs "$dev1"
-not pvs "$dev2"
-pvs > out
-grep $mddev out
-not grep "$dev1" out
-not grep "$dev2" out
-grep "$mddev" $HINTS
-not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
-
-# normal activation works
-lvchange -ay $vg/$lv1
-lvs -o active $vg |tee out || true
-grep "active" out
-vgchange -an $vg
-
-# pvscan activation all works
-_clear_online_files
-pvscan --cache -aay
-ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-grep "active" out
-vgchange -an $vg
-
-# pvscan activation from mddev works
-_clear_online_files
-pvscan --cache -aay "$mddev"
-ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-grep "active" out
-vgchange -an $vg
-
-# pvscan activation from md components does nothing
-_clear_online_files
-pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-pvscan --cache -aay "$dev2"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-not grep "active" out
-
-vgchange -an $vg
-vgremove -f $vg
-mdadm --stop "$mddev"
-aux udev_wait
-aux wipefs_a "$dev1"
-aux wipefs_a "$dev2"
-aux udev_wait
+aux extend_filter_md "a|/dev/md|"
+# Run in 2 passes - 1st. with "auto" 2nd. with "start" component checks
+for pass in "auto" "start" ; do
##########################################
-# PV on an md raid0 device, start+started
-# md_component_checks: start (not auto)
-# mddev: started (not stopped)
+# PV on an md raidX device
+# md_component_checks: auto|start (not start)
+# mddev: started (not stopped)
#
+aux mdadm_create --metadata=1.0 --level="$MD_LEVEL" --chunk=64 --raid-devices=2 "$dev1" "$dev2"
+mddev=$(< MD_DEV)
-aux lvmconf 'devices/md_component_checks = "start"'
-
-mdadm --create --metadata=1.0 "$mddev" --level 0 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
-aux wait_md_create "$mddev"
pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
+PVIDMD=$(get pv_field "$mddev" uuid | tr -d - )
vgcreate $vg "$mddev"
lvcreate -n $lv1 -l 2 -an $vg
@@ -148,71 +70,68 @@ lvcreate -n $lv1 -l 2 -an $vg
pvs "$mddev"
not pvs "$dev1"
not pvs "$dev2"
-pvs > out
-grep $mddev out
+pvs | tee out
+grep "$mddev" out
not grep "$dev1" out
not grep "$dev2" out
# N.B. in this case hints are disabled for duplicate pvs seen by scan
# it would be preferrable if this didn't happen as in auto mode, but it's ok.
-# grep "$mddev" $HINTS
-not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
+test "$pass" = "auto" && grep "$mddev" "$HINTS"
+not grep "$dev1" "$HINTS"
+not grep "$dev2" "$HINTS"
# normal activation works
lvchange -ay $vg/$lv1
-lvs -o active $vg |tee out || true
-grep "active" out
+check active $vg $lv1
vgchange -an $vg
# pvscan activation all works
_clear_online_files
pvscan --cache -aay
-ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-grep "active" out
+test -e "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test -e "$RUNDIR/lvm/vgs_online/$vg"
+check active $vg $lv1
vgchange -an $vg
# pvscan activation from mddev works
_clear_online_files
pvscan --cache -aay "$mddev"
-ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-grep "active" out
+test -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test -f "$RUNDIR/lvm/vgs_online/$vg"
+check active $vg $lv1
vgchange -an $vg
-# N.B. with raid0 the component because the PV/size difference
-# triggers and md component check, whereas with raid1 it doesn't.
+# pvscan activation from md components does nothing
_clear_online_files
pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-not grep "active" out
+test ! -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test ! -f "$RUNDIR/lvm/vgs_online/$vg"
+
+if [ "$pass" = "auto" ] ; then
+ pvscan --cache -aay "$dev2"
+ test ! -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+ test ! -f "$RUNDIR/lvm/vgs_online/$vg"
+fi
+# N.B. with raid0 the component because the PV/size difference
+# triggers and md component check, whereas with raid1 it doesn't.
+check inactive $vg $lv1
vgchange -an $vg
vgremove -f $vg
-mdadm --stop "$mddev"
-aux udev_wait
-aux wipefs_a "$dev1"
-aux wipefs_a "$dev2"
-aux udev_wait
+aux cleanup_md_dev
##########################################
-# PV on an md raid0 device, auto+stopped
-# md_component_checks: auto (not start)
-# mddev: stopped (not started)
+# PV on an md raidX device
+# md_component_checks: auto|start
+# mddev: stopped (not started)
#
-aux lvmconf 'devices/md_component_checks = "auto"'
+aux mdadm_create --metadata=1.0 --level="$MD_LEVEL" --chunk=64 --raid-devices=2 "$dev1" "$dev2"
+mddev=$(< MD_DEV)
-mdadm --create --metadata=1.0 "$mddev" --level 0 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
-aux wait_md_create "$mddev"
pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
+PVIDMD=$(get pv_field "$mddev" uuid | tr -d - )
vgcreate $vg "$mddev"
lvcreate -n $lv1 -l 2 -an $vg
@@ -223,14 +142,16 @@ cat /proc/mdstat
not pvs "$mddev"
not pvs "$dev1"
not pvs "$dev2"
-pvs > out
-not grep $mddev out
+pvs | tee out
+not grep "$mddev" out
+# N.B. it would be preferrable if dev1 did not appear in hints but it's ok
+# not grep "$dev1" $HINTS
not grep "$dev1" out
not grep "$dev2" out
pvscan --cache
-not grep "$mddev" $HINTS
-not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
+not grep "$mddev" "$HINTS"
+not grep "$dev1" "$HINTS"
+not grep "$dev2" "$HINTS"
# the vg is not seen, normal activation does nothing
not lvchange -ay $vg/$lv1
@@ -239,176 +160,120 @@ not lvs $vg
# pvscan activation all does nothing
_clear_online_files
pvscan --cache -aay
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
+test ! -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test ! -f "$RUNDIR/lvm/vgs_online/$vg"
# pvscan activation from md components does nothing
_clear_online_files
pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
+test ! -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test ! -f "$RUNDIR/lvm/vgs_online/$vg"
pvscan --cache -aay "$dev2"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-
-aux wipefs_a "$dev1"
-aux wipefs_a "$dev2"
-aux udev_wait
-
-##########################################
-# PV on an md raid0 device, start+stopped
-# md_component_checks: start (not auto)
-# mddev: stopped (not started)
-#
-
-aux lvmconf 'devices/md_component_checks = "start"'
-
-mdadm --create --metadata=1.0 "$mddev" --level 0 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
-aux wait_md_create "$mddev"
-pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
-vgcreate $vg "$mddev"
-lvcreate -n $lv1 -l 2 -an $vg
-
-mdadm --stop "$mddev"
-cat /proc/mdstat
-
-# pvs does not show the PV
-not pvs "$mddev"
-not pvs "$dev1"
-not pvs "$dev2"
-pvs > out
-not grep $mddev out
-not grep "$dev1" out
-not grep "$dev2" out
-pvscan --cache
-not grep "$mddev" $HINTS
-# N.B. it would be preferrable if dev1 did not appear in hints but it's ok
-# not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
-
-# the vg is not seen, normal activation does nothing
-not lvchange -ay $vg/$lv1
-not lvs $vg
-
-# pvscan activation all does nothing
-_clear_online_files
-pvscan --cache -aay
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
+test ! -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test ! -f "$RUNDIR/lvm/vgs_online/$vg"
-# pvscan activation from md components does nothing
-_clear_online_files
-pvscan --cache -aay "$dev1" || true
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-pvscan --cache -aay "$dev2" || true
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-not grep "active" out
+#lvs -o active $vg |tee out || true
+#not grep "active" out
aux wipefs_a "$dev1"
aux wipefs_a "$dev2"
aux udev_wait
-
##########################################
-# PV on an md raid0 device, start+stopped
-# md_component_checks: start (not auto)
-# mddev: stopped (not started)
+# PV on an md raidX device
+# md_component_checks: auto|start
+# mddev: stopped (not started)
# only one raid dev online
#
-aux lvmconf 'devices/md_component_checks = "start"'
+aux mdadm_create --metadata=1.0 --level="$MD_LEVEL" --chunk=64 --raid-devices=2 "$dev1" "$dev2"
+mddev=$(< MD_DEV)
-mdadm --create --metadata=1.0 "$mddev" --level 0 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
-aux wait_md_create "$mddev"
pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
+PVIDMD=$(get pv_field "$mddev" uuid | tr -d - )
vgcreate $vg "$mddev"
lvcreate -n $lv1 -l 2 -an $vg
mdadm --stop "$mddev"
cat /proc/mdstat
-# disable one dev of the md device
+# disable one leg
aux disable_dev "$dev2"
# pvs does not show the PV
not pvs "$mddev"
not pvs "$dev1"
not pvs "$dev2"
-pvs > out
-not grep $mddev out
+pvs | tee out
+not grep "$mddev" out
not grep "$dev1" out
not grep "$dev2" out
pvscan --cache
-not grep "$mddev" $HINTS
+not grep "$mddev" "$HINTS"
# N.B. would be preferrable for this md component to not be in hints
# grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
+not grep "$dev1" "$HINTS"
+not grep "$dev2" "$HINTS"
+# the vg is not seen, normal activation does nothing
not lvchange -ay $vg/$lv1
not lvs $vg
+# pvscan activation all does nothing
_clear_online_files
pvscan --cache -aay
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
+test ! -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test ! -f "$RUNDIR/lvm/vgs_online/$vg"
+# pvscan activation from md components does nothing
_clear_online_files
pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
+test ! -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test ! -f "$RUNDIR/lvm/vgs_online/$vg"
+pvscan --cache -aay "$dev2"
+test ! -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test ! -f "$RUNDIR/lvm/vgs_online/$vg"
aux enable_dev "$dev2"
-aux aux udev_wait
-cat /proc/mdstat
-# for some reason enabling dev2 starts an odd md dev
-mdadm --stop $(lsblk -al -o NAME --noheadings "$dev2" | grep '^md') || true
-cat /proc/mdstat
-aux wipefs_a "$dev1" || true
-aux wipefs_a "$dev2" || true
+aux cleanup_md_dev
+
+aux wipefs_a "$dev1"
+aux wipefs_a "$dev2"
aux udev_wait
+if [ "$MD_LEVEL" = "1" ] ; then
##########################################
-# PV on an md raid0 device, auto+stopped
-# md_component_checks: auto (not start)
-# mddev: stopped (not started)
-# only one raid dev online
+# PV on an md raid1 device, auto+stopped
+# md_component_checks: auto|start
+# mddev: stopped (not started)
+# three raid images
#
+aux mdadm_create --metadata=1.0 --level="$MD_LEVEL" --chunk=64 --raid-devices=3 "$dev1" "$dev2" "$dev4"
+mddev=$(< MD_DEV)
-aux lvmconf 'devices/md_component_checks = "auto"'
-
-mdadm --create --metadata=1.0 "$mddev" --level 0 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
-aux wait_md_create "$mddev"
pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
+PVIDMD=$(get pv_field "$mddev" uuid | tr -d - )
vgcreate $vg "$mddev"
lvcreate -n $lv1 -l 2 -an $vg
mdadm --stop "$mddev"
cat /proc/mdstat
-# disable one leg
-aux disable_dev "$dev2"
-
# pvs does not show the PV
not pvs "$mddev"
not pvs "$dev1"
not pvs "$dev2"
-pvs > out
-not grep $mddev out
+not pvs "$dev4"
+pvs | tee out
+not grep "$mddev" out
not grep "$dev1" out
not grep "$dev2" out
+not grep "$dev4" out
pvscan --cache
-not grep "$mddev" $HINTS
-not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
+not grep "$mddev" "$HINTS"
+not grep "$dev1" "$HINTS"
+not grep "$dev2" "$HINTS"
+not grep "$dev4" "$HINTS"
# the vg is not seen, normal activation does nothing
not lvchange -ay $vg/$lv1
@@ -417,24 +282,28 @@ not lvs $vg
# pvscan activation all does nothing
_clear_online_files
pvscan --cache -aay
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
+test ! -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test ! -f "$RUNDIR/lvm/vgs_online/$vg"
# pvscan activation from md components does nothing
_clear_online_files
pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
+test ! -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test ! -f "$RUNDIR/lvm/vgs_online/$vg"
pvscan --cache -aay "$dev2"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
+test ! -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test ! -f "$RUNDIR/lvm/vgs_online/$vg"
+pvscan --cache -aay "$dev4"
+test ! -f "$RUNDIR/lvm/pvs_online/$PVIDMD"
+test ! -f "$RUNDIR/lvm/vgs_online/$vg"
-aux enable_dev "$dev2"
-aux aux udev_wait
-cat /proc/mdstat
-# for some reason enabling dev2 starts an odd md dev
-mdadm --stop $(lsblk -al -o NAME --noheadings "$dev2" | grep '^md') || true
-cat /proc/mdstat
-aux wipefs_a "$dev1" || true
-aux wipefs_a "$dev2" || true
+aux wipefs_a "$dev1"
+aux wipefs_a "$dev2"
+aux wipefs_a "$dev4"
aux udev_wait
+fi # MD_LEVEL == 1
+
+# next loop with 'start'
+test "$pass" != "auto" || aux lvmconf "devices/md_component_checks = \"start\""
+
+done
diff --git a/test/shell/duplicate-pvs-md1.sh b/test/shell/duplicate-pvs-md1.sh
index d0016f166..e896c106a 100644
--- a/test/shell/duplicate-pvs-md1.sh
+++ b/test/shell/duplicate-pvs-md1.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# Copyright (C) 2012 Red Hat, Inc. All rights reserved.
+# Copyright (C) 2012-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
@@ -15,569 +15,7 @@
# . dm wrapper around a PV
# . a single PV/VG cloned plus a dm wrapper (two separate dups of a PV)
-SKIP_WITH_LVMPOLLD=1
-SKIP_WITH_LVMLOCKD=1
-
-RUNDIR="/run"
-test -d "$RUNDIR" || RUNDIR="/var/run"
-PVS_ONLINE_DIR="$RUNDIR/lvm/pvs_online"
-VGS_ONLINE_DIR="$RUNDIR/lvm/vgs_online"
-HINTS="$RUNDIR/lvm/hints"
-
-_clear_online_files() {
- # wait till udev is finished
- aux udev_wait
- rm -f "$PVS_ONLINE_DIR"/*
- rm -f "$VGS_ONLINE_DIR"/*
-}
-
-. lib/inittest
-
-test -f /proc/mdstat && grep -q raid1 /proc/mdstat || \
- modprobe raid1 || skip
-
-mddev="/dev/md33"
-not grep $mddev /proc/mdstat || skip
-
-aux lvmconf 'devices/md_component_detection = 1'
-
-# This stops lvm from asking udev if a dev is an md component.
-# LVM will ask udev if a dev is an md component, but we don't
-# want to rely on that ability in this test.
-aux lvmconf 'devices/obtain_device_list_from_udev = 0'
-
-aux extend_filter_md "a|/dev/md|"
-
-aux prepare_devs 4
-
-# Create an unused PV so that there is at least one PV in the hints
-# when the MD dev is stopped. If there are no PVs, the hints are
-# empty, and the code falls back to scanning all, and we do not end
-# up testing the code with hints actively used.
-pvcreate "$dev3"
-
-## Test variations:
-# PV on md raid1|raid0, md_component_checks auto|start, mddev start|stopped,
-# one leg disabled when mddev is stopped.
-
-
-##########################################
-# PV on an md raid1 device, auto+started
-# md_component_checks: auto (not start)
-# mddev: started (not stopped)
-#
-
-aux lvmconf 'devices/md_component_checks = "auto"'
-
-mdadm --create --metadata=1.0 "$mddev" --level 1 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
-aux wait_md_create "$mddev"
-pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
-vgcreate $vg "$mddev"
-lvcreate -n $lv1 -l 2 -an $vg
-
-# pvs shows only the md dev as PV
-pvs "$mddev"
-not pvs "$dev1"
-not pvs "$dev2"
-pvs > out
-grep $mddev out
-not grep "$dev1" out
-not grep "$dev2" out
-grep "$mddev" $HINTS
-not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
-
-# normal activation works
-lvchange -ay $vg/$lv1
-lvs -o active $vg |tee out || true
-grep "active" out
-vgchange -an $vg
-
-# pvscan activation all works
-_clear_online_files
-pvscan --cache -aay
-ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-grep "active" out
-vgchange -an $vg
-
-# pvscan activation from mddev works
-_clear_online_files
-pvscan --cache -aay "$mddev"
-ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-grep "active" out
-vgchange -an $vg
-
-# pvscan activation from md components does nothing
-_clear_online_files
-pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-pvscan --cache -aay "$dev2"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-not grep "active" out
-
-vgchange -an $vg
-vgremove -f $vg
-mdadm --stop "$mddev"
-aux udev_wait
-aux wipefs_a "$dev1"
-aux wipefs_a "$dev2"
-aux udev_wait
-
-
-
-##########################################
-# PV on an md raid1 device, start+started
-# md_component_checks: start (not auto)
-# mddev: started (not stopped)
-#
-
-aux lvmconf 'devices/md_component_checks = "start"'
-
-mdadm --create --metadata=1.0 "$mddev" --level 1 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
-aux wait_md_create "$mddev"
-pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
-vgcreate $vg "$mddev"
-lvcreate -n $lv1 -l 2 -an $vg
-
-# pvs shows only the md dev as PV
-pvs "$mddev"
-not pvs "$dev1"
-not pvs "$dev2"
-pvs > out
-grep $mddev out
-not grep "$dev1" out
-not grep "$dev2" out
-# N.B. in this case hints are disabled for duplicate pvs seen by scan
-# it would be preferrable if this didn't happen as in auto mode, but it's ok.
-# grep "$mddev" $HINTS
-not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
-
-# normal activation works
-lvchange -ay $vg/$lv1
-lvs -o active $vg |tee out || true
-grep "active" out
-vgchange -an $vg
-
-# pvscan activation all works
-_clear_online_files
-pvscan --cache -aay
-ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-grep "active" out
-vgchange -an $vg
-
-# pvscan activation from mddev works
-_clear_online_files
-pvscan --cache -aay "$mddev"
-ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-grep "active" out
-vgchange -an $vg
-
-# pvscan activation from component should do nothing
-_clear_online_files
-pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-not grep "active" out
-
-# pvscan activation from mddev first, then try from component which fails
-_clear_online_files
-pvscan --cache -aay "$mddev"
-ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-ls "$RUNDIR/lvm/vgs_online/$vg"
-lvs -o active $vg |tee out || true
-grep "active" out
-rm "$RUNDIR/lvm/pvs_online/$PVIDMD"
-pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-
-
-vgchange -an $vg
-vgremove -f $vg
-mdadm --stop "$mddev"
-aux udev_wait
-aux wipefs_a "$dev1"
-aux wipefs_a "$dev2"
-aux udev_wait
-
-
-##########################################
-# PV on an md raid1 device, auto+stopped
-# md_component_checks: auto (not start)
-# mddev: stopped (not started)
-#
-
-aux lvmconf 'devices/md_component_checks = "auto"'
-
-mdadm --create --metadata=1.0 "$mddev" --level 1 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
-aux wait_md_create "$mddev"
-pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
-vgcreate $vg "$mddev"
-lvcreate -n $lv1 -l 2 -an $vg
-
-mdadm --stop "$mddev"
-cat /proc/mdstat
-
-# pvs does not show the PV
-not pvs "$mddev"
-not pvs "$dev1"
-not pvs "$dev2"
-pvs > out
-not grep $mddev out
-not grep "$dev1" out
-not grep "$dev2" out
-pvscan --cache
-not grep "$mddev" $HINTS
-not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
-
-# the vg is not seen, normal activation does nothing
-not lvchange -ay $vg/$lv1
-not lvs $vg
-
-# pvscan activation all does nothing
-_clear_online_files
-pvscan --cache -aay
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-
-# pvscan activation from md components does nothing
-_clear_online_files
-pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-pvscan --cache -aay "$dev2"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-
-aux wipefs_a "$dev1"
-aux wipefs_a "$dev2"
-aux udev_wait
-
-
-##########################################
-# PV on an md raid1 device, start+stopped
-# md_component_checks: start (not auto)
-# mddev: stopped (not started)
-#
-
-aux lvmconf 'devices/md_component_checks = "start"'
-
-mdadm --create --metadata=1.0 "$mddev" --level 1 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
-aux wait_md_create "$mddev"
-pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
-vgcreate $vg "$mddev"
-lvcreate -n $lv1 -l 2 -an $vg
-
-mdadm --stop "$mddev"
-cat /proc/mdstat
-
-# pvs does not show the PV
-not pvs "$mddev"
-not pvs "$dev1"
-not pvs "$dev2"
-pvs > out
-not grep $mddev out
-not grep "$dev1" out
-not grep "$dev2" out
-pvscan --cache
-not grep "$mddev" $HINTS
-not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
-
-# the vg is not seen, normal activation does nothing
-rm $HINTS
-not lvs $vg
-not lvchange -ay $vg/$lv1
-
-_clear_online_files
-pvscan --cache -aay
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-
-_clear_online_files
-pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-
-aux wipefs_a "$dev1" || true
-aux wipefs_a "$dev2" || true
-
-
-##########################################
-# PV on an md raid1 device, start+stopped
-# md_component_checks: start (not auto)
-# mddev: stopped (not started)
-# only one raid image online
-#
-
-aux lvmconf 'devices/md_component_checks = "start"'
-
-mdadm --create --metadata=1.0 "$mddev" --level 1 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
-aux wait_md_create "$mddev"
-pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
-vgcreate $vg "$mddev"
-lvcreate -n $lv1 -l 2 -an $vg
-
-mdadm --stop "$mddev"
-cat /proc/mdstat
-
-# disable one leg of the md device, with raid1 this means duplicates
-# will not be seen for the legs. duplicate handling can trigger
-# md component detection, so no duplicates means md components may
-# not be detected as easily.
-aux disable_dev "$dev2"
-
-# pvs does not show the PV
-rm $HINTS
-not pvs "$mddev"
-rm $HINTS
-not pvs "$dev1"
-rm $HINTS
-not pvs "$dev2"
-rm $HINTS
-pvs > out
-not grep $mddev out
-not grep "$dev1" out
-not grep "$dev2" out
-rm $HINTS
-pvscan --cache
-not grep "$mddev" $HINTS
-not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
-
-not lvs $vg
-
-_clear_online_files
-pvscan --cache -aay
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-not lvs $vg
-
-_clear_online_files
-pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-
-aux enable_dev "$dev2"
-aux udev_wait
-cat /proc/mdstat
-# for some reason enabling dev2 starts an odd md dev
-mdadm --stop $(lsblk -al -o NAME --noheadings "$dev2" | grep '^md') || true
-cat /proc/mdstat
-aux wipefs_a "$dev1" || true
-aux wipefs_a "$dev2" || true
-
-##########################################
-# PV on an md raid1 device, auto+stopped
-# md_component_checks: auto (not start)
-# mddev: stopped (not started)
-# only one raid image online
-#
-
-aux lvmconf 'devices/md_component_checks = "auto"'
-
-mdadm --create --metadata=1.0 "$mddev" --level 1 --chunk=64 --raid-devices=2 "$dev1" "$dev2"
-aux wait_md_create "$mddev"
-pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
-vgcreate $vg "$mddev"
-lvcreate -n $lv1 -l 2 -an $vg
-
-mdadm --stop "$mddev"
-cat /proc/mdstat
-
-# disable one leg
-aux disable_dev "$dev2"
-
-# pvs does not show the PV
-not pvs "$mddev"
-not pvs "$dev1"
-not pvs "$dev2"
-pvs > out
-not grep $mddev out
-not grep "$dev1" out
-not grep "$dev2" out
-pvscan --cache
-not grep "$mddev" $HINTS
-not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
-
-# the vg is not seen, normal activation does nothing
-not lvchange -ay $vg/$lv1
-not lvs $vg
-
-# pvscan activation all does nothing
-_clear_online_files
-pvscan --cache -aay
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-
-# pvscan activation from md components does nothing
-_clear_online_files
-pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-pvscan --cache -aay "$dev2"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-
-aux enable_dev "$dev2"
-aux udev_wait
-cat /proc/mdstat
-# for some reason enabling dev2 starts an odd md dev
-mdadm --stop $(lsblk -al -o NAME --noheadings "$dev2" | grep '^md') || true
-cat /proc/mdstat
-aux wipefs_a "$dev1" || true
-aux wipefs_a "$dev2" || true
-
-
-##########################################
-# PV on an md raid1 device, auto+stopped
-# md_component_checks: auto (not start)
-# mddev: stopped (not started)
-# three raid images
-#
-
-aux lvmconf 'devices/md_component_checks = "auto"'
-
-mdadm --create --metadata=1.0 "$mddev" --level 1 --chunk=64 --raid-devices=3 "$dev1" "$dev2" "$dev4"
-aux wait_md_create "$mddev"
-pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
-vgcreate $vg "$mddev"
-lvcreate -n $lv1 -l 2 -an $vg
-
-mdadm --stop "$mddev"
-cat /proc/mdstat
-
-# pvs does not show the PV
-not pvs "$mddev"
-not pvs "$dev1"
-not pvs "$dev2"
-not pvs "$dev4"
-pvs > out
-not grep $mddev out
-not grep "$dev1" out
-not grep "$dev2" out
-not grep "$dev4" out
-pvscan --cache
-not grep "$mddev" $HINTS
-not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
-not grep "$dev4" $HINTS
-
-# the vg is not seen, normal activation does nothing
-not lvchange -ay $vg/$lv1
-not lvs $vg
-
-# pvscan activation all does nothing
-_clear_online_files
-pvscan --cache -aay
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-
-# pvscan activation from md components does nothing
-_clear_online_files
-pvscan --cache -aay "$dev1"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-pvscan --cache -aay "$dev2"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-pvscan --cache -aay "$dev4"
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-
-aux wipefs_a "$dev1"
-aux wipefs_a "$dev2"
-aux wipefs_a "$dev4"
-aux udev_wait
-
-
-
-##########################################
-# PV on an md raid1 device, start+stopped
-# md_component_checks: start (not auto)
-# mddev: stopped (not started)
-# three raid images
-
-aux lvmconf 'devices/md_component_checks = "start"'
-
-mdadm --create --metadata=1.0 "$mddev" --level 1 --chunk=64 --raid-devices=3 "$dev1" "$dev2" "$dev4"
-aux wait_md_create "$mddev"
-pvcreate "$mddev"
-PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'`
-echo $PVIDMD
-vgcreate $vg "$mddev"
-lvcreate -n $lv1 -l 2 -an $vg
-
-mdadm --stop "$mddev"
-cat /proc/mdstat
-
-# pvs does not show the PV
-not pvs "$mddev"
-not pvs "$dev1"
-not pvs "$dev2"
-not pvs "$dev4"
-pvs > out
-not grep $mddev out
-not grep "$dev1" out
-not grep "$dev2" out
-not grep "$dev4" out
-pvscan --cache
-not grep "$mddev" $HINTS
-not grep "$dev1" $HINTS
-not grep "$dev2" $HINTS
-not grep "$dev4" $HINTS
-
-# the vg is not seen, normal activation does nothing
-not lvchange -ay $vg/$lv1
-not lvs $vg
-
-# pvscan activation all does nothing
-_clear_online_files
-pvscan --cache -aay
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-
-_clear_online_files
-pvscan --cache -aay "$dev1" || true
-not ls "$RUNDIR/lvm/pvs_online/$PVIDMD"
-not ls "$RUNDIR/lvm/vgs_online/$vg"
-
-aux enable_dev "$dev2"
-aux enable_dev "$dev4"
-aux udev_wait
-cat /proc/mdstat
-# for some reason enabling dev2 starts an odd md dev
-mdadm --stop $(lsblk -al -o NAME --noheadings "$dev2" | grep '^md') || true
-cat /proc/mdstat
-aux wipefs_a "$dev1" || true
-aux wipefs_a "$dev2" || true
-aux wipefs_a "$dev4" || true
+# Reuse same test just use raid level 1
+export MD_LEVEL=1
+. ./shell/duplicate-pvs-md0.sh