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