Jun 14

[原]寻找未创建为PV的硬件设备 不指定

linuxing , 15:59 , 编程 » 示例 , 评论(0) , 引用(0) , 阅读(30726) , Via 本站原创 | |


三、脚本2
上面的脚本直接对比pvscan和fdisk -l的结果。但有时候,我们并不在现场处理,这时,可把命令保存到文件中,用下面的脚本来对比:
引用
#!/usr/bin/perl -w
#Date: 2008-06-11
#Author: Linuxing
#Email: linuxing#linuxfly.org

# 错误显示函数
sub printerr() {
print "usages:\n";
print "$0 pvscan.log fdisk-l.log\n";
}

# 如果参数不满足要求,则退出,并显示用法
if (@ARGV < 2) {
  print "$0: Not enough arguments\n";
  &printerr;
  exit 125;
  
}

# 打开参数指定的两个信息文件:pvscan和fdisk -l的结果
if ( ! open PVSCANLOG,$ARGV[0]){
  die "$!: \"$ARGV[0]\"";
}
if ( ! open FDISKLOG,$ARGV[1]){
  die "$!: \"$ARGV[1]\"";
}

# 对比pvscan和fdisk的信息
my %pv_vg;
while (<PVSCANLOG>) {
  if (/.*"(.*)".*"(.*)".*/ or /.*"(.*)".*(no VG).*/) {
  $pv_vg{$1} = $2;
  }
}

# 显示已经创建为PV,但未属于任何VG的设备
while (($key,$value) = each %pv_vg)
{
  if ($value eq "no VG") {
    print "$key => $value\n";
  }
}

# 显示还没创建为PV的空闲设备
print "Free Disk is:\n";
while (<FDISKLOG>) {
  if (/Disk (.*):\s+(\d+)\sMB,.*/) {
    unless (exists $pv_vg{$1}){
      print "$1: $2 MB\n";
    }
  }
}

# 显示VG包括那些PV设备
my %vg_contain;
while (($key,$value) = each %pv_vg)
{
  if ($value ne "no VG") {
    $vg_contain{$value} .= $key." ";
  }
}
print "VG contains below PV:\n";
while (($key,$value) = each %vg_contain)
{
  print "$key => $value\n";
}

用法:

$ ./select_pv_by_log.pl pvscan.log fdisk-l.log

其中,pvscan.log和fdisk-l.log分别是运行pvscan和fdisk -l命令后保存的结果。
内文分页: [1] [2]
Tags: ,
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]