]>
Commit | Line | Data |
---|---|---|
21529ab3 | 1 | # An array is assembled incompletely. Some disks will |
2 | # have later metadata than others. | |
3 | # The array is then reassembled in the "wrong" order - | |
4 | # older meta data first. | |
5 | # This FAILS with mdadm 3.3 | |
6 | . tests/env-ddf-template | |
7 | tmp=$(mktemp /tmp/mdtest-XXXXXX) | |
8 | rm -f $tmp /var/tmp/mdmon.log | |
9 | ret=0 | |
10 | ||
11 | mdadm -CR $container -e ddf -n 4 $dev8 $dev9 $dev10 $dev11 | |
12 | ddf_check container 4 | |
13 | ||
14 | mdadm -CR $member1 -n 4 -l 10 $dev8 $dev10 $dev9 $dev11 -z 10000 | |
15 | mdadm -CR $member0 -n 2 -l 1 $dev8 $dev9 -z 10000 | |
16 | ||
3c899cab N |
17 | mdadm --wait $member0 || true |
18 | mdadm --wait $member1 || true | |
21529ab3 | 19 | |
d51e39c0 N |
20 | mke2fs -F $member0 |
21 | mke2fs -F $member1 | |
21529ab3 | 22 | sha_0a=$(sha1_sum $member0) |
23 | sha_1a=$(sha1_sum $member1) | |
24 | ||
25 | mdadm -Ss | |
26 | sleep 1 | |
27 | ||
28 | # Add all devices except those for $member0 | |
29 | mdadm -I $dev10 | |
30 | mdadm -I $dev11 | |
31 | ||
32 | # Start runnable members ($member1) and write | |
7d63efc8 | 33 | mdadm -IRs || true |
21529ab3 | 34 | e2fsck -fy $member1 |
35 | sha_1b=$(sha1_sum $member1) | |
36 | ||
37 | mdadm -Ss | |
38 | sleep 1 | |
39 | ||
40 | # Seq number should be different now | |
41 | seq8a=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p') | |
42 | seq10a=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p') | |
43 | ||
44 | if [ $seq8a -ge $seq10a ]; then | |
45 | ret=1 | |
46 | echo ERROR: sequential number of $dev10 not bigger than $dev8 | |
47 | fi | |
48 | if [ x$sha_1a = x$sha_1b ]; then | |
49 | ret=1 | |
50 | echo ERROR: sha1sums equal after write | |
51 | fi | |
52 | ||
53 | #[ -f /var/tmp/mdmon.log ] && cat /var/tmp/mdmon.log | |
54 | ||
bcbb92d4 | 55 | # Now reassemble |
21529ab3 | 56 | # Note that we add the previously missing disks first. |
57 | # $dev10 should have a higher seq number than $dev8 | |
58 | for d in $dev8 $dev9 $dev10 $dev11; do | |
bcbb92d4 | 59 | mdadm -I $d |
21529ab3 | 60 | done |
61 | ||
7d63efc8 | 62 | mdadm -IRs || true |
21529ab3 | 63 | sha_0c=$(sha1_sum $member0) |
64 | sha_1c=$(sha1_sum $member1) | |
65 | ||
66 | mdadm -Ss | |
67 | sleep 1 | |
68 | ||
69 | seq8c=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p') | |
70 | seq10c=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p') | |
71 | ||
72 | if [ x$sha_0a != x$sha_0c ]; then | |
73 | ret=1 | |
74 | echo ERROR: sha1sum of $member0 has changed | |
75 | fi | |
76 | if [ x$sha_1b != x$sha_1c ]; then | |
77 | ret=1 | |
78 | echo ERROR: sha1sum of $member1 has changed | |
79 | fi | |
80 | if [ \( $seq10a -ge $seq10c \) -o \( $seq8c -ne $seq10c \) ]; then | |
81 | ret=1 | |
82 | echo ERROR: sequential numbers are wrong | |
83 | fi | |
84 | ||
85 | # Expect consistent state | |
86 | for d in $dev10 $dev8; do | |
87 | mdadm -E $d>$tmp | |
88 | for x in 0 1; do | |
89 | egrep 'state\['$x'\] : Optimal, Consistent' $tmp || { | |
90 | ret=1 | |
91 | echo ERROR: $member0 has unexpected state on $d | |
92 | } | |
93 | done | |
94 | if [ x$(egrep -c 'active/Online$' $tmp) != x4 ]; then | |
95 | ret=1 | |
96 | echo ERROR: unexpected number of online disks on $d | |
97 | fi | |
98 | done | |
99 | ||
100 | # Now try assembly | |
101 | if mdadm -A $container $dev8 $dev9 $dev10 $dev11; then | |
102 | mdadm -IR $container | |
103 | sha_0d=$(sha1_sum $member0) | |
104 | sha_1d=$(sha1_sum $member1) | |
105 | mdadm -Ss | |
106 | sleep 1 | |
107 | seq8d=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p') | |
108 | seq10d=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p') | |
109 | if [ x$sha_0a != x$sha_0d ]; then | |
110 | ret=1 | |
111 | echo ERROR: sha1sum of $member0 has changed | |
112 | fi | |
113 | if [ x$sha_1b != x$sha_1d ]; then | |
114 | ret=1 | |
115 | echo ERROR: sha1sum of $member1 has changed | |
116 | fi | |
117 | if [ \( $seq10a -ge $seq10d \) -o \( $seq8d -ne $seq10d \) ]; then | |
118 | ret=1 | |
119 | echo ERROR: sequential numbers are wrong | |
120 | fi | |
121 | else | |
122 | ret=1 | |
123 | echo ERROR: assembly failed | |
124 | fi | |
125 | ||
126 | if [ $ret -ne 0 ]; then | |
127 | mdadm -E $dev10 | |
128 | mdadm -E $dev8 | |
129 | fi | |
130 | rm -f $tmp /var/tmp/mdmon.log | |
131 | [ $ret -eq 0 ] |