#!/bin/sh source ./error_inject.sh function add_fio() { while : do for dev in `lsscsi | grep scsi_debug | awk '{print $6}'` do fio_cnt=$(ps aux | grep fio | grep $dev -c) if [ $fio_cnt -gt 20 ]; then echo "$fio_cnt larger than 20, do not add" continue fi threads=$[RANDOM%5+1] echo "add $threads fio for $dev" fio -filename=$dev -name=rand_write -rw=randrw -bs=4k -direct=1 -size=1G -numjobs=$threads -runtime=240 -group_reporting 2>&1 > /dev/null & done sleep 10 done } function add_error() { while : do for dev in `lsscsi | grep scsi_debug | awk '{print $6}'` do inject=$[RANDOM%3] if [ $inject -eq 0 ]; then errtype=$[RANDOM%35+1] echo add error to $(basename $dev) error_inject$errtype $(basename $dev) fi done sleep 3 done } function add_recovery_error() { while : do for dev in `lsscsi | grep scsi_debug | awk '{print $6}'` do inject=$[RANDOM%3] if [ $inject -eq 0 ]; then recovtype=$[RANDOM%7+1] echo add recovery error to $(basename $dev) recovery_inject$recovtype $(basename $dev) fi done sleep 3 done } function clear_error() { while : do for dev in `lsscsi | grep scsi_debug | awk '{print $6}'` do inject=$[RANDOM%3] if [ $inject -eq 0 ]; then echo clear error $(basename $dev) clear_disk_error $(basename $dev) fi done sleep 100 done } function set_running() { while : do for dev in `lsscsi | grep scsi_debug | awk '{print $6}'` do disk=$(basename $dev) state=$(cat /sys/block/$disk/device/state) if [ "$state" == "offline" ]; then echo clear error $disk clear_disk_error $disk 2>&1 > /dev/null echo "set $disk running" echo "running" > /sys/block/$disk/device/state fi done sleep 1 done }