查找没有assign到client lpar的disk

1795阅读 0评论2012-09-03 niannian
分类:Python/Ruby

从SAN map到vios的一些盘,由于种种原因,有时候并未assign到lpar,也未做其他用途,久之成为无用的盘,耗费
了storage的空间,需要把它们找出来,并删除。
这个是找出它们的脚本


  1. #! /usr/bin/perl

  2. my @lsdev_rs = `/usr/ios/cli/ioscli lsdev -type disk | grep -i mpio | awk -F " " '{print \$1}'`;
  3. my @lspv_rs = `lspv | awk -F " " '{print \$1}'`;
  4. my @lsmap_rs = `/usr/ios/cli/ioscli lsmap -all | grep -i "backing device" | awk -F " " '{print \$3}' | sed -n '/hdisk/p'`;

  5. #print @lsmap_rs;

  6. sub non_intersect{
  7.         #my ($array_ref1, $aray_ref2) = @_;
  8.         my $array_ref1 = shift;
  9.         my $array_ref2 = shift;
  10.         my %all_hash = ();
  11.         my @non_intersec;
  12.         foreach $em ( @$array_ref1, @$array_ref2 ) {
  13.                 $all_hash{$em}++;
  14.         }

  15.         foreach $em ( keys %all_hash ) {
  16.                 if ($all_hash{$em} == 1){
  17.                         push @non_intersec, $em;
  18.                 }
  19.         }

  20.         return \@non_intersec;

  21. }

  22. my $disklist_ref = non_intersect(\@lsdev_rs, \@lsmap_rs);

  23. my %disk_uid = ();
  24. foreach my $em ( @$disklist_ref ) {
  25.         chomp $em;
  26.         my $uid = `lsattr -El $em -a unique_id | awk -F " " '{print \$2}'`;
  27.         $uid = substr( $uid, 5, 32 );

  28.         $disk_uid{$em} = $uid;
  29. }


  30. foreach $k ( keys %disk_uid ){
  31.         print "$k:$disk_uid{$k}\n";
  32. }

结果示例:
# ./detectUselessDisk.pl
hdisk5:600507680280838EC8000000000008E5
hdisk10:600507680280838EC80000000000089D
hdisk8:600507680280838EC80000000000089C
hdisk6:600507680280838EC800000000000899
hdisk3:600507680280838EC800000000000728
hdisk7:600507680280838EC80000000000089B
上一篇:export PERL_LWP_SSL_VERIFY_HOSTNAME=0
下一篇:hadoop环境搭建几个注意点