From b76a5bcd3f81ed61337bbd78b190ec46caffcfd0 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sat, 25 Aug 2012 14:13:11 +0000 Subject: [PATCH] report md devices and zfs spare cache and log drives git-svn-id: svn://svn.rot13.org/sysadmin-cookbook@300 191e9f34-6774-4a6d-acfc-7664dacd4a2a --- recepies/zfs/disks.pl | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) 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); -- 2.20.1