现在的位置: 首页 > 综合 > 正文

AIX上vg ,pv,filesystem原理基础(摘自走入IBM小型机世界)

2013年09月18日 ⁄ 综合 ⁄ 共 8240字 ⁄ 字号 评论关闭

 我们在使用PV之前必须将其“加入”到Volume Group(VG,卷组)中,或直接在上面创建卷组。当PV从属于一个VG后,其空间被分为许多大小相同的最小分配单元,每一块被称为一个Physical Partitions(PP 物理分区)。这如建筑时将各种不规整的石头 切成同样大小“砖头”同一个样,目的是以后建筑的过程中可以按照需要取用“砖头”堆砌,而不会受到“石头”形状、大小的限制。因此,VG中的 PP大小都相等,无论原有磁盘大小多少。我们可以继续在VG上创Logical Volume(LV,逻辑卷),这是留给程序使用的设备,可以跨多个磁盘(即 PV),但是不能跨越VG。创建逻辑卷时需要给逻辑卷指定名称和大小,大小的单位是PP的大小,即最少要占用1个PP大小的空间,最多
没有特别的限制。但在默认情况下,每个LV可能有256或512(根据不同操作系统版本)个PP的限制,不过这个限制是软限制,可以任意修改。

组成逻辑卷的真正单位是PP,但被称为LP,即Logical  Partitions(LP,逻辑分区),引入额外的LP的原因是镜像。AIX 正是通过PP和LP之间的倍数对应关系,来实现数据镜像的。每个LP根据镜像要求,对应到1-3个PP的物理空间上,对应1代表没有镜像,2表示一份镜像,3表示两份镜像。在AIX中,逻辑卷被当作一种特殊的块设备,在/dev/目录下能看到对应的设备名,例如:
/dev/rmylv ->charact(字符) 类型的设备名
/dev/mylv ->block (块) 类型的设备名

逻辑卷可以直接被应用程序使用,这种使用方式叫做裸设备方式;也可以在逻辑卷上创建文件系统,然后按照普通文件操作方式使用。

