lvm2与powerpath的Found duplicate PV问题

HP的DL580,OS是Redhat Enterprise Linux 4.5,接EMC CX700的存储,在安装了powerpath多路径软件后,系统能正确的识别出路径合并后的/dev/emcpower*设备。但是如果用lvm2来管理这些设备,会发现无论是创建还是查看pv/vg/lv都会报一堆的重复pv的问题:

#pvs
Found duplicate PV ia0wzQ0pQ8J5H4Hu8hsubKjmx0T7bCNf: using /dev/emcpowert not /dev/sdc
Found duplicate PV OYmrYleEE05bGKm0pBWT60afWjl827a6: using /dev/sde not /dev/emcpowers
Found duplicate PV 0MWBXuho29Gnr5WKm3v0sZbXun3Mso2x: using /dev/sdg not /dev/emcpowerr

这个还可以勉强忍受,最头痛的是pvcreate后的名字,也有些是/dev/emcpower*,有些是/dev/sd*,这时候你要在这些pv上创建vg,要从不同的raid组来选取lun,也就是想知道pv对应lun的关系的时候,就一个头两个大。

PV VG Fmt Attr PSize PFree

/dev/emcpowerk vg_u03 lvm2 a- 167.03G 2.34G
/dev/emcpowerl vg_u01 lvm2 a- 167.03G 2.34G
/dev/sdaa vg_log lvm2 a- 127.41G 160.00M
/dev/sdab vg_log lvm2 a- 127.41G 160.00M

没有办法,只有通过修改/etc/lvm/lvm.conf中的过滤规则来强行让lvm略过非powerpath设备:

filter = [ “a/cciss*$/” “a/emcpower.*/” “r/.*/” ]

上面这个过滤串的意思是,接受(Accept)所有路径中包含cciss和emcpower的设备,拒绝(Reject)所有其他的设备。由于是HP的pc server,其本地硬盘的设备在os中的路径是/dev/cciss/cndn。假如是其他系统,本地盘是传统的sd或者hd的,则需要做相应修改。sd比较麻烦点,因为duplicate出来的也是/dev/sd*,所以需要确认哪些是需要accept的本地硬盘,哪些是需要reject的重复pv。另外,lvm识别出来的设备可以在/etc/lvm/.cache中查看,也可以根据这个文件的内容来制定过滤规则。

整个世界终于清净了

#pvs
PV VG Fmt Attr PSize PFree
/dev/emcpowera lvm2 — 100.24G 100.24G
/dev/emcpoweraa lvm2 — 100.24G 100.24G
/dev/emcpowerab lvm2 — 100.24G 100.24G

Redhat上安装Perl DBD::mysql驱动

打算熟悉下perl,自然主要用于数据库管理和监控方面的,所以需要连接数据库。Perl连接数据库可以通过DBI模块和相应数据库的DBD驱动,上一篇记录了DBI模块的安装,这里记录下DBD::mysql驱动的安装。可以从CPAN下载相应DBD驱动

安装过程很简单,下载解压:

gzip -d DBD-mysql-4.006.tar.gz
tar xvf DBD-mysql-4.006.tar

然后进入DBD-mysql-4.006目录,执行:

perl Makefile.PL
make
make test
make install

检查已经安装的Perl模块:

# ./perl-module.pl
DBD::mysql
DBI
Perl

安装DBD::mysql需要mysql_config,包含在Headers and libraries安装包中(MySQL-devel-community-5.1.23-0.rhel4.i386.rpm),并且PATH环境变量中必须包含mysql_config所在的路径。否则在执行perl Makefile.PL生成makefile的时候会报错:

Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 76.

Cannot find the file ‘mysql_config’! Your execution PATH doesn’t seem
not contain the path to mysql_config. Resorting to guessed values!
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 466.

通过调用DBI->available_drivers()函数可以查看当前系统中已经安装好的所有驱动。安装好DBI和DBD::mysql后,就可以访问MySQL数据库啦,首先在test库中创建一个table:

create table test(id int,name varchar(30))

然后执行下面的Perl脚本插入一条数据并且查询得到结果:

#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect(“DBI:mysql:database=test;host=localhost”,”NinGoo”,”password”, {‘RaiseError’ => 1});
my $rows = $dbh->do(“INSERT INTO test (id, name) VALUES (1, ‘NinGoo’)”);
my $query = $dbh->prepare(“SELECT name FROM test”);
$query->execute();
while(my $rs = $query->fetchrow_hashref()) {
print “$rs->{‘name’}\n”;
}

Redhat上安装Perl DBI模块

打算熟悉下perl,自然主要用于数据库管理和监控方面的,所以需要连接数据库。Perl连接数据库需要安装DBI模块和相应数据库的DBD驱动,Linux上默认安装的Perl是没有该模块的。可以从CPAN下载DBI模块进行安装。

安装过程很简单,下载解压:

gzip -d DBI-1.604.tar.gz
tar xvf DBI-1.604.tar

然后进入DBI-1.604目录,执行:

perl Makefile.PL
make
make test
make install

以下脚本可以用来检测系统中已经安装的Perl模块:

#!/usr/bin/perl
use ExtUtils::Installed;

my $inst = ExtUtils::Installed->new();
print join “\n”,$inst->modules();

安装完DBI后执行该脚本的结果如下:

# ./perl-module.pl
DBI
Perl

DBI的文档可以通过perldoc查看:

#perldoc DBI

无觅相关文章插件,快速提升流量