stresstest/error_inject.sh

382 lines
5.9 KiB
Bash
Raw Permalink Normal View History

2023-09-14 11:31:13 +08:00
function clear_disk_error()
2023-09-14 09:55:23 +08:00
{
local str=$(lsscsi | grep scsi_debug | grep $1 | awk '{print $1}')
local scsi_id=${str#*\[}
local scsi_id=${scsi_id%\]*}
local error=/sys/kernel/debug/scsi_debug/$scsi_id/error
local target_id=${scsi_id%\:*}
tmpfile=$$_clear
cat $error
cat $error | grep -v Type | awk '{print $1,$3}' > $tmpfile
while read -r line; do echo "- $line" > $error; done < $tmpfile
rm -rf $tmpfile
echo 0 > /sys/kernel/debug/scsi_debug/target$target_id/fail_reset
}
function disk_id()
{
local str=$(lsscsi | grep scsi_debug | grep $1 | awk '{print $1}')
local scsi_id=${str#*\[}
local scsi_id=${scsi_id%\]*}
echo $error
}
function disk_target_id()
{
local str=$(lsscsi | grep scsi_debug | grep $1 | awk '{print $1}')
local scsi_id=${str#*\[}
local scsi_id=${scsi_id%\]*}
local target_id=${scsi_id%\:*}
echo $target_id
}
function disk_error()
{
local str=$(lsscsi | grep scsi_debug | grep $1 | awk '{print $1}')
local scsi_id=${str#*\[}
local scsi_id=${scsi_id%\]*}
local error=/sys/kernel/debug/scsi_debug/$scsi_id/error
echo $error
}
# time out and abort failed command
# would trigger error recovery from timeout
# $1: diskname
# $2: command name
# $3: rule time
function inject_TIMEOUT_ABORT()
{
error=$(disk_error $1)
echo "0 $3 $2" > ${error}
echo "3 $3 $2" > ${error}
}
# finish command with DID_TIME_OUT
# would trigger error recovery when command finihed in scsi_decide_position
# $1: diskname
# $2: command name
# $3: rule time
function inject_DID_TIME_OUT()
{
error=$(disk_error $1)
echo "2 $3 $2 0x3 0 0 0 0 0" > ${error}
}
# finish command with LUN NOT READY, INITIALIZING COMMAND REQUIRED
# would trigger error recovery when command finihed in scsi_check_sense
# status: 0x2
# sense_key: 0x6
# asc: 0x4
# ascq: 0x2
# $1: diskname
# $2: command name
# $3: rule time
function inject_LUN_NOT_READY()
{
error=$(disk_error $1)
echo "2 $3 $2 0 0 0x2 0x6 0x4 0x2" > ${error}
}
# finish command with Medium Error
# would not trigger error recovery but EIO is triggered
# $1: diskname
# $2: command name
# $3: rule time
function inject_MEDIUM_ERROR()
{
error=$(disk_error $1)
echo "2 $3 $2 0 0 0x2 0x3 0x11 0x0" > ${error}
}
# device reset failed for 10 time
# $1: disk name to inject, for example sda
function recovery_inject1()
{
error=$(disk_error $1)
echo "4 -10 0xff" > ${error}
}
# target failed for 10 time
# $1: disk name to inject, for example sda
function recovery_inject2()
{
target_id=$(disk_target_id $1)
echo 1 > /sys/kernel/debug/scsi_debug/target$target_id/fail_reset
}
function recovery_inject3()
{
inject_DID_TIME_OUT $1 0x12 -10
}
function recovery_inject4()
{
inject_LUN_NOT_READY $1 0x12 -10
}
function recovery_inject5()
{
inject_TIMEOUT_ABORT $1 0x12 -10
}
function recovery_inject6()
{
inject_DID_TIME_OUT $1 0x1b -10
}
function recovery_inject7()
{
inject_LUN_NOT_READY $1 0x1b -10
}
function recovery_inject8()
{
inject_TIMEOUT_ABORT $1 0x1b -10
}
function error_inject1()
{
inject_TIMEOUT_ABORT $1 0x28 -10
}
function error_inject2()
{
inject_TIMEOUT_ABORT $1 0xa8 -10
}
function error_inject3()
{
inject_TIMEOUT_ABORT $1 0x88 -10
}
function error_inject4()
{
inject_TIMEOUT_ABORT $1 0x2a -10
}
function error_inject5()
{
inject_TIMEOUT_ABORT $1 0xaa -10
}
function error_inject6()
{
inject_TIMEOUT_ABORT $1 0x8a -10
}
function error_inject7()
{
inject_TIMEOUT_ABORT $1 0x28 1
}
function error_inject8()
{
inject_TIMEOUT_ABORT $1 0xa8 1
}
function error_inject9()
{
inject_TIMEOUT_ABORT $1 0x88 1
}
function error_inject10()
{
inject_TIMEOUT_ABORT $1 0x2a 1
}
function error_inject11()
{
inject_TIMEOUT_ABORT $1 0xaa 1
}
function error_inject12()
{
inject_TIMEOUT_ABORT $1 0x8a 1
}
function error_inject13()
{
inject_DID_TIME_OUT $1 0x28 -10
}
function error_inject14()
{
inject_DID_TIME_OUT $1 0xa8 -10
}
function error_inject15()
{
inject_DID_TIME_OUT $1 0x88 -10
}
function error_inject16()
{
inject_DID_TIME_OUT $1 0x2a -10
}
function error_inject17()
{
inject_DID_TIME_OUT $1 0xaa -10
}
function error_inject18()
{
inject_DID_TIME_OUT $1 0x8a -10
}
function error_inject19()
{
inject_DID_TIME_OUT $1 0x28 1
}
function error_inject20()
{
inject_DID_TIME_OUT $1 0xa8 1
}
function error_inject21()
{
inject_DID_TIME_OUT $1 0x88 1
}
function error_inject22()
{
inject_DID_TIME_OUT $1 0x2a 1
}
function error_inject23()
{
inject_DID_TIME_OUT $1 0xaa 1
}
function error_inject24()
{
inject_DID_TIME_OUT $1 0x8a 1
}
function error_inject25()
{
inject_LUN_NOT_READY $1 0x28 -10
}
function error_inject26()
{
inject_LUN_NOT_READY $1 0xa8 -10
}
function error_inject27()
{
inject_LUN_NOT_READY $1 0x88 -10
}
function error_inject28()
{
inject_LUN_NOT_READY $1 0x2a -10
}
function error_inject29()
{
inject_LUN_NOT_READY $1 0xaa -10
}
function error_inject30()
{
inject_LUN_NOT_READY $1 0x8a -10
}
function error_inject31()
{
inject_LUN_NOT_READY $1 0x28 1
}
function error_inject32()
{
inject_LUN_NOT_READY $1 0xa8 1
}
function error_inject33()
{
inject_LUN_NOT_READY $1 0x88 1
}
function error_inject34()
{
inject_LUN_NOT_READY $1 0x2a 1
}
function error_inject35()
{
inject_LUN_NOT_READY $1 0xaa 1
}
function error_inject36()
{
inject_LUN_NOT_READY $1 0x8a 1
}
function error_inject37()
{
inject_MEDIUM_ERROR $1 0x28 -10
}
function error_inject38()
{
inject_MEDIUM_ERROR $1 0xa8 -10
}
function error_inject39()
{
inject_MEDIUM_ERROR $1 0x88 -10
}
function error_inject40()
{
inject_MEDIUM_ERROR $1 0x2a -10
}
function error_inject41()
{
inject_MEDIUM_ERROR $1 0xaa -10
}
function error_inject42()
{
inject_MEDIUM_ERROR $1 0x8a -10
}
function error_inject43()
{
inject_MEDIUM_ERROR $1 0x28 1
}
function error_inject44()
{
inject_MEDIUM_ERROR $1 0xa8 1
}
function error_inject45()
{
inject_MEDIUM_ERROR $1 0x88 1
}
function error_inject46()
{
inject_MEDIUM_ERROR $1 0x2a 1
}
function error_inject47()
{
inject_MEDIUM_ERROR $1 0xaa 1
}
function error_inject48()
{
inject_MEDIUM_ERROR $1 0x8a 1
}