aboutsummaryrefslogtreecommitdiff
path: root/archive/rescan-scsi-bus.sh
diff options
context:
space:
mode:
Diffstat (limited to 'archive/rescan-scsi-bus.sh')
-rwxr-xr-xarchive/rescan-scsi-bus.sh101
1 files changed, 101 insertions, 0 deletions
diff --git a/archive/rescan-scsi-bus.sh b/archive/rescan-scsi-bus.sh
new file mode 100755
index 00000000..755bdadb
--- /dev/null
+++ b/archive/rescan-scsi-bus.sh
@@ -0,0 +1,101 @@
+#!/bin/bash
+# Skript to rescan SCSI bus, using the
+# scsi add-single-device mechanism
+# (w) 98/03/19 Kurt Garloff <kurt@garloff.de> (c) GNU GPL
+
+# Return hosts. /proc/scsi/HOSTADAPTER/? must exist
+findhosts ()
+{
+ hosts=
+ for name in /proc/scsi/*/?; do
+ name=${name#/proc/scsi/}
+ if test ! $name = scsi
+ then hosts="$hosts ${name#*/}"
+ echo "Host adapter ${name#*/} (${name%/*}) found."
+ fi
+ done
+}
+
+# Test if SCSI device $host $channen $id $lun exists
+# Outputs description from /proc/scsi/scsi, returns new
+testexist ()
+{
+ grepstr="scsi$host Channel: 0$channel Id: 0*$id Lun: 0$lun"
+ new=`cat /proc/scsi/scsi|grep -e"$grepstr"`
+ if test ! -z "$new"
+ then cat /proc/scsi/scsi|grep -e"$grepstr"
+ cat /proc/scsi/scsi|grep -A2 -e"$grepstr"|tail -2|pr -o4 -l1
+ fi
+}
+
+# Perform search (scan $host)
+dosearch ()
+{
+ for channel in $channelsearch; do
+ for id in $idsearch; do
+ for lun in $lunsearch; do
+ new=
+ devnr="$host $channel $id $lun"
+ echo "Scanning for device $devnr ..."
+ printf "OLD: "
+ testexist
+ if test ! -z "$remove" -a ! -z "$new"
+ then echo "scsi remove-single-device $devnr" >/proc/scsi/scsi
+ echo "scsi add-single-device $devnr" >/proc/scsi/scsi
+ printf "\r\x1b[A\x1b[A\x1b[AOLD: "
+ testexist
+ if test -z "$new"; then printf "\rDEL: \r\n\n\n\n"; let rmvd+=1; fi
+ fi
+ if test -z "$new"
+ then printf "\rNEW: "
+ echo "scsi add-single-device $devnr" >/proc/scsi/scsi
+ testexist
+ if test -z "$new"; then printf "\r\x1b[A"; else let found+=1; fi
+ fi
+ done
+ done
+ done
+}
+
+
+# main
+if test @$1 = @--help -o @$1 = @-h
+ then
+ echo "Usage: rescan-scsi-bus.sh [-l] [-w] [-c] [host [host ...]]"
+ echo " -l activates scanning for LUNs 0 .. 7 [default: 0]"
+ echo " -w enables scanning for device IDs 0 .. 15 [def.: 0 .. 7]"
+ echo " -r enables removing of devices [default: disabled]"
+ echo " -c enables scanning of channels 0 1 [default: 0]"
+ echo " If hosts are given, only these are scanned [default: all]"
+ exit 0
+fi
+
+# defaults
+lunsearch="0"
+idsearch="0 1 2 3 4 5 6 7"
+channelsearch="0"
+remove=""
+
+# Scan options
+opt="$1"
+while test ! -z "$opt" -a -z "${opt##-*}"; do
+ opt=${opt#-}
+ case "$opt" in
+ l) lunsearch="0 1 2 3 4 5 6 7" ;;
+ w) idsearch="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" ;;
+ c) channelsearch="0 1" ;;
+ r) remove=1 ;;
+ *) echo "Unknown option -$opt !" ;;
+ esac
+ shift
+ opt="$1"
+done
+
+# Hosts given ?
+if test @$1 = @; then findhosts; else hosts=$*; fi
+
+declare -i found=0
+declare -i rmvd=0
+for host in $hosts; do dosearch; done
+echo "$found new device(s) found. "
+echo "$rmvd device(s) removed. "