[size=18:6cc43c5b8a]LVM管理和故障解决(一)[/size:6cc43c5b8a]
首先申明,LVM(Logical Volume Manager)是操作系统中一个磁盘管理子系统,而不是文件系统!
在LVM里,一个PV(Physical Volume,物理卷)对应且只对应一个物理硬盘,一个或者多个PV组成一个VG(Volume Group,卷组),而从一个VG里又可以虚拟划分出若干个LV(Logical Volume,逻辑卷),真正的文件系统是创建在LV上面的,如下图示:
[img:6cc43c5b8a]http://www.unixrc.com/docs/gif/lvmbase.gif[/img:6cc43c5b8a]
可以在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)的示例:
[img:6cc43c5b8a]http://www.unixrc.com/docs/gif/lvmcont.gif[/img:6cc43c5b8a]
如图示可以看出,非连续空间分配主要表现在给LV分配空间时,PE的不连续性。这种非连续性空间分配策略是LVM在创建LV时的默认策略,优点是可以跨多个PV,充分利用有效的剩余空间,同时非常方便扩文件系统,但是缺点之一是可能造成磁盘分配不均衡。当然,可以用lvextend来指定分配到哪个硬盘,但是效果不理想。相比之下,连续性空间分配策略对PE的分配要求要高得多:
·首先是不能跨多个PV
·PE必须按升序连续分配
·如果是做镜像,那么镜像的空间也必需满足Contiguous Allocation Policy
很显然,连续分配的空间比非连续分配的空间要容易管理,这样对于可用性要求非常高的空间比如根文件系统、主交换区以及DUMP区等都要求分配连续的空间。不过,要求连续分配的空间扩起来(比如扩根文件系统)非常麻烦,稍后会专门论述。 lvcreate -C y/n 决定如何给LV分配空间。
[color=blue:6cc43c5b8a]待续...[/color:6cc43c5b8a]
lianyong 回复于:2003-09-22 16:10:11 |
推,好文章,必推!!! |
★jasson★ 回复于:2003-09-22 22:30:52 |
·一个PV要么独立要么属于且仅属于一个VG(独立时作为Raw Device,性能比较猛)
一个PV不建VG,也可以做为裸设备读写么?怎么实现呢? |
jiangzx 回复于:2003-09-23 08:55:49 |
williamCU 回复于:2003-09-23 10:08:05 |
文件系统方式访问:
pvcreat -f /dev/dsk/c1t2d0 newfs -F vxfs /dev/rdsk/c1t2d0 mount /dev/dsk/c1t2d0 /mnt 裸设备方式: pvcreate -f /dev/dsk/c1t2d0 在需要填写裸设备名的地方直接使用: /dev/rdsk/c1t2d0 |
hpux 回复于:2003-09-23 14:18:50 |
1、pvcreate -f /dev/rdsk/c1t2d0,pvcreate要带裸设备文件;
2、已经再次在英文论坛确认可以直接在pvcreate后使用整盘裸设备文件名,不用加入任何VG; 3、To WilliamCU兄,还没有成功测试出来不加入VG建文件系统,你测试过么? TKS! |
williamCU 回复于:2003-09-23 16:51:25 |
To Hpux 兄:
摘自:man newfs EXAMPLES Execute the newfs command to create an HFS file system on /dev/rdsk/c1t0d2 newfs -F hfs /dev/rdsk/c1t0d2 我现在没有多余的硬盘实验,不过,我想man手册应该是对的吧。呵呵! |
hpux 回复于:2003-09-23 18:24:15 |
不知道是不是manpage问题,看我的测试:
# pvcreate -f /dev/rdsk/c1t0d0 # newfs -F vxfs /dev/rdsk/c1t0d0 vxfs mkfs: /dev/rdsk/c1t0d0 is a logical volume device , cannot mkfs. # newfs -F hfs /dev/rdsk/c1t0d0 mkfs(hfs): /dev/rdsk/c1t0d0 is a logical volume device. 加入VG以后提示信息一样! 看来manpage有点问题。 |
westapple 回复于:2003-09-23 20:05:38 |
老三篇上也说了可以在一个整盘上建立文件系统:
newfs -f vxfs -R 200 /dev/rdsk/c0t2d0 #创建一个vxfs文件系统,并且保留200M给交换区。 我这里也没有环境可以测试。 |
westapple 回复于:2003-09-23 20:06:43 |
老三篇上也说了可以在一个整盘上建立文件系统:
newfs -f vxfs -R 200 /dev/rdsk/c0t2d0 #创建一个vxfs文件系统,并且保留200M给交换区。 是不是不要pvcreate,直接来做。 我这里也没有环境可以测试,麻烦hpux能不能测试一下。 |
westapple 回复于:2003-09-23 20:14:56 |
文件系统有两种划分方法:
1。是整盘作为文件系统使用; 2。在lvm的基础上创建文件系统; 如果使用了pvcreate,那么就是要使用lvm了,所以必须使用逻辑卷来划分文件系统。对于整盘作为文件系统,是不需要使用lvm技术,所以我认为不使用pvcreate而直接创建文件系统是可以的。 请指正!! |
chenwenjian 回复于:2003-09-23 20:31:35 |
物理卷是lvm里面的概念
整盘分区是不需要创建“物理卷”的 |
williamCU 回复于:2003-09-24 16:16:24 |
以下是我的实验结果,没有任何问题!
操作系统是hpux 11.11 # pvcreate -f /dev/rdsk/c2t0d0 Physical volume "/dev/rdsk/c2t0d0" has been successfully created. # newfs -F vxfs /dev/rdsk/c2t0d0 version 4 layout 8891556 sectors, 4445778 blocks of size 2048, log size 1024 blocks unlimited inodes, largefiles not supported 4445778 data blocks, 4444138 free data blocks 136 allocation units of 32768 blocks, 32768 data blocks last allocation unit has 22098 data blocks # mount /dev/dsk/c2t0d0 /test # bdf Filesystem kbytes used avail %used Mounted on /dev/vg00/lvol3 204800 82952 120952 41% / /dev/vg00/lvol1 295024 56776 208744 21% /stand /dev/vg00/lvol8 1024000 543096 477808 53% /var /dev/vg00/lvol7 2560000 1095312 1454208 43% /usr /dev/vg00/lvol6 204800 9280 194056 5% /tmp /dev/vg00/lvol5 2048000 1517568 526352 74% /opt /dev/vg00/lvol4 204800 3224 200048 2% /home /dev/dsk/c2t0d0 8891556 3238 8610566 0% /test # |
hpux 回复于:2003-09-24 16:25:59 |
太见鬼了!我再试试。 |
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/