| |
| # Check integrity of raid6 in degraded modes |
| # Create a 5 disk raid6, dump some data to it, then |
| # sha1sum it with different pairs of devices failed |
| |
| if [ "$INTEGRITY" != "yes" ]; then |
| echo -ne 'skipping... ' |
| exit 0 |
| fi |
| |
| layouts='ls rs la ra' |
| lv=`uname -r` |
| if expr $lv '>=' 2.6.30 > /dev/null |
| then |
| layouts="$layouts parity-first ddf-zero-restart ddf-N-restart ddf-N-continue \ |
| left-asymmetric-6 right-asymmetric-6 left-symmetric-6 right-symmetric-6 parity-first-6" |
| fi |
| |
| for layout in $layouts |
| do |
| mdadm -CR $md0 -l6 --layout $layout -n5 $dev0 $dev1 $dev2 $dev3 $dev4 |
| check wait |
| tar cf - /etc > $md0 |
| sum=`sha1sum $md0` |
| |
| totest= |
| for second in $dev0 $dev1 $dev2 $dev3 $dev4 |
| do |
| mdadm $md0 -f $second |
| mdadm $md0 -r $second |
| blockdev --flushbufs $md0 |
| sum1=`sha1sum $md0` |
| if [ "$sum" != "$sum1" ] |
| then |
| echo $sum does not match $sum1 with $second missing |
| exit 1 |
| fi |
| for first in $totest |
| do |
| mdadm $md0 -f $first |
| mdadm $md0 -r $first |
| blockdev --flushbufs $md0 |
| sum1=`sha1sum $md0` |
| if [ "$sum" != "$sum1" ] |
| then |
| echo $sum does not match $sum1 with $first and $second missing |
| exit 1 |
| fi |
| mdadm $md0 -a $first |
| while ! (check state 'U*_U*'); do check wait; sleep 0.2; done |
| done |
| mdadm $md0 -a $second |
| while ! (check state 'U*'); do check wait; sleep 0.2; done |
| totest="$totest $second" |
| done |
| mdadm -S $md0 |
| done |