#! /bin/bash mdadm=/home/martin/mdadm/mdadm n=1 log=$(printf /var/tmp/md-%04d.log $n) while [ -e $log ]; do n=$((n+1)) log=$(printf /var/tmp/md-%04d.log $n) done echo log=$log exec 3>&2 exec 1>$log 2>&1 TRAP= trap 'eval "$TRAP"' 0 set -x setup_lo() { for i in `seq 8 13`; do mknod /dev/loop$i b 7 $i losetup /dev/loop$i /var/tmp/mdtest$i eval "dev$i=/dev/loop$i" done >/dev/null 2>&1 TRAP="cleanup_lo; $TRAP" } cleanup_lo() { for i in `seq 8 13`; do eval "losetup -d \$dev$i" done >/dev/null 2>&1 } setup_lvm() { for i in `seq 8 13`; do eval "dev$i=/dev/tosh/rd$((i-7))" done } #setup_lvm setup_lo # for testing with IMSM instead of DDF #export IMSM_NO_PLATFORM=1 #export IMSM_DEVNAME_AS_SERIAL=1 #export IMSM_TEST_OROM=1 #export MDADM_EXPERIMENTAL=1 dmesg -c >/dev/null #date +"CREATE %H:%M:%S.%N" $mdadm --quiet -CR /dev/md/ddf -e ddf -n 4 $dev8 $dev9 $dev10 $dev11 --auto=yes $mdadm --quiet -CR /dev/md/vol1 $dev8 $dev9 $dev10 $dev11 -n 4 -l 5 -z 4000 -c 64 --auto=yes $mdadm --quiet -CR /dev/md/vol0 $dev8 $dev9 $dev10 $dev11 -n 4 -l 10 -z 9000 -c 64 --auto=yes $mdadm --quiet --wait /dev/md/vol[01] #date +"WAIT %H:%M:%S.%N" # get PID of mdmon for tracing #for x in $(ps --no-heading -Lo lwp -C mdmon); do trace_cmd="$trace_cmd -p $x"; done $mdadm --quiet --fail /dev/md/vol0 $dev11 #date +"FAIL %H:%M:%S.%N" #strace -tt -x -o /tmp/md.str $trace_cmd & $mdadm --quiet --add /dev/md/ddf $dev12 #date +"ADD %H:%M:%S.%N" $mdadm --quiet --wait /dev/md/vol[01] #date +"WAIT %H:%M:%S.%N" cat /proc/mdstat dmesg -c $mdadm -E $dev11 $mdadm -E $dev12 $mdadm -Ss # if strace was used above #cat /tmp/md.str set +x egrep -i 'error|failed|rebuilding|Degraded,' $log >&3