/usr/bin/scsi_satl is in sg3-utils 1.42-2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | #!/bin/bash
# scsi_satl
#
# Script to test compliance of SCSI commands on a SCSI to ATA
# Translation (SAT) Layer (SATL). This script was compiled using
# sat-r09.pdf found at www.t10.org .
# The scripts still seems to be valid for sat2r09.pdf .
# The vintage is SPC-3 and SPC-4 (see www.t10.org).
#
# Coverage:
# Command SATL notes
# -------------------------------------------------------
# INQUIRY (standard)
# INQUIRY (VPD: 0)
# INQUIRY (VPD: 0x83) Device identification VPD page
# INQUIRY (VPD: 0x89) ATA Information VPD page
# REPORT LUNS SPC-3, SPC-4 (hardly mentioned in sat-r08c)
# TEST UNIT READY
# REQUEST SENSE
# SEND DIAGNOSTIC default self test
# MODE SENSE(10) draft unclear which mode pages, so ask for all
# ATA PASS THROUGH(16) send IDENTIFY DEVICE command. Assume non-packet
# device, if packet device add "-p" option
#
# This script uses utilities from sg3_utils package (version
# 1.22 or later)
#
# Douglas Gilbert 20090930
log=0
quiet=0
verbose=""
file_err=0
inv_opcode=0
illeg_req=0
not_ready=0
medium=0
other_err=0
recovered=0
sanity=0
syntax=0
timeout=0
unit_attention=0
aborted_command=0
total_err=0
usage()
{
echo "Usage: scsi_satl [-h] [-L] [-q] [-v] <device>"
echo " where: -h, --help print usage message"
echo " -L, --log append stderr to 'scsi_satl.err'"
echo " -q, --quiet suppress some output"
echo " -v, --verbose more verbose output"
echo ""
echo "Check <device> for SCSI to ATA Translation Layer (SATL) support"
}
opt="$1"
while test ! -z "$opt" -a -z "${opt##-*}"; do
opt=${opt#-}
case "$opt" in
h|-help) usage ; exit 1 ;;
L|-log) let log=$log+1 ;;
q|-quiet) let quiet=$quiet+1 ;;
v|-verbose) verbose="-v" ;;
*) echo "Unknown option: -$opt " ; exit 1 ;;
esac
shift
opt="$1"
done
if [ $# -lt 1 ]
then
usage
exit 1
fi
for command in "sg_inq" "sg_vpd" "sg_vpd -p di" "sg_vpd -p ai" "sg_luns" \
"sg_turs" "sg_requests -s" "sg_senddiag -t" "sg_modes -a" \
"sg_sat_identify"
do
if [ $quiet -eq 0 ]
then echo "$command" $1
fi
if [ $log -eq 0 ]
then
if [ $verbose ]
then
$command $verbose $1 > /dev/null
else
$command $1 > /dev/null 2>> /dev/null
fi
else
$command $verbose $1 > /dev/null 2>> scsi_satl.err
fi
res=$?
case "$res" in
0) ;;
1) echo " syntax error" ; let syntax=$syntax+1 ;;
2) echo " not ready" ; let not_ready=$not_ready+1 ;;
3) echo " medium error" ; let medium=$medium+1 ;;
5) echo " illegal request, general" ; let illeg_req=$illeg_req+1 ;;
6) echo " unit attention" ; let unit_attention=$unit_attention+1 ;;
9) echo " illegal request, invalid opcode" ; let inv_opcode=$inv_opcode+1 ;;
11) echo " aborted command" ; let aborted_command=$aborted_command+1 ;;
15) echo " file error with $1 " ; let file_err=$file_err+1 ;;
20) echo " no sense" ; let other_err=$other_err+1 ;;
21) echo " recovered error" ; let recovered_err=$recovered_err+1 ;;
33) echo " timeout" ; let timeout=$timeout+1 ;;
97) echo " response fails sanity" ; let sanity=$sanity+1 ;;
98) echo " other SCSI error" ; let other_err=$other_err+1 ;;
99) echo " other error" ; let other_err=$other_err+1 ;;
*) echo " unknown exit status for sg_inq: $res" ; let other_err=$other_err+1 ;;
esac
done
echo ""
let total_bad_err=$file_err+$inv_opcode+$illeg_req+$medium+$aborted_command
let total_bad_err+=$other_err+$recovered+$sanity+$syntax+$timeout
let total_allow_err=$not_ready+$unit_attention
echo "total number of bad errors: $total_bad_err "
if [ $total_allow_err -gt 0 ]
then
echo "total number of allowable errors: $total_allow_err "
fi
exit $total_bad_err
|