]> git.ipfire.org Git - thirdparty/mdadm.git/blame - tests/imsm-grow-template
FIX: Tests: raid0->raid10 without degradation
[thirdparty/mdadm.git] / tests / imsm-grow-template
CommitLineData
4f8a3e5b
KW
1
2# 0 - POSITIVE test, otherwise NEGATIVE test
3negative_test=$1
4
5# 0 - On-line Capacity Expansion test, otherwise LEVEL migration or CHUNK size migration test
6migration_test=$2
7
4f8a3e5b
KW
8function grow_member() {
9 local member=$1
10 local disks=$2
11 local comps=$3
12 local level=$4
13 local size=$5
14 local offset=$6
15 local chunk=$7
16 local array_size=$((comps * size))
e26c9262 17 local backup_imsm=/tmp/backup_imsm
4f8a3e5b 18
e26c9262
AK
19 rm -f $backup_imsm
20 ( set -ex; mdadm --grow $member --chunk=$chunk --level=$level --backup-file=$backup_imsm )
4f8a3e5b
KW
21 local status=$?
22 if [ $negative_test -ne 0 ]; then
23 if [ $status -eq 0 ]; then
24 echo >&2 "**Error**: $member: --grow should failed, but it completed successfuly"
25 exit 1
26 fi
27 return
28 fi
29 check wait
30 sleep 5
e53d022c
KW
31 imsm_check member $member $disks $level $size $array_size $offset $chunk
32 testdev $member $comps $size $chunk
4f8a3e5b
KW
33}
34
35# Create container
36mdadm --create --run $container --auto=md --metadata=imsm --raid-disks=$num_disks $device_list
37wait
38imsm_check container $num_disks
39
40# Create first volume inside the container
41mdadm --create --run $member0 --auto=md --level=$vol0_level --size=$vol0_comp_size --chunk=$vol0_chunk --raid-disks=$num_disks $device_list
42wait
43
44# Create second volume inside the container (if defined)
45if [ ! -z $vol1_chunk ]; then
46 mdadm --create --run $member1 --auto=md --level=$vol1_level --size=$vol1_comp_size --chunk=$vol1_chunk --raid-disks=$num_disks $device_list
47 wait
48fi
49
50# Wait for any RESYNC to complete
51check wait
52
53# Test first volume
54imsm_check member $member0 $num_disks $vol0_level $vol0_comp_size $((vol0_comp_size * vol0_num_comps)) $vol0_offset $vol0_chunk
55testdev $member0 $vol0_num_comps $vol0_comp_size $vol0_chunk
56
57# Test second volume (if defined)
58if [ ! -z $vol1_chunk ]; then
59 imsm_check member $member1 $num_disks $vol1_level $vol1_comp_size $((vol1_comp_size * vol1_num_comps)) $vol1_offset $vol1_chunk
60 testdev $member1 $vol1_num_comps $vol1_comp_size $vol1_chunk
61fi
62
63# Add extra disks to container if operation requires spares in container.
64for i in $spare_list
65do
66 mdadm --add $container $i
67 wait
68 num_disks=$((num_disks + 1))
69done
70
71imsm_check container $num_disks
72num_disks=$((num_disks + add_to_num_disks))
e26c9262 73backup_imsm=/tmp/backup_imsm
4f8a3e5b
KW
74
75# Grow each member or a container depending on the type of an operation
76if [ $migration_test -ne 0 ]; then
77 if [ -z $new_num_disks ]; then
78 new_num_disks=$num_disks
79 fi
80 grow_member $member0 $new_num_disks $vol0_new_num_comps $vol0_new_level $vol0_comp_size $vol0_offset $vol0_new_chunk
3600f9c1 81 if [[ $vol1_new_chunk -ne 0 ]] ; then
4f8a3e5b
KW
82 grow_member $member1 $new_num_disks $vol1_new_num_comps $vol1_new_level $vol1_comp_size $vol1_offset $vol1_new_chunk
83 fi
84else
e26c9262
AK
85 rm -f $backup_imsm
86 ( set -x; mdadm --grow $container --raid-disks=$num_disks --backup-file=$backup_imsm )
4f8a3e5b
KW
87 grow_status=$?
88 if [ $negative_test -ne 0 ]; then
89 if [ $grow_status -eq 0 ]; then
90 echo >&2 "**Error**: $container: --grow should failed, but it completed successfuly"
91 exit 1
92 fi
93 else
94 check wait
95 sleep 5
96 imsm_check member $member0 $num_disks $vol0_level $vol0_comp_size $((vol0_comp_size * vol0_new_num_comps)) $vol0_offset $vol0_chunk
97 testdev $member0 $vol0_new_num_comps $vol0_comp_size $vol0_chunk
98 if [ $vol1_new_num_comps -ne 0 ]; then
99 imsm_check member $member1 $num_disks $vol1_level $vol1_comp_size $((vol1_comp_size * vol1_new_num_comps)) $vol1_offset $vol1_chunk
100 testdev $member1 $vol1_new_num_comps $vol1_comp_size $vol1_chunk
101 fi
102 fi
103fi
104
105exit 0