回忆之城
生命在于折腾
posts - 575,comments - 9,trackbacks - 0
[size=18]LVM管理和故障解决(一)[/size] 

首先申明,LVM(Logical Volume Manager)是操作系统中一个磁盘管理子系统,而不是文件系统! 

在LVM里,一个PV(Physical Volume,物理卷)对应且只对应一个物理硬盘,一个或者多个PV组成一个VG(Volume Group,卷组),而从一个VG里又可以虚拟划分出若干个LV(Logical Volume,逻辑卷),真正的文件系统是创建在LV上面的,如下图示: 
 
可以在LV上建文件系统,也可以不建文件系统而直接使用,这时叫裸设备(raw device)。因为是直接对设备进行数据读写,所以Raw device的性能要比文件系统好,许多数据库系统就是直接存储在裸设备上,但是可管理性比较差,题外话。 

一个很容易想到的问题:LVM系统怎么知道往某一个LV里面存数据时,到底是存放到哪个(些)实际硬盘呢?在LVM系统里,一个PV由若干个PE(Physical Extent)组成,一个LV由若干个LE(Logical Extent)组成,而这些PE和LE之间又有直接的对应关系,这种对应关系被存储在一个叫做“PE/LE对应表”(Translation Table)的表中。Translation Table存放在LVM磁盘上,当VG被激活时才装载到内存中。PE是在创建卷组时创建的,大小由vgcreate的-s参数指定,默认是4M;在同一个VG里面的所有PV的PE大小是一样的,不管实际硬盘的大小和型号是否相同。当LV创建时,LVM系统创建LE并自动维护PE/LE对应表,使得每一个LV里面的LE都可以找到与之对应的PE,从而知道数据该往哪个硬盘写。一般情况下创建LV的时候,系统都是按物理硬盘加入VG的顺序来分配其可用的PV。比如说c0t5d0是第一个加入VG的硬盘,那么默认情况下c0t5d0里的可用PV将最先被用来分配,除非在使用lvextend命令时特殊指定。 

在使用vgcreate的-s参数时,PE的大小必须是2的整数倍,一般使用默认值4。为什么是4而不是8、16...?(你问我我问谁?:p)不过我很幼稚的研究发现,一个PV最多只能有65535个PE,也就是最大支持4 * 65535 = 262140M的硬盘,当单个硬盘容量超过这个数的时候,PE的大小是不是就必须加大了?应该是吧!还有几个LVM的限定,要说明 
·一个LV只能属于一个VG(不要去想lvol9先从vg00弄点空间,再从vg01弄点空间) 
·一个PV要么独立要么属于且仅属于一个VG(独立时作为Raw Device,性能比较猛) 
·vgcrete -l参数将限定一个VG里面能创建的最大LV数量,极限是255 
·vgcreate -p参数限定一个VG里面能容纳的最多PV数,极限是255 
·内核参数maxvgs限定系统最大的VG数,默认是10,最大可以变态到256 

做系统管理和技术支持的人民不能不知道Quorum!什么是Quorum?我查金山词霸的解释“法定人数委员会或组织最少人数的官员或成员,通常要达到多数,必须出席以确保事务处理的有效性”。在LVM里也要用到Quorum机制。那么在LVM里的Quorum又是什么意思呢?---在激活vg之前,系统检测属于该vg的所有PV,当且仅当过半数的PV没问题时,该vg才允许被激活。这是一个安全机制,居然有一半的PV是坏的还让激活,那不纯心让人家数据丢失么?Quorum机制在VG配置改变(如新建逻辑卷)或状态改变(如VG里面有硬盘损坏)时都会被检测。不过,可以用“vgchange -q n”来绕过Quorum检测。说到Quorum,又会联想到只有2块盘做Mirror的情形,比如启动时的“hpux -lq”等,后面会再做更为详细的说明。 

最后说明一下空间分配的连续性问题。下图为2个非连续空间分配(Non-Contiguous Allocation Policy)的示例: 
 
如图示可以看出,非连续空间分配主要表现在给LV分配空间时,PE的不连续性。这种非连续性空间分配策略是LVM在创建LV时的默认策略,优点是可以跨多个PV,充分利用有效的剩余空间,同时非常方便扩文件系统,但是缺点之一是可能造成磁盘分配不均衡。当然,可以用lvextend来指定分配到哪个硬盘,但是效果不理想。相比之下,连续性空间分配策略对PE的分配要求要高得多: 
·首先是不能跨多个PV 
·PE必须按升序连续分配 
·如果是做镜像,那么镜像的空间也必需满足Contiguous Allocation Policy 
很显然,连续分配的空间比非连续分配的空间要容易管理,这样对于可用性要求非常高的空间比如根文件系统、主交换区以及DUMP区等都要求分配连续的空间。不过,要求连续分配的空间扩起来(比如扩根文件系统)非常麻烦,稍后会专门论述。 lvcreate -C y/n 决定如何给LV分配空间。 

[color=blue]待续...[/color]
posted on 2014-04-07 21:44 回忆之城 阅读(185) 评论(0)  编辑 收藏 引用 所属分类: unix/linux
只有注册用户登录后才能发表评论。