This test is quite sensitive to resync speed - if the resync happens to quickly it fails because it sees aan optimal array when it expects a degraded array. 1000 is often slow enough but now always, so slow it down even more. This requires reducing speed_limit_min also as kernel ignores 'max' when speed is below 'min'. Reported-by: Jes Sorensen <Jes.Sorensen@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>
129 lines
2.3 KiB
Plaintext
129 lines
2.3 KiB
Plaintext
|
|
# create a v-1 raid5 array and assemble in various ways
|
|
|
|
mdadm -CR -e1 --name one $md1 -l5 -n3 -x2 $dev0 $dev1 $dev2 $dev3 $dev4
|
|
tst="check raid5 ;testdev $md1 2 $mdsize1 512 ; mdadm -S $md1"
|
|
uuid=`mdadm -Db $md1 | sed 's/.*UUID=//'`
|
|
check wait
|
|
|
|
eval $tst
|
|
|
|
mdadm -A $md1 $dev0 $dev1 $dev2
|
|
mdadm $md1 --add $dev3 $dev4
|
|
check spares 2
|
|
eval $tst
|
|
|
|
mdadm -A $md1 -u $uuid $devlist
|
|
check spares 2
|
|
eval $tst
|
|
|
|
mdadm -A $md1 --name one $devlist
|
|
check spares 2
|
|
eval $tst
|
|
|
|
|
|
conf=$targetdir/mdadm.conf
|
|
{
|
|
echo DEVICE $devlist
|
|
echo array $md1 UUID=$uuid
|
|
} > $conf
|
|
|
|
mdadm -As -c $conf $md1
|
|
eval $tst
|
|
|
|
{
|
|
echo DEVICE $devlist
|
|
echo array $md1 name=one
|
|
} > $conf
|
|
|
|
mdadm -As -c $conf
|
|
eval $tst
|
|
|
|
{
|
|
echo DEVICE $devlist
|
|
echo array $md1 devices=$dev0,$dev1,$dev2,$dev3,$dev4
|
|
} > $conf
|
|
|
|
mdadm -As -c $conf
|
|
|
|
echo "DEVICE $devlist" > $conf
|
|
mdadm -Db $md1 >> $conf
|
|
eval $tst
|
|
mdadm --assemble --scan --config=$conf $md1
|
|
eval $tst
|
|
echo PING >&2
|
|
|
|
echo " metadata=1.0 devices=$dev0,$dev1,$dev2,$dev3,$dev4" >> $conf
|
|
mdadm --assemble --scan --config=$conf $md1
|
|
eval $tst
|
|
|
|
### Now with a missing device
|
|
# We don't want the recovery to complete while we are
|
|
# messing about here.
|
|
echo 100 > /proc/sys/dev/raid/speed_limit_max
|
|
echo 100 > /proc/sys/dev/raid/speed_limit_min
|
|
|
|
mdadm -AR $md1 $dev0 $dev2 $dev3 $dev4 #
|
|
check state U_U
|
|
check spares 1
|
|
eval $tst
|
|
|
|
mdadm -A $md1 -u $uuid $devlist
|
|
check state U_U
|
|
eval $tst
|
|
|
|
mdadm -A $md1 --name=one $devlist
|
|
check state U_U
|
|
check spares 1
|
|
eval $tst
|
|
|
|
|
|
conf=$targetdir/mdadm.conf
|
|
{
|
|
echo DEVICE $devlist
|
|
echo array $md1 UUID=$uuid
|
|
} > $conf
|
|
|
|
mdadm -As -c $conf $md1
|
|
check state U_U
|
|
eval $tst
|
|
|
|
{
|
|
echo DEVICE $devlist
|
|
echo array $md1 name=one
|
|
} > $conf
|
|
|
|
mdadm -As -c $conf
|
|
check state U_U
|
|
eval $tst
|
|
|
|
{
|
|
echo DEVICE $devlist
|
|
echo array $md1 devices=$dev0,$dev1,$dev2
|
|
} > $conf
|
|
|
|
mdadm -As -c $conf
|
|
|
|
echo "DEVICE $devlist" > $conf
|
|
mdadm -Db $md1 >> $conf
|
|
check state U_U
|
|
eval $tst
|
|
|
|
mdadm --assemble --scan --config=$conf $md1
|
|
check state U_U
|
|
eval $tst
|
|
|
|
echo " metadata=1.0 devices=$dev0,$dev1,$dev2" >> $conf
|
|
mdadm --assemble --scan --config=$conf $md1
|
|
check state U_U
|
|
eval $tst
|
|
|
|
# And now assemble with -I
|
|
mdadm -Ss
|
|
mdadm -I -c $conf $dev0
|
|
mdadm -I -c $conf $dev1
|
|
mdadm -I -c $conf $dev2
|
|
eval $tst
|
|
echo 2000 > /proc/sys/dev/raid/speed_limit_max
|
|
echo 1000 > /proc/sys/dev/raid/speed_limit_min
|