aix上vgpvfilesystem基础.docx
《aix上vgpvfilesystem基础.docx》由会员分享,可在线阅读,更多相关《aix上vgpvfilesystem基础.docx(8页珍藏版)》请在冰豆网上搜索。
![aix上vgpvfilesystem基础.docx](https://file1.bdocx.com/fileroot1/2023-2/1/479141e4-2ab3-464a-9503-fc17224ec77f/479141e4-2ab3-464a-9503-fc17224ec77f1.gif)
aix上vgpvfilesystem基础
AIX上vg ,pv,filesystem原理基础
(2012-03-0720:
27:
56)
转载▼
我们在使用PV之前必须将其“加入”到VolumeGroup(VG,卷组)中,或直接在上面创建卷组。
当PV从属于一个VG后,其空间被分为许多大小相同的最小分配单元,每一块被称为一个PhysicalPartitions(PP物理分区)。
这如建筑时将各种不规整的石头切成同样大小“砖头”同一个样,目的是以后建筑的过程中可以按照需要取用“砖头”堆砌,而不会受到“石头”形状、大小的限制。
因此,VG中的PP大小都相等,无论原有磁盘大小多少。
我们可以继续在VG上创LogicalVolume(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-lhdiskx-apv=yes------>强制hdiskx分配一个新的PVID
#chdev-lhdiskx-apv=clear------>强制清除hdiskx已经使用的PV ID
注意:
系统中管理PV完全依靠PVID,尽管有诸如hdiskx这样的设备号可用,但是操作系统对于磁盘的识别仍然是依靠PVID的,也就是说hdisk数字可能会变,即使对于同一台小型机也是如此,而PVID永远不会改变,即使拿到另一台机器上PVID也不变(直到执行了以上可以改变PVID的操作)。
保持PVID不变,靠PVID识别共享磁盘也是双击热备份的基础。
从另一个方面来讲,如果你用上面的命令改变了PVID,操作系统就认为原来的磁盘消失了,而且再也不能找回来。
更不巧的是如果原有的PV还属于某个VG,那么这个VG再也发现不了它原来的成员盘(PVID已经改变),这个盘上的数据就无法找回,虽然磁盘和数据依然在那里。
修复这个问题只能直接用底层的ODM操作,已经超出了本书的范围,有兴趣的朋友可以自己研究下相关的材料。
VG被激活后才能被访问(读/写及察看VG信息等操作),同时此VG也被执行激活命令的操作系统映像“锁住”,不允许别的操作系统映像访问(包括执行激活命令)。
激活与释放VG的命令分别是:
#varyonvgvg_name 激活此VG,不允许别的操作系统映像访问
#varyoffvgvg_name 释放此VG,允许别的操作系统映像访问
但要注意,这个"锁"只是逻辑的锁(在磁盘上做一个标记),而且当VG被激活后,如果发生机器突然宕机,操作系统可能没有能执行磁盘解锁的命令(清除标志位),则其它机器就无法再激活此卷组了!
需要执行带-f参数的强制命令激活此卷组:
#varyonvg-fvg_name
有时甚至需要使用更底层的命令手工清除锁标志,此命令为lquerypr或pcmquerypr。
由于此命令属于底层命令,对于初学者,容易操作不当,导致错误的结果,请谨慎使用。
VGDA(VolumeGroupDescriptorArea)
把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 -yvg_namehdiskx
其中vg_name是你希望的VG名,hdiskx是此VG中任一磁盘。
由于在执行importvg命令的时候可以自定义VG名,因此系统中并没有更改VG名称的命令,如果你想改VG的名称,则需要先执行exportvg命令(把此VG在系统中的定义删除掉,再用新名字importvg进来)
反之,如果想把某个VG的信息从一台小型机上删除,则需要执行
#exportvgvg_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(VolumeGroupStatusArea)
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同步。
在smitvg的菜单可以找到同步VG的选项。
BigVG,ScalableVG
由于VG在创建的时候,就固定了VGDA和VGSA的大小,所以VG所能容纳的磁盘数量和每个磁盘最多的PP数就已经确定:
每个VG最多32个PV,总计256个LV(逻辑卷,包括一个保留给LVM内部使用,实际可用是255个)。
在BIGVG中,这些限制都被打破,PV扩大到128个,LV扩大到512个。
可以直接创建“大”VG,也可以把“小”VG扩大为“大”VG。
如果是ScalableVG则最多支持1024个PV,256(可以在创建的时候设定为最大支持4096)个LV。
下面的命令可以创建Scalable的VG(注意在执行的时候还要附带在那个PV上创建的参数)。
#mkvg-Svg_name
本质上,这几种VG类型并没有什么特别的区别,其差别是系统保留了多大的VGDA空间。
显然,要想VG中支持更多的磁盘,VGDA空间越大。
把“小”VG转换成“大”VG的过程中,AIX不过是扩大了VGDA的空间。
由于VGDA在每个PV的开始,并且必须连续,如果磁盘已经创建了LV,空间被分配,可能会发生VGDA空间无法扩大的情况,更改VG类型操作就会失败。
如果VG总体还有剩余空间,此时可以使用迁移PP的命令,将占用未来VGDA空间的PP数据迁移到其它位置。
下面是个示范的命令(注意,这是LVM底层命令,最好在测试系统验证后再使用),供读者参考
#lmigratepp-gVGID-pold_PVID-nold_PPNum-Pnew_PVID-Nnew_PPNum
VGID可以通过lsvgvg_name获得,old_PVID和new_PVID分别是源盘和目标盘的PVID,old_PPNum是1也就是第一个PP(我们想把第一个PP的数据移走,以便空余位置给VGDA),new_PPNum是new_PVID对应的某个空闲PP,可以通过lspv-Mhdiskx获得。
PhysicalVolume(PV)控制
PV有一个参数控制是否允许分配此物理卷上的PP给逻辑卷使用。
在扩充、创建LV和创建文件系统的时候,系统会自动分配此VG中可分配的PP,如果希望告诉系统不要使用
某个PV上的空余空间,那就可以通过此参数不允许使用此PV。
命令是:
#chpv-anhdiskx不使用此PV(hdiskx)
#chpv-ayhdiskx可以使用此PV(hdiskx)
或者用smit命令的快捷索引:
#smitchpv
VG的一些参数说明
#lsvgvg_name->察看vg参数
是否在启动后激活VG:
双机共享的VG(磁盘)不能设置自动激活,否则可能引起冲突(一台机器启动后激活VG,并将磁盘锁住;而另一台机器启动的时候,也试图激活此VG,如果不是并行卷,两台机器同时激活同一个VG会产生错误)。
反之如果单机使用,则通常要选择自动激活,这样避免了手工操作的麻烦。
是否需要Quorum:
如果打开Quorum,当VG中不可访问的磁盘数超过一半,系统会强制禁止使用此VG(如果此VG已经被varyon,则自动执行varyoffvg命令)或者不可以激活此卷足(如果此VG还没有被varyon),以防止数据进一步损坏,等待专业人员处理。
enhanced-capable模式:
如果安装了文件集(非缺省安装,需要自己选择),则增加了另一个VG模式参数:
enhanced-capable。
此模式可以与任何VG类型并存,需要通过smittychvg或者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.
FileSystem;文件系统参数
AIX通常使用JFS(JonuralFileSystem,日志文件系统,也可能是第二代:
JFS2文件系统)。
常见的文件系统是NFS和CD-ROM文件系统。
JFS通常与UNIX/Linu下的文件系统类似,但略有不同,它使用类似数据库循环log的重做日志方案对所有文件系统操作(不包括数据操作,只对修改文件系统结构的操作有效,例如修改文件名、文件大小等)进行跟踪。
在真正执行此操作之前,先在log中记录,然后才做更新,如果在更新过程中(可能需要修改磁盘上的多处信息),小型机发生故障停机,会造成更新不完全,数据丧失一致性。
但由于在AIX中有log机制,当小型机重新启动时,可以查询log,重做最后的更新,这样保证了数据的一致性。
此机制在数据库应用中广为采用,在文件系统中使用的比较少。
因此大部分UNIX系统在宜昌停机后重启动的时候,往往都需要执行文件系统检查和恢复(全文件系统fsck检查)操作而AIX可以避免不必要的修复工作,大大加快了重启动的时间。
AIX文件系统有许多参数可以调整:
允许大文件:
允许在此文件系统上创建大文件(超过2GB,当然还要考虑/etc/security/limits中fsize的限制)。
NBPI:
NumberofbytesperI-node,每个inode能代表的磁盘空间大小。
Fragment碎片大小:
以前版本遗留技术,已经很少使用,JFS2此参数为固定值,已经不再考虑。
AG大小:
AllocationGroup文件分配组大小,每次增加文件系统大小的最小单位。
Userquota:
用户使用空间配额,限制用户过度使用文件系统。
我们知道,每个文件在UNIX中占用一个或者多个inode所代表的存储空间,如果文件有很多,每个文件很少,则希望inode代表的空间少一点,从而提高存储利用率;
反之,如果文件较少,每个文件很大,则需要inode代表的空间大一点,减少inode数量(inode本身也占据空间),也能提高存储利用率。
所以在创建文件系统的时候,需要做好平衡。
由于每个inode代表的空间(也就是NBPI)在创建文件系统的时候设定,并且不能更改。
所以为了提高效率,要仔细考虑。
一般来说,可以用表4-20所示的参数设定文件系统。
查看文件系统是否使是LargeFileEnabled(支持LargeFile的文件系统)的命令是:
$lsfs-q/home
Name Nodename Mount pt vfs Size Options AutoAccounting
/dev/hd1 -- /home jfs131072--yes no
(lvsize:
131072,fssize131072,fragsize:
512,nbpi:
4096,compress:
no,bffalse,ag:
8)
bf:
false 表示普通文件系统standardfilesystem
bf:
true 表示LargeFileEnhancedfilesystem
Auto:
yes表示系统启动后自动mount此文件系统。
Accounting:
no表示不对此文件系统进行配额限制。
当许多用户公用同一个文件系同时,可以通过对用户使用空间的配额限制,来防止他过度使用此文件系统。
由于使用配额限制需要耗用一定的系统资源,因此对于通常AIX系统,如果不是提供给终端用户登录使用,通常不需要进行配额限制。
JFS2文件系统
JFS2扩展了许多新功能,例如目录排序、动态空间分配等。
由于JFS2使用了BTree作为新的元数据(metadata)排序算法,许多JFS中的限制都被解除了:
(1)inode数量动态分配,仅受限于文件系统大小
(2)文件系统大小仅受限于磁盘空间(IBM测试过1PB=1000TB=1000000GB)
(3)文件系统中文件数量也仅受限于磁盘空间(IBM测试过1PB)
(4)JFSlog可以保存在文件系统所在的逻辑卷中(inline方式),而不用再使用另一个专门的逻辑卷(JFS要求每个VG中至少要有一个用于存放JFSlog的逻辑卷,
但在同一VG中的文件系统可以公用同一个JFSlog逻辑卷)
问题:
JFS或者JFS2文件系统的log是做什么用的?
答案:
任何文件系统都要考虑自身的强壮性问题,也就是要求文件系统在发生一些异常情况的时候,依然能保证自身数据结构的正确性,而不会出现严重的问题。
例如,在磁盘正在写入数据的时候,如果机器掉电,则当前写入数据失败。
但有的时候,数据写入并非完全失败,可能一般已经写入到磁盘,而系统中没有任何地方可以记录这种情况,此时磁盘上的数据是混乱的。
特别是当系统支持并行写入的时候,问题尤其严重,如果发生异常停机,一定会出现错误的数据。
为了避免发生这种情况,AIX采用了逻辑卷日志技术,每次磁盘写入时限在一个被称为逻辑卷log的小空间记录要改写哪些数据(并不记录数据本身,只记录数据所在的位置)。
这样当实际写数据时,逻辑卷日志一定已经记录了什么地方的数据会被改写。
系统重新启动时,只需要系统扫描一下逻辑卷日志,核对最后几笔数据的正确性,就能保证整个文件系统的结构不会混乱,当然,数据还是可能丢失的,但至少结构是正确的。
逻辑卷日志技术不需要进行全盘结构校验,比激活其他非日志方式的文件系统快很多,对于拥有几百GB数据的文件系统尤其重要,因为扫描几百GB的文件系统,检查结构是否正确可能需要几个小时的时间。
log对文件系统性能也会有影响,特别是如果同一个VG有许多文件系统,并且访问频繁(文件结构变化,例如创建、删除、增大、缩小,存放位置变化),则由于这些文件系统需要共用同一个log设备,导致log写操作非常频繁,因此会影响性能。
处理方法是为每个比较繁忙的文件系统创建自己单独的log设备,存放在不同的磁盘上,这样提高了并行性,从而提高了文件系统性能。