/[sysadmin-cookbook]/recepies/zfs/disks.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /recepies/zfs/disks.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 298 by dpavlin, Fri Aug 24 14:24:56 2012 UTC revision 300 by dpavlin, Sat Aug 25 14:13:11 2012 UTC
# Line 7  use Data::Dump qw(dump); Line 7  use Data::Dump qw(dump);
7  my ($before, $delimiter, $after) = ( ''=>' | '=> "\n" ); # double space for display  my ($before, $delimiter, $after) = ( ''=>' | '=> "\n" ); # double space for display
8     ($before, $delimiter, $after) = ( '"'=>'","'=> '"'."\n" ) if @ARGV;     ($before, $delimiter, $after) = ( '"'=>'","'=> '"'."\n" ) if @ARGV;
9    
10  my $in_pool;  my $zfs;
11  open(my $zpool, '-|', 'zpool status');  open(my $zpool, '-|', 'zpool status');
12  my $name = 'zfs';  my $name = 'zfs';
13  my $vdev = '';  my $vdev = '';
14  while(<$zpool>) {  while(<$zpool>) {
15          chomp;          chomp;
16          $name = $1 if /^\s+pool:\s(\S+)/;          $name = $1 if /^\s+pool:\s(\S+)/;
17          $vdev = $1 if /^\s+(raid\S+|spare)/;          $vdev = $1 if /^\s+(raid\S+|spare|log|cache)/;
18          $in_pool->{$1} = join(' ', $name, $vdev) if /^\s+(sd\S+)/;          $zfs->{$1} = join(' ', $name, $vdev) if /^\s+(sd\S+)/;
19  }  }
20    warn "# zfs ",dump($zfs);
21    
22  warn "# in_pool ",dump($in_pool);  my $md;
23    open(my $mdstat, '<', '/proc/mdstat');
24    while(<$mdstat>) {
25            chomp;
26            if ( m/(md\d+)\s+:\s+active\s+(\S+)\s+(.+)/ ) {
27                    my ( $nr, $raid ) = ( $1, $2 );
28                    foreach my $dev ( split(/\s+/, $3) ) {
29                            my $d = $1 if $dev =~ m{(sd\w+)\d+};
30                            $md->{$d} = "$nr $raid $dev";
31                    }
32            }
33    }
34    warn "# md ",dump($md);
35    
36  open(my $lsscsi, '-|', 'lsscsi --size -v');  open(my $lsscsi, '-|', 'lsscsi --size -v');
37    
38  print $before, join($delimiter, qw(id type name dev size zfs path) ), $after;  print $before, join($delimiter, qw(id type name dev size pert_of path) ), $after;
39    
40  while(my $line = <$lsscsi>) {  while(my $line = <$lsscsi>) {
41          chomp($line);          chomp($line);
# Line 31  while(my $line = <$lsscsi>) { Line 44  while(my $line = <$lsscsi>) {
44          my @l = $line =~ m{(^\S+)\s+(\S+)\s+(.+)\s+(\S+)\s+(\S+)};          my @l = $line =~ m{(^\S+)\s+(\S+)\s+(.+)\s+(\S+)\s+(\S+)};
45    
46          my $dev = $l[3];          my $dev = $l[3];
47  #       warn "# dev $dev\n";          $dev =~ s{/dev/}{};
48          if ( $dev =~ s{/dev/}{} ) {          warn "# dev $dev\n";
49                  push @l, exists $in_pool->{$dev} ? $in_pool->{$dev} : '-';  
50          } else {          push @l,
51                  push @l, $dev;                  exists $zfs->{$dev} ? $zfs->{$dev} :
52          }                  exists $md->{$dev} ? $md->{$dev} :
53                    '-';
54    
55          my $v = <$lsscsi>;          my $v = <$lsscsi>;
56          chomp($v);          chomp($v);

Legend:
Removed from v.298  
changed lines
  Added in v.300

  ViewVC Help
Powered by ViewVC 1.1.26