The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/local/bin/perl -w

use strict;
use Solaris::Kstat;
use Solaris::MapDev qw(:ALL);

my $ks = Solaris::Kstat->new();
my %mod_to_name = (sd => "Disk", ssd => "Disk", # broken kstats! dad => "Disk",
                   atapicd => "Disk", st => "Tape", fd => "Floppy");
foreach my $mod (qw(sd ssd dad atapicd st fd))
   {
   my $err = "${mod}err";
   foreach my $i (sort(keys(%{$ks->{$err}})))
      {
      my $inst = "${mod}${i}";
      my $sd = inst_to_dev($inst);
      my $info = $ks->{$err}{$i}{"$inst,err"};
      my $prod = $info->{Product};
      $prod =~ s/Revision//i;
      my $vendor = $info->{Vendor};
      $vendor =~ s/\s+$//;
      print("$mod_to_name{$mod} $sd ($inst) ",
            "$vendor $prod Rev $info->{Revision} ",
            "Serial $info->{'Serial No'}\n");
      if ($mod_to_name{$mod} eq "Disk")
         {
         print("   $info->{Size} Sectors $info->{Heads} Heads ",
               "$info->{RPM} RPM\n");
         }
      
      }
   }
__END__

=head1 NAME

show_devs - Show information about connected disks and tapes

=head1 SYNOPSIS

show_devs

=head1 DESCRIPTION

This simple script dumps information about all the disks and tapes currently
known by the OS.

=head1 EXAMPLES

 $ show_devs
 Disk c0t0d0 (sd0) SEAGATE ST34371W SUN4.2G Rev 7462 Serial 9710911499
    4292075520 Sectors 16 Heads 5400 RPM
 Disk c0t1d0 (sd1) TOSHIBA XM5701TASUN12XCD Rev 0297 Serial 01/29/97
    1.84467440651196e+19 Sectors 0 Heads 0 RPM
 Disk c0t9d0 (sd8) SEAGATE ST15230W SUN4.2G Rev 0738 Serial 00377197
    4292075520 Sectors 16 Heads 5400 RPM
 Disk c0t10d0 (sd9) SEAGATE ST15230W SUN4.2G Rev 0738 Serial 00393458
    4292075520 Sectors 16 Heads 5400 RPM
 Tape rmt/1 (st2) ARCHIVE Python 02635-XXX Rev 567A Serial 01/29/97
 $ 

=head1 AUTHOR

Alan Burlison, <Alan.Burlison@uk.sun.com>

=head1 SEE ALSO

L<kstat(3K)> L<Solaris::Kstat(3)> L<Solaris::MapDev>

=cut