首页 > 代码库 > LVM的吹水堂

LVM的吹水堂

简介

    在今天,数据每天大量增多的情况下,服务器经常面临正常使用的分区空间不够的情况,假如还是使用传统分区方式的话,再加一颗新硬盘,然后重新分割、格式化,将原本的数据完整的复制过来, 然后将原本的 partition 卸载重新挂载新的 partition 。啊!好忙碌啊!若是第二次分割却给的容量太多!导致很多磁盘容量被浪费了! 你想要将这个 partition 缩小时,你又该如何呢?LVM的出现,正是为了解决这些问题。。。

    LVM(全称:Logical Volume Manager 中文名称:逻辑卷管理器),又译为逻辑卷宗管理器、逻辑扇区管理器、逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理(Logical volume management)功能。它在硬盘的硬盘分区之上,又创建一个逻辑层,以方便系统管理硬盘分区系统。最先由IBM开发,在AIX系统上实现,OS/2 操作系统与 HP-UX也支持这个功能。在1998年,Heinz Mauelshagen 根据在 HP-UX 上的逻辑卷管理器,写作出第一个Linux 版本的逻辑卷管理器。

    LVM,它可以零停机前提下可以自由地对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区,它的出现可以说解决磁盘管理的很多问题。把它说得这么好,接下来我们就来慢慢了解它,在介绍它怎么使用之前,我们先来了解几个术语。


术语

    1、PM:物理存储介质(physical media)

        这里指系统的存储设备:硬盘,是存储系统最低层的存储单元。


    2、PV:物理卷(physical volume)

        物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数(也就是在传统分区上附加了LVM的管理数据)。


    3、PE:(physical extent)

        每一个物理卷被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。


    4、VG:卷组(Volume Group)

        LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。


    5、LV:逻辑卷(logical volume)

        LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。


    6、LE:(logical extent)

        逻辑卷也被划分为被称为LE(LogicalExtents)的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

 

结构分析

wKioL1PL2wqwMBFaAAE8Dq4_8og542.jpg

    首先可以看到,物理卷(PV)被由大小等同的基本单元PE组成,一个卷组由一个或多个物理卷组成。从上图可以明显看到,PE和LE有着一一对应的关系。逻辑卷建立在卷组上。逻辑卷就相当于非LVM系统的磁盘分区,可以在其上创建文件系统。


LVM工作方式     
    下面来看一看LVM到底是怎样工作的。每一个物理卷都被分成几个基本单元,即所谓的PE。PE的大小是可变的,但是必须和其所属卷组的物理卷相同。在每一个物理卷里,每一个PE都有一个惟一的编号。PE是一个物理存储里可以被LVM寻址的最小单元。  


    每一个逻辑卷也被分成一些可被寻址的基本单位,即所谓的LE。在同一个卷组中,LE的大小和PE是相同的,很显然,LE的大小对于一个卷组中的所有逻辑卷来说都是相同的。

 
    在一个物理卷中,每一个PE都有一个惟一的编号,但是对于逻辑卷这并不一定是必需的。这是因为当这些PE ID号不能使用时,逻辑卷可以由一些物理卷组 成。因此,LE ID号是用于识别LE以及与之相关的特定PE的。正如前面所提到的,LE和PE之间是一一对应的。每一次存储区域被寻址访问或者LE的ID被使用,都会把数据写在物理存储设备之上。 


    你可能会觉得奇怪,有关逻辑卷和逻辑卷组的所有元数据都存到哪儿去了。类似的在非LVM系统中,有关分区的数据是存储在分区表中,而分区表被存储在了每一个物理卷的起始位置。VGDA(卷组描述符区域)功能就好象是LVM的分区表,它存储在每一个物理卷的起始处。  


    VGDA由以下信息组成: 
        ·一个PV描述符 
        ·一个VG描述符 
        ·LV描述符 
        ·一些PE描述符  


    当系统启动LV时,VG被激活,并且VGDA被加载至内存。VGDA帮助识别LV的实际存储位置。当系统想要访问存储设备时,由VGDA建立起来的映射机制就用于访问实际的物理位置来执行I/O操作。

   

LVM命令介绍

    在创建和使用LVM之前,首先得先安装好LVM的程序包

   # rpm -qa | grep ‘lvm‘

    wKioL1PL30TwE243AACvx_XBQus113.jpg


创建 详细查看  摘要查看 删除  增加  减小
PV  pvcreate  pvdisplay pvs  pvremove

VG  vgcreatevgdisplay vgs  vgremove vgextenvgreduce
LV  lvcreate  lvdisplaylvs lvremovelvexten  lvreduce

    从上面的表格可以看出来,命令大部分都是相似的,所以也比较容易记忆.


    PV用法详解

        创建    pvcreate DEVICE(/dev/sda1)

        删除    pvremove DEVICE(/dev/sda2)


    VG用法详解

        创建    vgcreate vgNAME pv   

        # vgcreate myvg /dev/sda1 /dev/sda2

        删除    vgremove vgNAME

        # vgremove myvg

        增加    vgextend vgNAME pv

         # vgextend myvg /dev/sda2

        减小    vgreduce vgNAME pv


    lv用法详解

        增加    lvcreate -L [+]SIZE -n NAME VG

         # lvcreate -L 512M -n mylv1 myvg

        删除    lvremove lv

        如下是表示lv的两种   

        # lvremove /dev/myvg/mylv1

        或者是用

        # lvremove /dev/mapper/myvg-mylv1

        增大    lvextend -L [+]SIZE lv

         # lvextend -L 1G /dev/myvg/mylv1

        减小    lvreduce -L [-]SIZE lv

         # lvreduce -L -256M /dev/mapper/myvg-mylv1


实践篇(创建LVM)

    1、首先先对一个磁盘进行分区并标记为LVM的磁盘

    # fdisk /dev/sdb

    wKiom1PL6EyDg7fDAAGf-BfsZUs754.jpg

    # t

    修改标记为8e

    wKioL1PL6WfgE2PjAAGCkEXt7Bs870.jpg

    2、再将它创建为PV

    # pvcreate /dev/sdb1

    wKioL1PL6q6SvSKTAAB8cM0cY9M276.jpg

    3、创建一个vg,并将/dev/sdb1这个pv加入vg组

    # vgcreate myvg /dev/sdb1

    wKiom1PL6E3iL6xeAACAvWEVZg8000.jpg

    4、然后再在myvg的卷组上创建一个512M的lv

    # lvcreate -L 512M -n mylv1 myvg

    wKioL1PL6WjQPsZ-AACJDE4Xp98809.jpg

    5、然后将mylv1这个逻辑卷格式化为ext4的文件系统格式

    # mke2fs -t ext4 /dev/myvg/mylv1

    wKiom1PL6E_Q_LglAAMJV1if8l8991.jpg

    6、最后将mylv1挂载到/mnt/data这个目录就可以进行使用访问了

    #mount /dev/myvg/mylv1 /mnt/data

    wKioL1PL6WqwvUltAAJkrb_1pmY526.jpg

本文出自 “LC的IT之路” 博客,转载请与作者联系!

LVM的吹水堂