Jun
14
三、脚本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";
}
#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命令后保存的结果。
