在使用lvm的系统中,首先需要把物理设别创建为PV,然后才能组成VG及创建LV逻辑盘。对于盘符不多的情况下,这通常不是问题,只要一一对应寻找即可。但这次在一个项目中,遇到的情况是:
这样,万一我需要在原有的系统上增加PV,需逐一手动匹配物理设备,并且不同系统上还需要匹配多次,相当麻烦。所以,我写了下面的脚本协助寻找那些仍未创建为PV的设备。
一、系统环境
操作系统:红旗 DC Server 4.1 for x86
※需要指出的是,5.0以后的版本使用udev进行盘符分派,可利用UUID创建udev规则,以让物理设别对应唯一的设备号,这时问题就不大了。
二、脚本
第一次用perl写脚本,不妥之处,请指出:
#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";
}
脚本下载:
三、运行结果
这些是已经创建为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卡下冗余的问题,待以后有机会再解决吧。
解决IBM x460网络ping故障
双机双盘柜failover配置说明
IBM x366上安装红旗DC Server 4.1 for x86_新版
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/linux/112303.html