Jun 14

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

linuxing , 15:59 , 编程 » 示例 , 评论(0) , 引用(0) , 阅读(30723) , Via 本站原创 | |
    在使用lvm的系统中,首先需要把物理设别创建为PV,然后才能组成VG及创建LV逻辑盘。对于盘符不多的情况下,这通常不是问题,只要一一对应寻找即可。但这次在一个项目中,遇到的情况是:
引用
有三个系统共享一个盘柜,盘柜中划分了约30个LUN映射到系统中。由于不同系统连接到盘柜的路径不同,导致同一个LUN设备,在不同系统上其设备号并不相同。例如:在A系统上是/dev/sdx,而在B系统上则是/dev/sdy。

    这样,万一我需要在原有的系统上增加PV,需逐一手动匹配物理设备,并且不同系统上还需要匹配多次,相当麻烦。所以,我写了下面的脚本协助寻找那些仍未创建为PV的设备。

一、系统环境
操作系统:红旗 DC Server 4.1 for x86
※需要指出的是,5.0以后的版本使用udev进行盘符分派,可利用UUID创建udev规则,以让物理设别对应唯一的设备号,这时问题就不大了。

二、脚本
第一次用perl写脚本,不妥之处,请指出:
引用
#!/usr/bin/perl -w
#Date: 2008-06-11
#Author: Linuxing
#Email: linuxing#linuxfly.org

# 对比pvscan和fdisk的信息
my %pv_vg;
foreach (`pvscan 2>&1`) {
  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";
foreach (`fdisk -l 2>&1`) {
  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_command.pl
这些是已经创建为PV,但不属于任何VG的设备:
/dev/sdaj => no VG
/dev/sdak => no VG
下面是空闲的磁盘,也就是还没有创建为PV的:
Free Disk is:
/dev/sdaw: 7384 MB
/dev/sdax: 7384 MB
/dev/sdal: 7384 MB
/dev/sdam: 7384 MB
/dev/sdan: 7384 MB
/dev/sdao: 7384 MB
/dev/sdap: 7384 MB
/dev/sdaq: 7384 MB
/dev/sdar: 7384 MB
/dev/sdas: 7384 MB
/dev/sdat: 7384 MB
/dev/sdau: 7384 MB
/dev/sdav: 7384 MB
下面是每个VG包括的PV:
VG contains below PV:
vgdlbx => /dev/sdo /dev/sdq /dev/sdai /dev/sdp /dev/sdn /dev/sds /dev/sdr
vghd => /dev/sdk /dev/sdm /dev/sdj /dev/sdh /dev/sdi /dev/sdl /dev/sdg
vgxg => /dev/sdd /dev/sde /dev/sdab /dev/sdc /dev/sdt /dev/sdaf /dev/sdad /dev/sdx /dev/sdac /dev/sdf /dev/sdu /dev/sdz /dev/sdae /dev/sdag /dev/sdaa /dev/sdy /dev/sdb /dev/sdv /dev/sdw /dev/sdah

PS:因没有环境,该脚本未考虑到双HBA卡下冗余的问题,待以后有机会再解决吧。
内文分页: [1] [2]
Tags: ,
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]