Date: Sat, 1 Feb 1997 20:31:30 +0100 From: j@uriah.heep.sax.de (J Wunsch) To: freebsd-scsi@FreeBSD.org (FreeBSD SCSI list) Cc: Don.Lewis@tsc.tdk.com (Don Lewis) Subject: Re: SCSI disk MEDIUM ERROR with a few twists Message-ID: <Mutt.19970201203130.j@uriah.heep.sax.de> In-Reply-To: <199702011808.NAA16376@hda.hda.com>; from Peter Dufault on Feb 1, 1997 13:08:55 -0500 References: <199702011537.HAA28985@salsa.gv.tsc.tdk.com> <199702011808.NAA16376@hda.hda.com>
index | next in thread | previous in thread | raw e-mail
As Peter Dufault wrote:
> I also put together a defect list dumper for Satoshi when he was
> having some problems, so I'm putting that here too.
Neat!
I've combined both, since this is really easier to handle in Perl.
Maybe we should put this up under tools/?
#!/usr/bin/perl
sub usage
{
die "usage: defect raw-device-name [Glist|Plist]\n";
}
#
# Main
#
&usage if $#ARGV < 0 || $#ARGV > 1;
$ENV{'PATH'} = "/bin:/usr/bin:/sbin:/usr/sbin";
$dev = $ARGV[0];
# generic device name given?
if ($dev =~ /^[so]d\d+$/) { $dev = "/dev/r${dev}.ctl"; }
#
# Select what you want to read. PList include the primary defect list
# from the factory. GList is grown defects only.
#
if ($#ARGV > 0) {
if ($ARGV[1] =~ /^[Gg]/) { $glist = 1; $plist = 0; }
elsif ($ARGV[1] =~ /^[Pp]/) { $glist = 0; $plist = 1; }
else { &usage; }
} else {
$glist = 1; $plist = 0;
}
open(PIPE, "scsi -f $dev " .
"-c '{ Op code} 37 0 0:3 v:1 v:1 5:3 0 0 0 0 4:i2 0' $plist $glist " .
"-i 4 '{ stuff } *i2 { Defect list length } i2' |") ||
die "Cannot pipe from scsi(8)\n";
chop($amnt = <PIPE>);
close(PIPE);
if ($amnt == 0) {
print "There are no defects (in this list).\n";
exit 0;
}
print "There are " . $amnt / 8 . " defects in this list.\n";
$amnt += 4;
open(PIPE, "scsi -f $dev " .
"-c '{ Op code} 37 0 0:3 v:1 v:1 5:3 0 0 0 0 v:i2 0' $plist $glist " .
"$amnt -i $amnt - |") ||
die "Cannot pipe from scsi(8)\n";
read(PIPE, $buf, 4); # defect list header
print "cylinder head sector\n";
while(read(PIPE, $buf, 8)) {
($cylhi, $cyllo, $head, $sec) = unpack("CnCN", $buf);
printf "%8u %4u %6u\n", $cylhi*65536+$cyllo, $head, $sec;
}
close(PIPE);
--
cheers, J"org
joerg_wunsch@uriah.heep.sax.de -- http://www.sax.de/~joerg/ -- NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Mutt.19970201203130.j>
