From a8201c4df0fc668d78267cb701fcee7eaf884f69 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Fri, 24 Aug 2012 14:24:56 +0000 Subject: [PATCH] overview of disks on system with zfs pool/vdev info git-svn-id: svn://svn.rot13.org/sysadmin-cookbook@298 191e9f34-6774-4a6d-acfc-7664dacd4a2a --- recepies/zfs/disks.pl | 45 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 recepies/zfs/disks.pl diff --git a/recepies/zfs/disks.pl b/recepies/zfs/disks.pl new file mode 100755 index 0000000..112701b --- /dev/null +++ b/recepies/zfs/disks.pl @@ -0,0 +1,45 @@ +#!/usr/bin/perl +use warnings; +use strict; +use autodie; +use Data::Dump qw(dump); + +my ($before, $delimiter, $after) = ( ''=>' | '=> "\n" ); # double space for display + ($before, $delimiter, $after) = ( '"'=>'","'=> '"'."\n" ) if @ARGV; + +my $in_pool; +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+)/; +} + +warn "# in_pool ",dump($in_pool); + +open(my $lsscsi, '-|', 'lsscsi --size -v'); + +print $before, join($delimiter, qw(id type name dev size zfs path) ), $after; + +while(my $line = <$lsscsi>) { + chomp($line); +# warn "## $line\n"; + + 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; + } + + my $v = <$lsscsi>; + chomp($v); + push @l, $1 if $v =~ m/\[(.+)\]/; + print $before,join($delimiter,@l),$after; +}; -- 2.20.1