6.6 任务6 逻辑卷管理器
LVM(Logical Volume Manager,逻辑卷管理器)最早应用在IBM AIX系统上,它的主要作用是动态分配磁盘分区及调整磁盘分区大小,并且可以让多个分区或者物理硬盘作为一个逻辑卷(相当于一个逻辑硬盘)来使用。这种机制可以让磁盘分区容量划分变得很灵活。
例如,有一个硬盘/dev/hda,划分了3个主分区为/dev/hda1、/dev/hda2、/dev/hda3,分别对应的挂载点是/boot、/和/home,除此之外还有一部分磁盘空间没有划分。伴随着系统用户的增多,如果/home分区空间不够了,怎么办?传统的方法是在未划分的空间中分割一个分区,挂载到/home下,并且把hda3的内容复制到这个新分区上。或者把这个新分区挂载到另外的挂载点上,然后在/home下创建链接,链接到这个新挂载点。这两种方法都不是很好,第一种方法浪费了/dev/hda3,并且如果后面的分区容量小于hda3怎么办?第二种方法需要每次都额外创建链接,比较麻烦。那么,利用LVM可以很好地解决这个问题,LVM的好处在于,可以动态调整逻辑卷(相当于一个逻辑分区)容量的大小。也就是说/dev/hda3如果是一个LVM逻辑分区,比如/dev/rootvg/lv3,那么lv3可以被动态放大。这样就解决了动态容量调整的问题。当然,前提是系统已设定好LVM支持,并且需要动态缩放的挂载点对应的设备是逻辑卷。
6.6.1 子任务1 理解LVM的基本概念
(1)PV(Physical Volume,物理卷):物理卷处于LVM的最底层,可以是整个物理磁盘,也可以是硬盘中的分区。
(2)VG(Volume Group,卷组):可以看成单独的逻辑磁盘,建立在PV之上,是PV的组合。一个卷组中至少要包括一个PV,在卷组建立之后可以动态地添加PV到卷组中。
(3)LV(Logical Volume,逻辑卷):相当于物理分区的/dev/hdaX。逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展或缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
(4)PE(Physical Extent,物理区域):物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小可根据实际情况在建立物理卷时指定。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。当多个PV组成一个VG时,LVM会在所有PV上做类似格式化的动作,将每个PV切成一块块的空间,这一块块的空间就称为PE,通常是4MB。
(5)LE(Logical Extent,逻辑区域):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域大小。LE的大小为PE的倍数(通常为1∶1)。
(6)VGDA(Volume Group Descriptor Area,卷组描述区域):存在于每个物理卷中,用于描述该物理卷本身、物理卷所属卷组、卷组中的逻辑卷以及逻辑卷中物理区域的分配等所有的信息,卷组描述区域是在使用pvcreate命令建立物理卷时建立的。
LVM进行逻辑卷的管理时,创建顺序是pv→vg→lv。也就是说,首先创建一个物理卷(对应一个物理硬盘分区或者一个物理硬盘),然后把这些分区或者硬盘加入到一个卷组中(相当于一个逻辑上的大硬盘),再在这个大硬盘上划分分区lv(逻辑上的分区,就是逻辑卷),最后,把lv逻辑卷格式化以后,就可以像使用一个传统分区那样,把它挂载到一个挂载点上,需要的时候,这个逻辑卷可以被动态缩放。例如,可以用一个长方形的蛋糕来说明这种对应关系。物理硬盘相当于一个长方形蛋糕,把它切割成许多块,每个小块相当于一个pv,然后我们把其中的某些pv重新放在一起,抹上奶油,那么这些pv的组合就是一个新的“蛋糕”,也就是vg。最后,我们切割这个“新蛋糕”vg,切出来的“小蛋糕”就叫作lv。
注意:/boot启动分区不可以是LVM,因为GRUB和LILO引导程序并不能识别LV。
6.6.2 子任务2 建立物理卷、卷组和逻辑卷
假设系统中新增加了一块硬盘/dev/sdb,下面以在/dev/sdb上创建相关卷为例介绍物理卷、卷组和逻辑卷的建立方法。
物理卷可以建立在整个物理硬盘上,也可以建立在硬盘分区中,如要在整个硬盘上建立物理卷,则不要在该硬盘上建立任何分区;如要使用硬盘分区建立物理卷,则需事先对硬盘进行分区并设置该分区为LVM类型,其类型ID为0x8e。
1)建立LVM类型的分区
利用fdisk命令在/dev/sdb上建立LVM类型的分区,如下所示。
[root@RHEL6~]# fdisk /dev/sdb //使用n子命令创建分区 Command (m for help): n Command action e extended p primary partition (1-4) p //创建主分区 Partition number (1-4): 1 First cylinder (1-130, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-30, default 30): +100M //查看当前分区的设置 Command (m for help): p Disk /dev/sdb: 1073 MB, 1073741824 bytes 255 heads, 63 sectors/track, 130 cylinders Units =cylinders of 16065* 512 =8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 13 104391 83 Linux /dev/sdb2 31 60 240975 83 Linux //使用t命令修改分区的类型 Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): 8e //设置分区类型为LVM类型 Changed system type of partition 1 to 8e (Linux LVM) //使用w命令保存对分区的修改,并退出fdisk命令 Command (m for help): w
利用同样的方法创建LVM类型的分区/dev/sdb3和/dev/sdb4。
2)建立物理卷
利用pvcreate命令可以在已经创建好的分区上建立物理卷。物理卷直接建立在物理硬盘或者硬盘分区上,所以物理卷的设备文件使用系统中现有的磁盘分区设备文件的名称。
//使用pvcreate命令创建物理卷 [root@RHEL6~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created //使用pvdisplay命令显示指定物理卷的属性 [root@RHEL6~]# pvdisplay /dev/sdb1 //使用同样的方法建立/dev/sdb3和/dev/sdb4
3)建立卷组
在创建好物理卷后,使用vgcreate命令建立卷组。卷组设备文件使用/dev目录下与卷组同名的目录表示,该卷组中的所有逻辑设备文件都将建立在该目录下,卷组目录是在使用vgcreate命令建立卷组时创建的。卷组中可以包含多个物理卷,也可以只有一个物理卷。
//使用vgcreate命令创建卷组vg0 [root@RHEL6~]# vgcreate vg0 /dev/sdb1 Volume group "vg0" successfully created //使用vgdisplay命令查看vg0信息 [root@RHEL6~]# vgdisplay vg0
其中vg0为要建立的卷组名称。这里的PE值使用默认的4MB,如果需要增大,可以使用-L选项,但是一旦设定以后不可更改PE的值。使用同样的方法创建vg1和vg2。
4)建立逻辑卷
建立好卷组后,可以使用lvcreate命令在已有卷组上建立逻辑卷。逻辑卷设备文件位于其所在的卷组的卷组目录中,该文件是在使用lvcreate命令建立逻辑卷时创建的。
//使用lvcreate命令创建卷组 [root@RHEL6~]# lvcreate -L 20M -n lv0 vg0 Logical volume "lv0" created //使用lvdisplay命令显示创建的lv0的信息 [root@RHEL6~]# lvdisplay /dev/vg0/lv0
其中-L选项用于设置逻辑卷的大小,-n参数用于指定逻辑卷的名称和卷组的名称。
6.6.3 子任务3 管理LVM逻辑卷
1.增加新的物理卷到卷组中
当卷组中没有足够的空间分配给逻辑卷时,可以用给卷组增加物理卷的方法来增加卷组的空间。需要注意的是,下面的/dev/sdb2必须为LVM类型,而且必须为PV。
[root@RHEL6~]# vgextend vg0 /dev/sdb2 Volume group "vg0" successfully extended
2.逻辑卷容量的动态调整
当逻辑卷的空间不能满足要求时,可以利用lvextend命令把卷组中的空闲空间分配到该逻辑卷以扩展逻辑卷的容量。当逻辑卷的空闲空间太大时,可以使用lvreduce命令减少逻辑卷的容量。
//使用lvextend命令增加逻辑卷的容量 [root@RHEL6~]# lvextend -L +10M /dev/vg0/lv0 Rounding up size to full physical extent 12.00 MB Extending logical volume lv0 to 32.00 MB Logical volume lv0 successfully resized //使用lvreduce命令减少逻辑卷的容量 [root@RHEL6~]# lvreduce -L -10M /dev/vg0/lv0 Rounding up size to full physical extent 8.00 MB WARNING: Reducing active logical volume to 24.00 MB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv0? [y/n]: y Reducing logical volume lv0 to 24.00 MB Logical volume lv0 successfully resized
3.删除逻辑卷、卷组、物理卷(必须按照先后顺序来执行删除)
//使用lvremove命令删除逻辑卷 [root@RHEL6~]# lvremove /dev/vg0/lv0 Do you really want to remove active logical volume "lv0"? [y/n]: y Logical volume "lv0" successfully removed //使用vgremove命令删除卷组 [root@RHEL6~]# vgremove vg0 Volume group "vg0" successfully removed //使用pvremove命令删除物理卷 [root@RHEL6~]# pvremove /dev/sdb1 Labels on physical volume "/dev/sdb1" successfully wiped
4.物理卷、卷组和逻辑卷的检查
1)物理卷的检查
[root@RHEL6~]#pvscan PV /dev/sdb4 VG vg2 lvm2 [624.00 MB / 624.00 MB free] PV /dev/sdb3 VG vg1 lvm2 [100.00 MB / 88.00 MB free] PV /dev/sdb1 VG vg0 lvm2 [232.00 MB / 232.00 MB free] PV /dev/sdb2 VG vg0 lvm2 [184.00 MB / 184.00 MB free] Total: 4 [1.11 GB] / in use: 4 [1.11 GB] / in no VG: 0 [0 ]
2)卷组的检查
[root@RHEL6~]#vgscan Reading all physical volumes. This may take a while... Found volume group "vg2" using metadata type lvm2 Found volume group "vg1" using metadata type lvm2 Found volume group "vg0" using metadata type lvm2
3)逻辑卷的检查
[root@RHEL6~]#lvscan ACTIVE '/dev/vg1/lv3' [12.00 MB] inherit ACTIVE '/dev/vg0/lv0' [24.00 MB] inherit (略)