/[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

Annotation of /recepies/zfs/disks.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 298 - (hide annotations)
Fri Aug 24 14:24:56 2012 UTC (11 years, 8 months ago) by dpavlin
File MIME type: text/plain
File size: 1046 byte(s)
overview of disks on system with zfs pool/vdev info

1 dpavlin 298 #!/usr/bin/perl
2     use warnings;
3     use strict;
4     use autodie;
5     use Data::Dump qw(dump);
6    
7     my ($before, $delimiter, $after) = ( ''=>' | '=> "\n" ); # double space for display
8     ($before, $delimiter, $after) = ( '"'=>'","'=> '"'."\n" ) if @ARGV;
9    
10     my $in_pool;
11     open(my $zpool, '-|', 'zpool status');
12     my $name = 'zfs';
13     my $vdev = '';
14     while(<$zpool>) {
15     chomp;
16     $name = $1 if /^\s+pool:\s(\S+)/;
17     $vdev = $1 if /^\s+(raid\S+|spare)/;
18     $in_pool->{$1} = join(' ', $name, $vdev) if /^\s+(sd\S+)/;
19     }
20    
21     warn "# in_pool ",dump($in_pool);
22    
23     open(my $lsscsi, '-|', 'lsscsi --size -v');
24    
25     print $before, join($delimiter, qw(id type name dev size zfs path) ), $after;
26    
27     while(my $line = <$lsscsi>) {
28     chomp($line);
29     # warn "## $line\n";
30    
31     my @l = $line =~ m{(^\S+)\s+(\S+)\s+(.+)\s+(\S+)\s+(\S+)};
32    
33     my $dev = $l[3];
34     # warn "# dev $dev\n";
35     if ( $dev =~ s{/dev/}{} ) {
36     push @l, exists $in_pool->{$dev} ? $in_pool->{$dev} : '-';
37     } else {
38     push @l, $dev;
39     }
40    
41     my $v = <$lsscsi>;
42     chomp($v);
43     push @l, $1 if $v =~ m/\[(.+)\]/;
44     print $before,join($delimiter,@l),$after;
45     };

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26