| #!/bin/sh |
| # This script is meant as an example of using the sg_persist utility |
| # in the sg3_utils package. This script works as expected on the |
| # author's Fujitsu MAM3184, Seagate ST373455 and ST9146803SS disks. |
| # |
| # Version 2.0 20171104 |
| |
| # N.B. make sure the device name is correct for your environment. |
| |
| key="123abc" |
| key2="333aaa" |
| kk=${key} |
| rtype="1" |
| verbose="" |
| |
| usage() |
| { |
| echo "Usage: sg_persist_tst.sh [-e] [-h] [-s] [-v] <device>" |
| echo " where:" |
| echo " -e, --exclusive exclusive access (def: write " \ |
| "exclusive)" |
| echo " -h, --help print usage message" |
| echo " -s, --second use second key" |
| echo " -v, --verbose more verbose output" |
| echo " -vv even more verbose output" |
| echo " -vvv even more verbose output" |
| echo "" |
| echo "Test SCSI Persistent Reservations with sg_persist utility." |
| echo "Default key is ${key} and alternate, second key is ${key2} ." |
| echo "Should be harmless (unless one of those keys is already in use)." |
| echo "The APTPL bit is not set in the PR register so a power cycle" |
| echo "on the device will clear the reservation if this script stops" |
| echo "(or is stopped) before clearing it. Tape drives only seem to " |
| echo "support 'exclusive access' type (so use '-e')." |
| } |
| |
| opt="$1" |
| while test ! -z "$opt" -a -z "${opt##-*}"; do |
| opt=${opt#-} |
| case "$opt" in |
| e|-exclusive) rtype="3" ;; |
| h|-help) usage ; exit 0 ;; |
| s|-second) kk=${key2} ;; |
| vvv) verbose="-vvv" ;; |
| vv) verbose="-vv" ;; |
| v|-verbose) verbose="-v" ;; |
| *) echo "Unknown option: -$opt " ; exit 1 ;; |
| esac |
| shift |
| opt="$1" |
| done |
| |
| if [ $# -lt 1 ] |
| then |
| usage |
| exit 1 |
| fi |
| |
| echo ">>> try to report capabilities:" |
| sg_persist -c ${verbose} "$1" |
| res=$? |
| case "$res" in |
| 0) ;; |
| 1) echo " syntax error" ;; |
| 2) echo " not ready" ;; |
| 3) echo " medium error" ;; |
| 5) echo " illegal request, report capabilities not supported?" ;; |
| 6) echo " unit attention" ;; |
| 9) echo " illegal request, Persistent Reserve (In) not supported" ;; |
| 11) echo " aborted command" ;; |
| 15) echo " file error with $1 " ;; |
| 20) echo " no sense" ;; |
| 21) echo " recovered error" ;; |
| 33) echo " timeout" ;; |
| 97) echo " response fails sanity" ;; |
| 98) echo " other SCSI error" ;; |
| 99) echo " other error" ;; |
| *) echo " unknown exit status for sg_persist: $res" ;; |
| esac |
| echo "" |
| sleep 1 |
| |
| echo ">>> check if any keys are registered:" |
| sg_persist --no-inquiry --read-keys ${verbose} "$1" |
| sleep 1 |
| |
| echo |
| echo ">>> register a key:" |
| sg_persist -n --out --register --param-sark=${kk} ${verbose} "$1" |
| sleep 1 |
| |
| echo |
| echo ">>> now key ${kk} should be registered:" |
| sg_persist -n --read-keys ${verbose} "$1" |
| sleep 1 |
| |
| echo |
| echo ">>> reserve the device (based on key ${kk}):" |
| sg_persist -n --out --reserve --param-rk=${kk} --prout-type=${rtype} ${verbose} "$1" |
| sleep 1 |
| |
| echo |
| echo ">>> check if the device is reserved (it should be now):" |
| sg_persist -n --read-reservation ${verbose} "$1" |
| sleep 1 |
| |
| echo |
| echo ">>> try to 'read full status' (may not be supported):" |
| sg_persist -n --read-full-status ${verbose} "$1" |
| sleep 1 |
| |
| echo |
| echo ">>> now release reservation:" |
| sg_persist -n --out --release --param-rk=${kk} --prout-type=${rtype} ${verbose} "$1" |
| sleep 1 |
| |
| echo |
| echo ">>> check if the device is reserved (it should _not_ be now):" |
| sg_persist -n --read-reservation ${verbose} "$1" |
| sleep 1 |
| |
| echo |
| echo ">>> unregister key ${kk}:" |
| sg_persist -n --out --register --param-rk=${kk} ${verbose} "$1" |
| sleep 1 |
| |
| echo |
| echo ">>> now key ${kk} should not be registered:" |
| sg_persist -n -k ${verbose} "$1" |
| sleep 1 |