Home | History | Annotate | Line # | Download | only in test
      1  1.1  haad #!/bin/sh
      2  1.1  haad # Copyright (C) 2007 Red Hat, Inc. All rights reserved.
      3  1.1  haad #
      4  1.1  haad # This copyrighted material is made available to anyone wishing to use,
      5  1.1  haad # modify, copy, or redistribute it subject to the terms and conditions
      6  1.1  haad # of the GNU General Public License v.2.
      7  1.1  haad #
      8  1.1  haad # You should have received a copy of the GNU General Public License
      9  1.1  haad # along with this program; if not, write to the Free Software Foundation,
     10  1.1  haad # Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     11  1.1  haad 
     12  1.1  haad # Test vgsplit operation, including different LV types
     13  1.1  haad 
     14  1.1  haad . ./test-utils.sh
     15  1.1  haad 
     16  1.1  haad COMM() {  
     17  1.1  haad 	LAST_TEST="$@"
     18  1.1  haad }
     19  1.1  haad 
     20  1.1  haad prepare_pvs 5 257
     21  1.1  haad # FIXME: paramaterize lvm1 vs lvm2 metadata; most of these tests should run
     22  1.1  haad # fine with lvm1 metadata as well; for now, just add disks 5 and 6 as lvm1
     23  1.1  haad # metadata
     24  1.1  haad 
     25  1.1  haad #
     26  1.1  haad # vgsplit can be done into a new or existing VG
     27  1.1  haad #
     28  1.1  haad for i in new existing
     29  1.1  haad do
     30  1.1  haad 	#
     31  1.1  haad 	# We can have PVs or LVs on the cmdline
     32  1.1  haad 	#
     33  1.1  haad 	for j in PV LV
     34  1.1  haad 	do
     35  1.1  haad COMM "vgsplit correctly splits single linear LV into $i VG ($j args)"
     36  1.1  haad 		vgcreate $vg1 $dev1 $dev2 
     37  1.1  haad 		if [ $i = existing ]; then
     38  1.1  haad 		   vgcreate $vg2 $dev3 $dev4
     39  1.1  haad 		fi 
     40  1.1  haad 		lvcreate -l 4 -n $lv1 $vg1 $dev1 
     41  1.1  haad 		vgchange -an $vg1 
     42  1.1  haad 		if [ $j = PV ]; then
     43  1.1  haad 		  vgsplit $vg1 $vg2 $dev1
     44  1.1  haad 		else
     45  1.1  haad 		  vgsplit -n $lv1 $vg1 $vg2
     46  1.1  haad 		fi 
     47  1.1  haad 		vg_validate_pvlv_counts_ $vg1 1 0 0 
     48  1.1  haad 		if [ $i = existing ]; then
     49  1.1  haad 		   aux vg_validate_pvlv_counts_ $vg2 3 1 0
     50  1.1  haad 		else
     51  1.1  haad 		   aux vg_validate_pvlv_counts_ $vg2 1 1 0
     52  1.1  haad 		fi 
     53  1.1  haad 		lvremove -f $vg2/$lv1 
     54  1.1  haad 		vgremove -f $vg2 
     55  1.1  haad 		vgremove -f $vg1
     56  1.1  haad 
     57  1.1  haad COMM "vgsplit correctly splits single striped LV into $i VG ($j args)"
     58  1.1  haad 		vgcreate $vg1 $dev1 $dev2 
     59  1.1  haad 		if [ $i = existing ]; then
     60  1.1  haad 		   vgcreate $vg2 $dev3 $dev4
     61  1.1  haad 		fi 
     62  1.1  haad 		lvcreate -l 4 -i 2 -n $lv1 $vg1 $dev1 $dev2 
     63  1.1  haad 		vgchange -an $vg1 
     64  1.1  haad 		if [ $j = PV ]; then
     65  1.1  haad 		  vgsplit $vg1 $vg2 $dev1 $dev2
     66  1.1  haad 		else
     67  1.1  haad 		  vgsplit -n $lv1 $vg1 $vg2
     68  1.1  haad 		fi 
     69  1.1  haad 		if [ $i = existing ]; then
     70  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg2 4 1 0
     71  1.1  haad 		else
     72  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg2 2 1 0
     73  1.1  haad 		fi 
     74  1.1  haad 		lvremove -f $vg2/$lv1 
     75  1.1  haad 		vgremove -f $vg2
     76  1.1  haad 
     77  1.1  haad COMM "vgsplit correctly splits mirror LV into $i VG ($j args)" 
     78  1.1  haad 		vgcreate $vg1 $dev1 $dev2 $dev3 
     79  1.1  haad 		if [ $i = existing ]; then
     80  1.1  haad 		  vgcreate $vg2 $dev4
     81  1.1  haad 		fi 
     82  1.1  haad 		lvcreate -l 64 -m1 -n $lv1 $vg1 $dev1 $dev2 $dev3 
     83  1.1  haad 		vgchange -an $vg1 
     84  1.1  haad 		if [ $j = PV ]; then
     85  1.1  haad 		  vgsplit $vg1 $vg2 $dev1 $dev2 $dev3
     86  1.1  haad 		else
     87  1.1  haad 		  vgsplit -n $lv1 $vg1 $vg2
     88  1.1  haad 		fi 
     89  1.1  haad 		if [ $i = existing ]; then
     90  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg2 4 1 0
     91  1.1  haad 		else
     92  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg2 3 1 0
     93  1.1  haad 		fi 
     94  1.1  haad 		lvremove -f $vg2/$lv1 
     95  1.1  haad 		vgremove -f $vg2
     96  1.1  haad 
     97  1.1  haad COMM "vgsplit correctly splits origin and snapshot LV into $i VG ($j args)" 
     98  1.1  haad 		vgcreate $vg1 $dev1 $dev2 
     99  1.1  haad 		if [ $i = existing ]; then
    100  1.1  haad 		  vgcreate $vg2 $dev3 $dev4
    101  1.1  haad 		fi 
    102  1.1  haad 		lvcreate -l 64 -i 2 -n $lv1 $vg1 $dev1 $dev2 
    103  1.1  haad 		lvcreate -l 4 -i 2 -s -n $lv2 $vg1/$lv1 
    104  1.1  haad 		vgchange -an $vg1 
    105  1.1  haad 		if [ $j = PV ]; then
    106  1.1  haad 		  vgsplit $vg1 $vg2 $dev1 $dev2
    107  1.1  haad 		else
    108  1.1  haad 		  vgsplit -n $lv1 $vg1 $vg2
    109  1.1  haad 		fi 
    110  1.1  haad 		if [ $i = existing ]; then
    111  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg2 4 2 1
    112  1.1  haad 		else
    113  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg2 2 2 1
    114  1.1  haad 		fi 
    115  1.1  haad 		lvremove -f $vg2/$lv2 
    116  1.1  haad 		lvremove -f $vg2/$lv1 
    117  1.1  haad 		vgremove -f $vg2
    118  1.1  haad 
    119  1.1  haad COMM "vgsplit correctly splits linear LV but not snap+origin LV into $i VG ($j args)" 
    120  1.1  haad 		vgcreate $vg1 $dev1 $dev2 
    121  1.1  haad 		if [ $i = existing ]; then
    122  1.1  haad 		  vgcreate $vg2 $dev3
    123  1.1  haad 		fi 
    124  1.1  haad 		lvcreate -l 64 -i 2 -n $lv1 $vg1 
    125  1.1  haad 		lvcreate -l 4 -i 2 -s -n $lv2 $vg1/$lv1 
    126  1.1  haad 		vgextend $vg1 $dev4 
    127  1.1  haad 		lvcreate -l 64 -n $lv3 $vg1 $dev4 
    128  1.1  haad 		vgchange -an $vg1 
    129  1.1  haad 		if [ $j = PV ]; then
    130  1.1  haad 		  vgsplit $vg1 $vg2 $dev4
    131  1.1  haad 		else
    132  1.1  haad 		  vgsplit -n $lv3 $vg1 $vg2
    133  1.1  haad 		fi 
    134  1.1  haad 		if [ $i = existing ]; then
    135  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg2 2 1 0
    136  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg1 2 2 1
    137  1.1  haad 		else
    138  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg2 1 1 0
    139  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg1 2 2 1
    140  1.1  haad 		fi 
    141  1.1  haad 		lvremove -f $vg1/$lv2 
    142  1.1  haad 		lvremove -f $vg1/$lv1 
    143  1.1  haad 		lvremove -f $vg2/$lv3 
    144  1.1  haad 		vgremove -f $vg1 
    145  1.1  haad 		vgremove -f $vg2
    146  1.1  haad 
    147  1.1  haad COMM "vgsplit correctly splits linear LV but not mirror LV into $i VG ($j args)" 
    148  1.1  haad 		vgcreate $vg1 $dev1 $dev2 $dev3 
    149  1.1  haad 		if [ $i = existing ]; then
    150  1.1  haad 		  vgcreate $vg2 $dev5
    151  1.1  haad 		fi 
    152  1.1  haad 		lvcreate -l 64 -m1 -n $lv1 $vg1 $dev1 $dev2 $dev3 
    153  1.1  haad 		vgextend $vg1 $dev4 
    154  1.1  haad 		lvcreate -l 64 -n $lv2 $vg1 $dev4 
    155  1.1  haad 		vgchange -an $vg1 
    156  1.1  haad 		vgs
    157  1.1  haad 		lvs 
    158  1.1  haad 		pvs
    159  1.1  haad 		if [ $j = PV ]; then
    160  1.1  haad 		  vgsplit $vg1 $vg2 $dev4
    161  1.1  haad 		else
    162  1.1  haad 		  vgsplit -n $lv2 $vg1 $vg2
    163  1.1  haad 		fi 
    164  1.1  haad 		if [ $i = existing ]; then
    165  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg1 3 1 0
    166  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg2 2 1 0
    167  1.1  haad 		else
    168  1.1  haad 		vgs
    169  1.1  haad 		lvs 
    170  1.1  haad 		pvs
    171  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg1 3 1 0
    172  1.1  haad 		  aux vg_validate_pvlv_counts_ $vg2 1 1 0
    173  1.1  haad 		fi 
    174  1.1  haad 		lvremove -f $vg1/$lv1 
    175  1.1  haad 		lvremove -f $vg2/$lv2 
    176  1.1  haad 		vgremove -f $vg1 
    177  1.1  haad 		vgremove -f $vg2
    178  1.1  haad 
    179  1.1  haad 	done
    180  1.1  haad done
    181  1.1  haad 
    182  1.1  haad #
    183  1.1  haad # Test more complex setups where the code has to find associated PVs and
    184  1.1  haad # LVs to split the VG correctly
    185  1.1  haad # 
    186  1.1  haad COMM "vgsplit fails splitting 3 striped LVs into VG when only 1 LV specified" 
    187  1.1  haad vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 
    188  1.1  haad lvcreate -l 4 -n $lv1 -i 2 $vg1 $dev1 $dev2 
    189  1.1  haad lvcreate -l 4 -n $lv2 -i 2 $vg1 $dev2 $dev3 
    190  1.1  haad lvcreate -l 4 -n $lv3 -i 2 $vg1 $dev3 $dev4 
    191  1.1  haad vgchange -an $vg1 
    192  1.1  haad not vgsplit -n $lv1 $vg1 $vg2
    193  1.1  haad vgremove -ff $vg1
    194  1.1  haad 
    195  1.1  haad COMM "vgsplit fails splitting one LV with 2 snapshots, only origin LV specified" 
    196  1.1  haad vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 
    197  1.1  haad lvcreate -l 16 -n $lv1 $vg1 $dev1 $dev2 
    198  1.1  haad lvcreate -l 4 -n $lv2 -s $vg1/$lv1 
    199  1.1  haad lvcreate -l 4 -n $lv3 -s $vg1/$lv1 
    200  1.1  haad vg_validate_pvlv_counts_ $vg1 4 3 2 
    201  1.1  haad vgchange -an $vg1 
    202  1.1  haad not vgsplit -n $lv1 $vg1 $vg2;
    203  1.1  haad lvremove -f $vg1/$lv2 
    204  1.1  haad lvremove -f $vg1/$lv3 
    205  1.1  haad lvremove -f $vg1/$lv1 
    206  1.1  haad vgremove -ff $vg1
    207  1.1  haad 
    208  1.1  haad COMM "vgsplit fails splitting one LV with 2 snapshots, only snapshot LV specified" 
    209  1.1  haad vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 
    210  1.1  haad lvcreate -l 16 -n $lv1 $vg1 $dev1 $dev2 
    211  1.1  haad lvcreate -l 4 -n $lv2 -s $vg1/$lv1 
    212  1.1  haad lvcreate -l 4 -n $lv3 -s $vg1/$lv1 
    213  1.1  haad vg_validate_pvlv_counts_ $vg1 4 3 2 
    214  1.1  haad vgchange -an $vg1 
    215  1.1  haad not vgsplit -n $lv2 $vg1 $vg2
    216  1.1  haad lvremove -f $vg1/$lv2 
    217  1.1  haad lvremove -f $vg1/$lv3 
    218  1.1  haad lvremove -f $vg1/$lv1 
    219  1.1  haad vgremove -ff $vg1
    220  1.1  haad 
    221  1.1  haad COMM "vgsplit fails splitting one mirror LV, only one PV specified" 
    222  1.1  haad vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 
    223  1.1  haad lvcreate -l 16 -n $lv1 -m1 $vg1 $dev1 $dev2 $dev3 
    224  1.1  haad vg_validate_pvlv_counts_ $vg1 4 1 0 
    225  1.1  haad vgchange -an $vg1 
    226  1.1  haad not vgsplit $vg1 $vg2 $dev2 
    227  1.1  haad vgremove -ff $vg1
    228  1.1  haad 
    229  1.1  haad COMM "vgsplit fails splitting 1 mirror + 1 striped LV, only striped LV specified" 
    230  1.1  haad vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 
    231  1.1  haad lvcreate -l 16 -n $lv1 -m1 $vg1 $dev1 $dev2 $dev3 
    232  1.1  haad lvcreate -l 16 -n $lv2 -i 2 $vg1 $dev3 $dev4 
    233  1.1  haad vg_validate_pvlv_counts_ $vg1 4 2 0 
    234  1.1  haad vgchange -an $vg1 
    235  1.1  haad not vgsplit -n $lv2 $vg1 $vg2 2>err
    236  1.1  haad vgremove -ff $vg1
    237  1.1  haad 
    238  1.1  haad #
    239  1.1  haad # Verify vgsplit rejects active LVs only when active LVs involved in split
    240  1.1  haad #
    241  1.1  haad COMM "vgsplit fails, active mirror involved in split" 
    242  1.1  haad vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 
    243  1.1  haad lvcreate -l 16 -n $lv1 -m1 $vg1 $dev1 $dev2 $dev3 
    244  1.1  haad lvcreate -l 16 -n $lv2 $vg1 $dev4 
    245  1.1  haad lvchange -an $vg1/$lv2 
    246  1.1  haad vg_validate_pvlv_counts_ $vg1 4 2 0 
    247  1.1  haad not vgsplit -n $lv1 $vg1 $vg2;
    248  1.1  haad vg_validate_pvlv_counts_ $vg1 4 2 0 
    249  1.1  haad vgremove -ff $vg1
    250  1.1  haad 
    251  1.1  haad COMM "vgsplit succeeds, active mirror not involved in split" 
    252  1.1  haad vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 
    253  1.1  haad lvcreate -l 16 -n $lv1 -m1 $vg1 $dev1 $dev2 $dev3 
    254  1.1  haad lvcreate -l 16 -n $lv2 $vg1 $dev4 
    255  1.1  haad lvchange -an $vg1/$lv2 
    256  1.1  haad vg_validate_pvlv_counts_ $vg1 4 2 0 
    257  1.1  haad vgsplit -n $lv2 $vg1 $vg2 
    258  1.1  haad vg_validate_pvlv_counts_ $vg1 3 1 0 
    259  1.1  haad vg_validate_pvlv_counts_ $vg2 1 1 0 
    260  1.1  haad vgremove -ff $vg1 
    261  1.1  haad vgremove -ff $vg2
    262  1.1  haad 
    263  1.1  haad COMM "vgsplit fails, active snapshot involved in split" 
    264  1.1  haad vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 
    265  1.1  haad lvcreate -l 64 -i 2 -n $lv1 $vg1 $dev1 $dev2 
    266  1.1  haad lvcreate -l 4 -i 2 -s -n $lv2 $vg1/$lv1 
    267  1.1  haad lvcreate -l 64 -i 2 -n $lv3 $vg1 $dev3 $dev4 
    268  1.1  haad lvchange -an $vg1/$lv3 
    269  1.1  haad vg_validate_pvlv_counts_ $vg1 4 3 1 
    270  1.1  haad not vgsplit -n $lv2 $vg1 $vg2;
    271  1.1  haad vg_validate_pvlv_counts_ $vg1 4 3 1 
    272  1.1  haad lvremove -f $vg1/$lv2 
    273  1.1  haad vgremove -ff $vg1
    274  1.1  haad 
    275  1.1  haad COMM "vgsplit succeeds, active snapshot not involved in split" 
    276  1.1  haad vgcreate $vg1 $dev1 $dev2 $dev3 
    277  1.1  haad lvcreate -l 64 -i 2 -n $lv1 $vg1 $dev1 $dev2 
    278  1.1  haad lvcreate -l 4 -s -n $lv2 $vg1/$lv1 
    279  1.1  haad vgextend $vg1 $dev4 
    280  1.1  haad lvcreate -l 64 -n $lv3 $vg1 $dev4 
    281  1.1  haad lvchange -an $vg1/$lv3 
    282  1.1  haad vg_validate_pvlv_counts_ $vg1 4 3 1 
    283  1.1  haad vgsplit -n $lv3 $vg1 $vg2 
    284  1.1  haad vg_validate_pvlv_counts_ $vg1 3 2 1 
    285  1.1  haad vg_validate_pvlv_counts_ $vg2 1 1 0 
    286  1.1  haad vgchange -an $vg1 
    287  1.1  haad lvremove -f $vg1/$lv2 
    288  1.1  haad vgremove -ff $vg1 
    289  1.1  haad vgremove -ff $vg2
    290  1.1  haad 
    291