2 # 0 - POSITIVE test, otherwise NEGATIVE test
5 # 0 - On-line Capacity Expansion test, otherwise LEVEL migration or CHUNK size migration test
8 function grow_member() {
17 local array_size=$((comps * size))
20 if [ $chunk -eq $old_chunk ]; then
21 ( set -ex; mdadm --grow $member --level=$level )
23 ( set -ex; mdadm --grow $member --chunk=$chunk )
26 if [ $negative_test -ne 0 ]; then
27 if [ $status -eq 0 ]; then
28 echo >&2 "**Error**: $member: --grow should failed, but it completed successfuly"
35 imsm_check member $member $disks $level $size $array_size $offset $chunk
36 testdev $member $comps $size $chunk
40 mdadm --create --run $container --auto=md --metadata=imsm --raid-disks=$num_disks $device_list
42 imsm_check container $num_disks
44 # Create first volume inside the container
45 if [[ ! -z $vol0_chunk ]]; then
46 mdadm --create --run $member0 --auto=md --level=$vol0_level --size=$vol0_comp_size --chunk=$vol0_chunk --raid-disks=$num_disks $device_list
48 mdadm --create --run $member0 --auto=md --level=$vol0_level --size=$vol0_comp_size --raid-disks=$num_disks $device_list
52 # Create second volume inside the container (if defined)
53 if [ ! -z $vol1_level ]; then
54 if [ ! -z $vol1_chunk ]; then
55 mdadm --create --run $member1 --auto=md --level=$vol1_level --size=$vol1_comp_size --chunk=$vol1_chunk --raid-disks=$num_disks $device_list
57 mdadm --create --run $member1 --auto=md --level=$vol1_level --size=$vol1_comp_size --raid-disks=$num_disks $device_list
62 # Wait for any RESYNC to complete
66 imsm_check member $member0 $num_disks $vol0_level $vol0_comp_size $((vol0_comp_size * vol0_num_comps)) $vol0_offset $vol0_chunk
67 testdev $member0 $vol0_num_comps $vol0_comp_size $vol0_chunk
69 # Test second volume (if defined)
70 if [ ! -z $vol1_level ]; then
71 imsm_check member $member1 $num_disks $vol1_level $vol1_comp_size $((vol1_comp_size * vol1_num_comps)) $vol1_offset $vol1_chunk
72 testdev $member1 $vol1_num_comps $vol1_comp_size $vol1_chunk
75 # Add extra disks to container if operation requires spares in container.
78 mdadm --add $container $i
80 num_disks=$((num_disks + 1))
83 imsm_check container $num_disks
84 num_disks=$((num_disks + add_to_num_disks))
85 backup_imsm=/tmp/backup_imsm
87 # Grow each member or a container depending on the type of an operation
88 if [ $migration_test -ne 0 ]; then
89 if [ -z $new_num_disks ]; then
90 new_num_disks=$num_disks
92 grow_member $member0 $new_num_disks $vol0_new_num_comps $vol0_new_level $vol0_comp_size $vol0_offset $vol0_new_chunk $vol0_chunk
93 if [[ $vol1_new_chunk -ne 0 ]] ; then
94 grow_member $member1 $new_num_disks $vol1_new_num_comps $vol1_new_level $vol1_comp_size $vol1_offset $vol1_new_chunk $vol1_chunk
98 ( set -x; mdadm --grow $container --raid-disks=$num_disks )
100 if [ $negative_test -ne 0 ]; then
101 if [ $grow_status -eq 0 ]; then
102 echo >&2 "**Error**: $container: --grow should failed, but it completed successfuly"
110 imsm_check member $member0 $num_disks $vol0_level $vol0_comp_size $((vol0_comp_size * vol0_new_num_comps)) $vol0_offset $vol0_chunk
111 testdev $member0 $vol0_new_num_comps $vol0_comp_size $vol0_chunk
112 if [ $vol1_new_num_comps -ne 0 ]; then
113 imsm_check member $member1 $num_disks $vol1_level $vol1_comp_size $((vol1_comp_size * vol1_new_num_comps)) $vol1_offset $vol1_chunk
114 testdev $member1 $vol1_new_num_comps $vol1_comp_size $vol1_chunk