X-Git-Url: http://git.rot13.org/?p=sysadmin-cookbook;a=blobdiff_plain;f=recepies%2Fzfs%2Fdisks.pl;h=c33a4c0f1736557a1e8f87aad094eb818b03ae65;hp=112701b014d81d3575a35648d2d8503e8f623126;hb=b76a5bcd3f81ed61337bbd78b190ec46caffcfd0;hpb=a3535efb638179b9013252a380fe689f3ecb130f diff --git a/recepies/zfs/disks.pl b/recepies/zfs/disks.pl index 112701b..c33a4c0 100755 --- a/recepies/zfs/disks.pl +++ b/recepies/zfs/disks.pl @@ -7,22 +7,35 @@ use Data::Dump qw(dump); my ($before, $delimiter, $after) = ( ''=>' | '=> "\n" ); # double space for display ($before, $delimiter, $after) = ( '"'=>'","'=> '"'."\n" ) if @ARGV; -my $in_pool; +my $zfs; open(my $zpool, '-|', 'zpool status'); my $name = 'zfs'; my $vdev = ''; while(<$zpool>) { chomp; $name = $1 if /^\s+pool:\s(\S+)/; - $vdev = $1 if /^\s+(raid\S+|spare)/; - $in_pool->{$1} = join(' ', $name, $vdev) if /^\s+(sd\S+)/; + $vdev = $1 if /^\s+(raid\S+|spare|log|cache)/; + $zfs->{$1} = join(' ', $name, $vdev) if /^\s+(sd\S+)/; } +warn "# zfs ",dump($zfs); -warn "# in_pool ",dump($in_pool); +my $md; +open(my $mdstat, '<', '/proc/mdstat'); +while(<$mdstat>) { + chomp; + if ( m/(md\d+)\s+:\s+active\s+(\S+)\s+(.+)/ ) { + my ( $nr, $raid ) = ( $1, $2 ); + foreach my $dev ( split(/\s+/, $3) ) { + my $d = $1 if $dev =~ m{(sd\w+)\d+}; + $md->{$d} = "$nr $raid $dev"; + } + } +} +warn "# md ",dump($md); open(my $lsscsi, '-|', 'lsscsi --size -v'); -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; while(my $line = <$lsscsi>) { chomp($line); @@ -31,12 +44,13 @@ while(my $line = <$lsscsi>) { my @l = $line =~ m{(^\S+)\s+(\S+)\s+(.+)\s+(\S+)\s+(\S+)}; my $dev = $l[3]; -# warn "# dev $dev\n"; - if ( $dev =~ s{/dev/}{} ) { - push @l, exists $in_pool->{$dev} ? $in_pool->{$dev} : '-'; - } else { - push @l, $dev; - } + $dev =~ s{/dev/}{}; + warn "# dev $dev\n"; + + push @l, + exists $zfs->{$dev} ? $zfs->{$dev} : + exists $md->{$dev} ? $md->{$dev} : + '-'; my $v = <$lsscsi>; chomp($v);