当AIX识别到一个新PV时,先检查它是否有PVID。PVID是分配给每个PV的唯一识别号,记录在磁盘的操作系统保留区内,如果AIX已经(或者曾经)识别了这个磁盘,则会在ODM中也记录一份PVID。如果旧磁盘被移走,AIX中对应的设备(hdisk 会变成defined状态。但hdisk设备号保留,当磁盘“还”回来,使用cfgmgr会重新看到这一hdisk变为available状态。如果它是全新的磁盘,没有PVID,AIX只能看到磁盘设备available,而PVID一项是none。此时对此PV除了在其上创建VG或将其加入到某个已经建立的VG中、设置一个新的PVID、从系统中删除此PV之外,不能进行其它操作。而创建VG和加入VG动作将自动给这个 PV分配新的PVID 。重新置PVID命令有两个:
#chdev -l hdiskx -a pv=yes------>强制hdiskx分配一个新的PV ID
#chdev -l hdiskx -a pv=clear ------>强制清除hdiskx已经使用的PV  ID

注意:
系统中管理PV完全依靠PV ID,尽管有诸如hdiskx这样的设备号可用,但是操作系统对于磁盘的识别仍然是依靠PVID的,也就是说hdisk 数字可能会变,即使对于同一台小型机也是如此,而PVID永远不会改变,即使拿到另一台机器上PVID也不变(直到执行了以上可以改变PVID的操作)。保持PVID不变,靠PV ID识别共享磁盘也是双击热备份的基础。从另一个方面来讲,如果你用上面的命令改变了 PV ID,操作系统就认为原来的磁盘消失了,而且再也不能找回来。
更不巧的是如果原有的PV还属于某个VG,那么这个VG再也发现不了它原来的成员盘(PVID已经改变),这个盘上的数据就无法找回,虽然磁盘和数据依然在那里。修复这个问题只能直接用底层的ODM操作,已经超出了本书的范围,有兴趣的朋友可以自己研究下相关的材料。

VG被激活后才能被访问(读/写及察看VG信息等操作),同时此VG也被执行激活命令的操作系统映像“锁住”,不允许别的操作系统映像访问(包括执行激活命令)。激活与释放VG的命令分别是:
#varyonvg vg_name     激活此VG,不允许别的操作系统映像访问
#varyoffvg vg_name   释放此VG,允许别的操作系统映像访问

但要注意,这个"锁"只是逻辑的锁(在磁盘上做一个标记),而且当VG被激活后,如果发生机器突然宕机,操作系统可能没有能执行磁盘解锁的命令(清除标志位),则其它机器就无法再激活此卷组了!需要执行带-f参数的强制命令激活此卷组:
#varyonvg -f vg_name
有时甚至需要使用更底层的命令手工清除锁标志,此命令为lquerypr或pcmquerypr。由于此命令属于底层命令,对于初学者,容易操作不当,导致错误的结果,请谨慎使用。

VGDA(Volume Group Descriptor Area)
把PV加入VG之后才可以使用,一个PV只能属于一个VG(一个VG根据其类型不同可能拥有最多32-1024个PV)。VG中包含哪些PV都写在VG中的一个区域中,这个区域就是VGDA,VGDA中记录了很多VG的重要信息,包括VG中包含的所有PV的PVID。

 

由于VGDA内的信息非常重要,因此VGDA被保存了多份。如果VG中只有一块磁盘( PV ),则在此磁盘上存有两份VGDA;如果VG中有两块磁盘,则第一块磁盘有两份VGDA,第二块磁盘上有一份;如果VG中包含三块或更多的磁盘,则每块磁盘上都有一个VGDA的 copy.完好的VGDA数量与VG中总磁盘数之比被称为Quorum,如果Quorum小于50%,此VG将不能被继续访问(如果已经被激活,则会自动关闭),这样做是为了防止数据被进一步破坏,而等待专业人员修复(这是基于这样一种设计理念:如果可能发生危害数据的操作,什么都不做的结果远远好于人有该操作为所欲为)。由于在每块磁盘上都至少有一份VGDA,所以在一个新小型机上,只要给出位置VG中的一块磁盘,就可以正确识别出全部VG信息,并“注册”到新的小型机上,这个过程叫做import,命令是:
#importvg  -y vg_name hdiskx
其中vg_name是你希望的VG名,hdiskx是此VG中任一磁盘。由于在执行importvg命令的时候可以自定义VG名,因此系统中并没有更改VG名称的命令,如果你想改VG的名称,则需要先执行exportvg命令(把此VG在系统中的定义删除掉,再用新名字importvg进来 )
反之,如果想把某个VG的信息从一台小型机上删除,则需要执行
#exportvg vg_name
此操作并没有对磁盘做任何操作,磁盘上的数据依然存在,包括VGDA里面的内容。此命令只是将此VG在AIX操作系统中的定义删除了,任何时候你还可以再重新imprt回来。

在执行importvg 的时候,操作系统可以指定磁盘上读到VG中所有磁盘(PV)的定义(还记得VG中每块磁盘上都至少有一份VGDA,也就是全部VG信息的定义么?),如果操作系统发现此VG的一些磁盘并没有被系统标识到(通过PVID找寻到,即VGDA中包含某个PVID在操作系统中所有磁盘设备上都找不到,可能的原因即包括该磁盘不存在,也可能是PVID没有正确读出来),那么系统将计算Quorum。如果Quorum>50%,则依然可以执行importvg,但会有警告信息;而当Quorum<50%时 ,则不允许import此 VG。

 

关于PVID的思考
AIX操作系统没有提供任何直接的命令可以设定PVID,在创建VG或者将磁盘(PV)添加到VG中时,操作系统会自动根据本机的系列号、当前时间等参数,随即指定一个PVID。因此系统中生成的PVID是不能重复的,当你使用chpv命令清除一块磁盘的PVID之后,除非使用底层磁盘编辑命令,直接写入需要的PVID,否则没有办法恢复磁盘原有的PVID,PVID改变,也就意味着此盘完全是一块新磁盘,系统不会承认此磁盘仍然属于原有的VG。因此在执行更改PVID的操作的时候,一定要知道可能的后果是什么,因为操作往往会导致不可恢复的数据丢失。

普通VG的VGDA 空间大小只能存放32个PV的信息,因此普通VG只支持32个磁盘;如果是big(“大”)VG,VGDA可以存放128个PV的信息;最新的scalable (“扩展”)
VG则可以支持1024个PV。

VGSA( Volume Group Status Area)
VGSA也是VG中的一块重要区域,它由 127个字节组成。每个PV有一个VGSA,每一位代表这个PV的一个PP的状态,最多可以对应1016个PP(128*8=1024位,其中有8位留作他用,剩余1016位),它限制了一个PV最多有1016个PP。

VGSA用每一位代表PP的状态,操作系统向镜像的 PP写数据的时候,难免会有时间差,如果恰好在跟新了一个PP之后,系统出现问题,另一个PP没有更新,此PP与其互为镜像的PP(还记得前面提到的一个LP可能对应1-3个PP吗?对应于同一个LP的几个PP的关系,就是镜像关系)相比没有被跟新,数据较旧,则操作系统通过VGSA将这几个VGSA标记为stale状态。stale状态说明互为镜像的PP数据不一致,要从“好”的镜像PP重新同步数据。当操作系统激活(varyonvg)VG 的时候,会自动检查此VG中所有磁盘上是否有"Stale"的PP,如果有,则自动进行同步;如果VG在正常使用状态,则操作系统不会主动去同步,需要手工执行命令进行同步,可以以PV,LV或者整个VG为单位进行stale的PP同步。在smit vg的菜单可以找到同步VG的选项。

Big VG,Scalable VG
由于VG在创建的时候,就固定了VGDA和VGSA的大小,所以VG所能容纳的磁盘数量和每个磁盘最多的PP数就已经确定:每个VG最多32个PV,总计256个LV(逻辑卷,包括一个保留给LVM内部使用,实际可用是255个)。在BIG VG中,这些限制都被打破,PV扩大到128个,LV扩大到512个。可以直接创建“大”VG,也可以把“小”VG扩大为“大”VG。

如果是Scalable VG则最多支持1024个PV,256(可以在创建的时候设定为最大支持4096)个LV。下面的命令可以创建Scalable的VG(注意在执行的时候还要附带在那个 PV上创建的参数)。
#mkvg -S vg_name
本质上,这几种VG类型并没有什么特别的区别,其差别是系统保留了多大的VGDA空间。显然,要想VG中支持更多的磁盘,VGDA空间越大。把“小”VG转换成“大”VG的过程中,AIX不过是扩大了VGDA的空间。由于VGDA在每个PV的开始,并且必须连续,如果磁盘已经创建了LV,空间被分配,可能会发生VGDA空间无法扩大的情况,更改VG类型操作就会失败。如果VG总体还有剩余空间,此时可以使用迁移PP的命令,将占用未来VGDA空间的PP数据迁移到其它位置。下面是个示范的命令(注意,这是LVM底层命令,最好在测试系统验证后再使用),供读者参考

#lmigratepp -g VGID -p old_PVID -n old_PPNum -P new_PVID -N new_PPNum

VGID可以通过lsvg vg_name获得,old_PVID和new_PVID分别是源盘和目标盘的PVID,old_PPNum是1也就是第一个PP(我们想把第一个PP的数据移走,以便空余位置给VGDA),new_PPNum是new_PVID 对应的某个空闲PP,可以通过 lspv -M hdiskx获得。

Physical Volume (PV)控制
PV有一个参数控制是否允许分配此物理卷上的PP给逻辑卷使用。在扩充、创建LV和创建文件系统的时候,系统会自动分配此VG中可分配的PP,如果希望告诉系统不要使用
某个PV上的空余空间,那就可以通过此参数不允许使用此PV。命令是:
#chpv -a n hdiskx 不使用此PV(hdiskx)
#chpv -a y hdiskx 可以使用此PV(hdiskx)
或者用smit命令的快捷索引:
#smit chpv

VG的一些参数说明
#lsvg vg_name ->察看vg 参数
是否在启动后激活VG:双机共享的VG(磁盘)不能设置自动激活,否则可能引起冲突(一台机器启动后激活VG,并将磁盘锁住;而另一台机器启动的时候,也试图激活此VG,如果不是并行卷,两台机器同时激活同一个VG会产生错误)。反之如果单机使用,则通常要选择自动激活,这样避免了手工操作的麻烦。

 

是否需要Quorum:如果打开Quorum,当VG中不可访问的磁盘数超过一半,系统会强制禁止使用此VG(如果此VG已经被varyon,则自动执行varyoffvg命令)或者不可以激活此卷足(如果此VG还没有被varyon),以防止数据进一步损坏,等待专业人员处理。

 

enhanced-capable模式:
如果安装了 bos.clvm.enh文件集(非缺省安装,需要自己选择),则增加了另一个VG模式参数:enhanced-capable。此模式可以与任何VG类型并存,需要通过smitty chvg 或者chvg 命令修改,此模式是为了配合HACMP(PowerHA)而设置。AIX本身不支持并行文件系统,所以文件系统不能同时被两个AIX内核mount (就是双机同时mount 共享 文件系统),以避免双方同时写入数据,损坏文件系统。HA在进行切换接管的时候,就需要在一个节点umount文件系统,varyoffvg,再从另一个节点varyonvg 、mount文件系统。尽管这些操作都是由HA自动完成,但操作本身还是延长了接管时间。enhanced-capable 模式正好配合HA,它允许主节点正常使用VG,mount文件系统;备用节点虽然也varyonvg,但处于 只读状态,并不mount文件系统,这样VG接管步骤省略,接管时间减少。

concurrent
VG模式:VG 还有一种concurrent 模式,它与刚才提到的enhanced-capable 不同,这是完完全全的并行模式,也是配合HACMP使用,但这种情况下的VG不能(可以创建,但不应当创建)存在文件系统,只能有裸设备(即LV),由应用程序控制数据读写锁,保证数据一致性,操作系统只管埋头读写。以上两种模式(他们不会并存),都需要HACMP控制VG的varyon/off,操作系统不能开机自动varyonvg。如果为了管理需要可以手工varyonvg.

 

File System;文件系统参数

AIX通常使用JFS( Jonural File System,日志文件系统,也可能是第二代:JFS2文件系统)。
常见的文件系统是NFS和CD-ROM文件系统。

JFS通常与UNIX/Linu下的文件系统类似,但略有不同,它使用类似数据库循环log的重做日志方案对所有文件系统操作(不包括数据操作,只对修改文件系统结构的操作有效,例如修改文件名、文件大小等)进行跟踪。在真正执行此操作之前,先在log中记录,然后才做更新,如果在更新过程中(可能需要修改磁盘上的多处信息),小型机发生故障停机,会造成更新不完全,数据丧失一致性。但由于在AIX中有log机制,当小型机重新启动时,可以查询log,重做最后的更新,这样保证了数据的一致性。
此机制在数据库应用中广为采用,在文件系统中使用的比较少。因此大部分UNIX系统在宜昌停机后重启动的时候,往往都需要执行文件系统检查和恢复(全文件系统fsck检查)操作而AIX可以避免不必要的修复工作,大大加快了重启动的时间。

AIX文件系统有许多参数可以调整:
允许大文件:允许在此文件系统上创建大文件(超过2GB,当然还要考虑/etc/security/limits中fsize的限制)。
NBPI:Number of bytes per I-node,每个inode能代表的磁盘空间大小。
Fragment碎片大小:以前版本遗留技术,已经很少使用,JFS2 此参数为固定值,已经不再考虑。
AG大小:Allocation Group文件分配组大小,每次增加文件系统大小的最小单位。
User quota:用户使用空间配额,限制用户过度使用文件系统。

我们知道,每个文件在UNIX中占用一个或者多个inode所代表的存储空间,如果文件有很多,每个文件很少,则希望inode代表的空间少一点,从而提高存储利用率;
反之,如果文件较少,每个文件很大,则需要inode代表的空间大一点,减少inode数量(inode本身也占据空间),也能提高存储利用率。所以在创建文件系统的时候,需要做好平衡。由于每个inode代表的空间(也就是NBPI)在创建文件系统的时候设定,并且不能更改。所以为了提高效率,要仔细考虑。

一般来说,可以用表4-20所示的参数设定文件系统。

查看文件系统是否使是Large File Enabled(支持Large File 的文件系统)的命令是:
$lsfs -q /home
Name         Nodename    Mount  pt  vfs  Size  Options  Auto Accounting
/dev/hd1      --         /home  jfs 131072 -- yes  no
(lv size:131072 ,fs size 131072,frag size :512 ,nbpi :4096 ,compress :no ,bf false,ag : 8)

bf:false  表示普通文件系统 standard file system
bf:true  表示Large File Enhanced file system
Auto:yes 表示系统启动后自动mount 此文件系统。
Accounting:no 表示不对此文件系统进行配额限制。
当许多用户公用同一个文件系同时 ,可以通过对用户使用空间的配额限制,来防止他过度使用此文件系统。由于使用配额限制需要耗用一定的系统资源,因此对于通常AIX系统,如果不是提供给终端用户登录使用,通常不需要进行配额限制。

JFS2 文件系统
 JFS2 扩展了许多新功能,例如目录排序、动态空间分配等。由于JFS2 使用了BTree 作为新的元数据(metadata) 排序算法,许多JFS中的限制都被解除了:
(1) inode数量动态分配,仅受限于文件系统大小
(2)文件系统大小仅受限于磁盘空间(IBM 测试过 1PB=1000TB=1000000GB)
(3)文件系统中文件数量也仅受限于磁盘空间(IBM 测试过 1PB)
(4)JFS log可以保存在文件系统所在的逻辑卷中(inline方式),而不用再使用另一个专门的逻辑卷(JFS要求每个VG中至少要有一个用于存放JFS log 的逻辑卷,
但在同一VG中的文件系统可以公用同一个JFS log逻辑卷)

问题:JFS 或者JFS2文件系统的log是做什么用的?
答案:任何文件系统都要考虑自身的强壮性问题,也就是要求文件系统在发生一些异常情况的时候,依然能保证自身数据结构的正确性,而不会出现严重的问题。例如,在磁盘正在写入数据的时候,如果机器掉电,则当前写入数据失败。但有的时候,数据写入并非完全失败,可能一般已经写入到磁盘,而系统中没有任何地方可以记录这种情况,此时磁盘上的数据是混乱的。特别是当系统支持并行写入的时候,问题尤其严重,如果发生异常停机,一定会出现错误的数据。为了避免发生这种情况,AIX采用了逻辑卷日志技术,每次磁盘写入时限在一个被称为逻辑卷log的小空间记录要改写哪些数据(并不记录数据本身,只记录数据所在的位置)。这样当实际写数据时,逻辑卷日志一定已经记录了什么地方的数据会被改写。系统重新启动时,只需要系统扫描一下逻辑卷日志,核对最后几笔数据的正确性,就能保证整个文件系统的结构不会混乱,当然,数据还是可能丢失的,但至少结构是正确的。逻辑卷日志技术不需要进行全盘结构校验,比激活其他非日志方式的文件系统快很多,对于拥有几百GB数据的文件系统尤其重要,因为扫描几百GB的文件系统,检查结构是否正确可能需要几个小时的时间。

log对文件系统性能也会有影响,特别是如果同一个VG有许多文件系统,并且访问频繁(文件结构变化,例如创建、删除、增大、缩小,存放位置变化),则由于这些文件系统需要共用同一个log设备,导致log写操作非常频繁,因此会影响性能。处理方法是为每个比较繁忙的文件系统创建自己单独的log设备,存放在不同的磁盘上,这样提高了并行性,从而提高了文件系统性能。

 

【上篇】
【下篇】

抱歉!评论已关闭.