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 |
|
|
}; |