On Friday 17 September 2004 01:54 am, Jerome Lyles wrote:
for /block/sda's bus_id 3:0:0:0
Sep 16 23:45:26 Cosmos3 kernel: sda: unknown partition table
Sep 16 23:45:26 Cosmos3 kernel: Attached scsi disk sda at scsi3, channel 0,
id 0, lun 0
Sep 16 23:45:26 Cosmos3 kernel: Attached scsi generic sg0 at scsi3, channel
0, id 0, lun 0, type 0
Sep 16 23:45:27 Cosmos3 /etc/hotplug/block.agent[10013]: new block
device /block/sda
Looks like it was found to me... Its on scsi bus 3.
Sometimes SuSE does not scan all scsi buses. Often it only
scans the first two busses, (numbered bus 0 and 1.)
You can check by doing (as root)
cat /proc/scsi/scsi
If you only see two busses listed, then do (as root again)
echo "scsi add-single-device 2 0 0 0" > /proc/scsi/scsi
That will make it visible at least. Then you can rescan the
scsi bus and it should find the drive... As root:
rescan-scsi-bus.sh 2
Sometime you have to hunt for rescan-scsi-bus.sh .
Here is the one I use on SuSE 8.2
norvio:~ # cat bin/rescan-scsi-bus.sh
#!/bin/bash
# Skript to rescan SCSI bus, using the
# scsi add-single-device mechanism
# (w) 1998-03-19 Kurt Garloff (c) GNU GPL
# (w) 2003-07-16 Kurt Garloff (c) GNU GPL
# $Id: rescan-scsi-bus.sh,v 1.7 2003/07/16 11:58:10 garloff Exp $
setcolor ()
{
red="\e[0;31m"
green="\e[0;32m"
yellow="\e[0;33m"
norm="\e[0;0m"
}
unsetcolor ()
{
red=""; green=""
yellow=""; norm=""
}
# Return hosts. /proc/scsi/HOSTADAPTER/? must exist
findhosts ()
{
hosts=
for driverdir in /proc/scsi/*; do
driver=${driverdir#/proc/scsi/}
[ $driver = scsi -o $driver = sg -o $driver = dummy ] && continue
for hostdir in $driverdir/*; do
name=${hostdir#/proc/scsi/*/}
[ $name = add_map -o $name = map -o $name = mod_parm ] && continue
num=$name
driverinfo=$driver
if [ -r $hostdir/status ]; then
num=$(printf '%d\n' `sed -n 's/SCSI host number://p' $hostdir/status`)
driverinfo="$driver:$name"
fi
hosts="$hosts $num"
echo "Host adapter $num ($driverinfo) found."
done
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 "${yellow}OLD: $norm"
testexist
if test ! -z "$remove" -a ! -z "$new"; then
# Device exists and we're in remove mode, so remove and readd
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[A${yellow}OLD: $norm"
testexist
if test -z "$new"; then
printf "\r${red}DEL: $norm\r\n\n\n\n"; let rmvd+=1;
fi
fi
if test -z "$new"; then
# Device does not exist, try to add
printf "\r${green}NEW: $norm"
echo "scsi add-single-device $devnr" >/proc/scsi/scsi
testexist
if test -z "$new"; then
# Device not present
printf "\r\x1b[A";
# Optimization: if lun==0, stop here (only if in non-remove mode)
if test $lun = 0 -a -z "$remove"; then
break;
fi
else
let found+=1;
fi
fi
done
done
done
}
# main
if test @$1 = @--help -o @$1 = @-h -o @$1 = @-?; then
echo "Usage: rescan-scsi-bus.sh [options] [host [host ...]]"
echo "Options:"
echo " -l activates scanning for LUNs 0-7 [default: 0]"
echo " -w scan for target device IDs 0 .. 15 [default: 0-7]"
echo " -c enables scanning of channels 0 1 [default: 0]"
echo " -r enables removing of devices [default: disabled]"
echo "--remove: same as -r"
echo "--color: use coloured prefixes OLD/NEW/DEL"
echo "--hosts=LIST: Scan only host(s) in LIST"
echo "--channels=LIST: Scan only channel(s) in LIST"
echo "--ids=LIST: Scan only target ID(s) in LIST"
echo "--luns=LIST: Scan only lun(s) in LIST"
echo " Host numbers may thus be specified either directly on cmd line
(depre
cated) or"
echo " or with the --hosts=LIST parameter (recommended)."
echo "LIST: A[-B][,C[-D]]... is a comma separated list of single values
and
ranges"
echo " (No spaces allowed.)"
exit 0
fi
expandlist ()
{
list=$1
result=""
first=${list%%,*}
rest=${list#*,}
while test ! -z "$first"; do
beg=${first%%-*};
if test "$beg" = "$first"; then
result="$result $beg";
else
end=${first#*-}
result="$result `seq $beg $end`"
fi
test "$rest" = "$first" && rest=""
first=${rest%%,*}
rest=${rest#*,}
done
echo $result
}
# defaults
unsetcolor
lunsearch="0"
idsearch=`seq 0 7`
channelsearch="0"
remove=""
findhosts;
# Scan options
opt="$1"
while test ! -z "$opt" -a -z "${opt##-*}"; do
opt=${opt#-}
case "$opt" in
l) lunsearch=`seq 0 7` ;;
w) idsearch=`seq 0 15` ;;
c) channelsearch="0 1" ;;
r) remove=1 ;;
-remove) remove=1 ;;
-hosts=*) arg=${opt#-hosts=}; hosts=`expandlist $arg` ;;
-channels=*) arg=${opt#-channels=};channelsearch=`expandlist $arg` ;;
-ids=*) arg=${opt#-ids=}; idsearch=`expandlist $arg` ;;
-channels=*) arg=${opt#-luns=}; lunsearch=`expandlist $arg` ;;
-color) setcolor ;;
*) echo "Unknown option -$opt !" ;;
esac
shift
opt="$1"
done
# Hosts given ?
if test @$1 != @; then
hosts=$*;
fi
echo "Scanning hosts $hosts channels $channelsearch for "
echo " SCSI target IDs " $idsearch ", LUNs " $lunsearch
test -z "$remove" || echo " and remove devices that have disappeared"
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. "
--
_____________________________________
John Andersen