Red Hat Enterprise Linux 6.4网络操作系统详解
上QQ阅读APP看书,第一时间看更新

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
        (略)