我有一个设置,其中由FibreChannel连接的一个SAN存储可由两个主机(在块级别)访问。 我想在存储上创build两个lvm2物理卷: pv1和pv2 ,现在分别是两个卷组的唯一成员: vg1和vg2 。 我的主机应该独占使用它们,并且“不要碰其他”。
由于两台主机都可以看到SAN,所以两者都可以看到lvm结构。 (我testing过:在一台主机上创build逻辑卷,结果是在/ dev / mapper下可见)。 我想确保host1只会修改vg1而host2只会修改vg2来防止数据损坏。
是否保证当我没有明确执行任何lvm命令时,lvm守护进程和内核不会重新洗牌区段/优化属于另一个主机的卷组,从而破坏它?
不,只要在两个系统上都可以看到VG,就不会损坏任何东西,但是在两个主机上都可以看到VG是危险的(由于某些过程,脚本或人类可能会搞砸并select错误的磁盘来操作上)。 您可以将其过滤出来,以便在执行PV扫描时,每台主机都会忽略不应触及的LUN。 因此,每次只能检测一个VG。 这在你的场景和其他许多方面很有用。
另外(在我深入研究之前),您可能会考虑在SAN级别处理这些问题,并将这些LUN分成不同的目标。 这样一来,基础设备设备从来就不会被“错误的”启动程序占用。 我会推荐这个选项,除非有一个真正的理由,你希望两个主机上同时显示LUN。
在此之前,我们正在研究在LVMconfiguration中创buildfilter。 这是通过一系列正则expression式来控制,以限制“pvscan”检测某些块设备(或块设备类)。 我们做这个改变的文件是/etc/lvm/lvm.conf
在这个configuration中,你会发现(大约一半的时候)一行表示“global_filter =”的行。 这个文件应该给出一些关于如何使用这个的提示,但是让我们回顾一下一些概念。
首先,您应该根据不会更改的path来允许和限制块设备。 不要使用/ dev / sda之类的东西来select磁盘。 这可以改变,你的filter将不可靠。 相反,使用/ dev / disk / by-id /或/ dev / disk / by-path /之类的东西。 这两个目录都包含使用有关LUN的实际信息来标识它们的符号链接。 by-id使用SCSI ID,而by-path使用物理主机path和总线types。 尽可能使用by-id,因为这是最可靠的。 由于这些是上述目录中的符号链接,因此可以使用'ls -l'将它们与它们对应的/ dev / sd *path进行匹配。
使用该by-idpath,您可以创build一个全局LVM筛选器,以便在将来的扫描中扫描拒绝该不受欢迎的块设备。 在构build这一行时,首先放入允许条目(用“a”表示),然后放弃条目(用“r”表示)。 这个filter的例子可能是这样的:
global_filter=[ "a|.*|","r|/dev/disk/by-id/id-of-unwanted-disk.*|" ]
这些声明用方括号括起来。 语句由引号封装,并用逗号分隔。 条被用来打开和closures包含斜线的语句(就像这样做)。 每个正则expression式标准中,在该拒绝语句中的星号之前加上一个点来定义一个通配符。 这一行说:“除了这一个驱动器,还有其他所有可能来自这个驱动器的分区。 这个拒绝驱动器将是您不希望LVM看的LUN。
当你保存这个编辑时,用“pvscan”进行testing。 如果这样,你想要的,你不受欢迎的VG将不再显示。 在另一台主机上做同样的事情,你自己有一个安全的filter。
但严重的是,如果可以的话,使用iSCSI目标来隔离这些LUN。 这很容易,并且不需要两台主机上的configuration都能成功。