首页 > 代码库 > lvm(逻辑卷管理)的魅力

lvm(逻辑卷管理)的魅力

近来,随着课程的深入,开始接触到lvm逻辑卷。由开始的不懂,到现在的半知半懂,慢慢的感受到了lvm逻辑卷由内而外散发出的魅力。作为一个小白,为了能更好地学习和理解lvm逻辑卷的知识,特趁着难得的休息时间,总结一下自己所学的关于lvm逻辑卷的知识,有错误的地方,请各位大神指正,共同学习!


本人认为lvm逻辑卷主要有两大魅力:

    1、逻辑卷的边界是可变化的。

    2、lvm支持快照(snapshot)。


各位看官别着急,且听小生慢慢说来:


前言

首先,让我们思考一个问题:为什么会出现LVM技术?

本人是这样认为的:对于我们常用PC的人来说,我们总是不得不对磁盘执行分区。硬盘分区是一种令人厌烦,但公认是使操作系统设置和运行进程不可或缺的一部分。因为要做好工作,就要精确地估计每个分区需要的空间,所以硬盘分区很烦人。如果估计失误了,分得太大,会浪费空间;分得太少了,空间又不够用。为了解决这个问题,你甚至可能需要执行整个系统备份、将硬盘清除干净,然后将所有数据恢复到新的(可能比原来好一些)分区布局中。对于服务器来说,也是如此。传统的这种方法极为不便,不能动态地扩展或缩减分区的大小,所以就有了后来的lvm的出现。


一、lvm、相关概念以及两大魅力简介

 1、lvm简介   

            LVM: Logical Volumn Manager (逻辑卷管理器),它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。它于1998年发布到Linux社区中,它允许你在Linux系统上用简单的命令行管理一个完整的逻辑卷管理环境。

            LVM实质上是将一个或多个底层块设备组织一个逻辑的工具。

        2、lvm重要概念

        重要的概念有:Physical volume (PV):物理卷, Physical extent (PE):盘区,Volume group (VG):卷组,Logical volume(LV) :逻辑卷

        以下是概念的详细解释:

            物理存储介质(The physical media):这里指系统的存储设备,如硬盘/分区,是存储系统最低层的存储单元。

           物理卷(PV) :  LVM的基本存储逻辑块,一般会把硬盘/分区做成物理卷,甚至底层块设备是raid也能被做成物理卷。PV不同于基本的物理存储介质(如分区、磁盘等),它包含有与LVM相关的管理参数。(物理卷不能被格式化,它没有文件系统的概念。)

            物理盘区(PE)  :  就是一块磁盘空间,物理卷被划分成多个同等大小的PE。大小固定,一般为4M8M(一个PE只能属于一个逻辑卷)。

            卷组(VG):LVM卷组完全类似于扩展分区,不能被直接使用必须进行再次划分。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),卷组由多个物理卷(PV)组成。

       逻辑卷(LV):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统,也就是从VG中划分的逻辑分区。

       

        下面以一个简单的图说明一下物理卷、卷组、逻辑卷之间的关系:

        wKiom1PHuYqi_JZrAAGn8kvVrFg219.jpg

    创建逻辑卷的过程说明:

        (1)先把磁盘/分区转换为pv(物理卷)。由于物理卷没有文件系统的概念,不能被格式化,所以转换为物理卷后,原磁盘/分区的文件系统不能被保留。

        (2)创建卷组,把多个物理卷添加到卷组中。实质上,创建卷组会默认或可指定PE的大小,物理卷加入卷组后,会被分割成一个个固定大小的PE。

        (3)卷组相当于扩展分区,不能被直接使用,于是要在卷组中创建逻辑卷。实质上,创建指定大小的逻辑卷是在卷组中把可用的多个PE分配给逻辑卷,由于PE的大小是固定的,所以创建出的逻辑卷的大小会有偏差。由此可知,逻辑卷只能看到卷组中的PE,而无法看不到底层中有多少块物理卷。逻辑卷相当于LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统。

    3、lvm的两大魅力简介

    到这里,我们可以知道:

        (1)由于lvm可把物理卷分割成PE和划分逻辑卷的特性,可知lvm逻辑卷的边界是可以动态扩展和缩减的。实质上,逻辑卷边界的动态扩展和缩减是分为两层的:物理边界和逻辑边界各自的扩展和缩减。这里不细讲,以下会有详细事例进一步说明。

        (2)lvm如果仅有逻辑卷这么一个功能,就不可能那么受欢迎了。lvm令人兴奋的是,它还支持快照的功能。有了快照后,我们对于数据库的备份就会变得非常简单+easy了。这里也不细说,以下会进一步说明。


    二、lvm逻辑卷创建过程详解

   lvm逻辑卷创建的整个过程大致如下:

        分区 --> PV --> VG --> LV  --> 将分区格式化(为分区创建文件系统)--> 挂载逻辑分区

    

    下面,用一个实例来加深各位对lvm的理解。

    1、分区

        使用分区工具fdisk分区,为了使其能被lvm支持,需要把分区的系统ID改为8e(注意:一定要把分区的系统ID该为8e,否则不能将分区转换为物理卷)。

    wKiom1PLhi-wp_ONAAA9krVNrgQ492.jpg

    wKioL1PLh1_CgqAXAAPyS7O2Q5Y480.jpg

    wKioL1PLiSCDuIHkAALmIa2ANyI168.jpg

    另一个分区的创建就不贴图了,各位小伙伴可以去尝试一下,很好玩的!-_-

    wKioL1PLjZ6yyS1-AABCHmtPLtM684.jpg

    2、创建物理卷(PV)   

    [root@localhost ~]# pvcreate /dev/sda3 /dev/sdb1     
      Physical volume "/dev/sda3" successfully created
      Physical volume "/dev/sdb1" successfully created

    物理卷(pv)相关命令介绍:

         pvcreate : 创建pv(物理卷)

                pvs, pvdisplay : 查看pv

                pvremove : 移除pv

                pvmove : 移动pv(把该物理卷上的数据移到卷组的其他物理卷上)

                pvscan : 扫描有哪些pv

        3、创建卷组(VG)   

    [root@localhost ~]# vgcreate -s 8 myvg /dev/sda3 /dev/sdb1   
      Volume group "myvg" successfully created
    [root@localhost ~]# vgs
      VG   #PV #LV #SN Attr   VSize  VFree 
      myvg   2   0   0 wz--n- 10.02g 10.02g
      vg0    1   4   0 wz--n- 59.99g  7.99g
    [root@localhost ~]# vgdisplay
      --- Volume group ---
      VG Name               myvg
      System ID             
      Format                lvm2
      Metadata Areas        2
      Metadata Sequence No  6
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                1
      Open LV               1
      Max PV                0
      Cur PV                2
      Act PV                2
      VG Size               10.02 GiB
      PE Size               8.00 MiB      #指定PE的大小为8M
      Total PE              1282
      Alloc PE / Size       640 / 5.00 GiB
      Free  PE / Size       642 / 5.02 GiB
      VG UUID               5cHXI4-WSz9-ACFQ-IiQj-iUIW-vcxd-gahSK8

    卷组(VG)相关命令介绍:

          vgcreate : 创建卷组,-s 选项可以指定PE的大小

                  vgs, vgdisplay :查看卷组的信息

                  vgremove : 移除卷组

                  vgextend : 扩展卷组的空间

                  vgreduce : 缩减卷组的空间

                        缩减卷组中的空间,一般都是通过移除某一个物理卷来完成的。

                        需要注意的是:

                            移除卷组中的某一物理卷时,应该先使用pvmove命令把该物理卷上的数据移到卷组上别的分区,然后才用vgreduce命令指定移除该物理卷

                             wKiom1PLpPGifZWjAAI1mrgl4LY986.jpg

                  vgscan:扫描有哪些卷组

        4、创建逻辑卷(LV)

    wKioL1PLkZehf4mNAAGsz82KgeU777.jpg

    wKiom1PLkUWSWZT7AAJoXQ_3ik8794.jpg

    逻辑卷(LV)相关命令介绍:

        lvcreate : 创建逻辑卷(lv)

             -n lv_name (指定逻辑卷的名称)

            -L #UNIT{mMgGtT}  (指定逻辑卷的大小)

        lvs,lvdisplay :查看逻辑卷的信息

        lvremove : 移除指定的逻辑卷

        lvextend : 扩展逻辑卷

        lvreduce : 缩减逻辑卷

        lvscan :扫描有哪些逻辑卷

    5、格式化逻辑卷

     wKiom1PLmeyBFnJTAAGKCGfIXgw929.jpg

         mke2fs:用来格式化分区(为分区创建文件系统)

            -t 指定文件系统类型

   6、挂载分区

        wKioL1PLnRqhgSdoAAEQiYAcbnQ125.jpg

        mount :用于挂载分区

        挂载mylv逻辑分区后,就能在该逻辑分区上存储数据了!


    怎样?是不是很简单啊!好了,下面让我们进一步深入lvm 吧!

    以下所讲的是我们高级班的内容,要学请转入我们的高级班,只要999元!!! 

    -_- ,说笑的~

   三、逻辑卷的扩展与缩减

    lvm存储空间边界分为两类:

            物理边界:物理磁盘的存储大小

            逻辑边界:逻辑卷的空间大小

        如下图所示:

       wKiom1PLlP7zswtHAABcOn139vA895.jpg

    内圆范围是文件系统(逻辑),外圆范围是存储空间(物理)。

        文件系统是在存储空间上抹上一层软件级别的管理方案。因而文件系统空间大小不能大于存储空间的大小。

     

    因此我们知道逻辑卷扩展和缩减是有要求的:

            扩展:物理 --> 逻辑(先扩展物理卷,然后才扩展逻辑卷。)

            缩减:逻辑 --> 物理(先缩减逻辑卷,然后才缩减物理卷。)

                缩减不能少于已经存储的所有数据空间的大小!!!(缩减须谨慎!!!)


    1、扩展逻辑卷

        (1)先确定扩展的目标大小;并确保对应的卷组中有足够的空闲空间可用;             

             [root@localhost ~]# vgs
             VG   #PV #LV #SN Attr   VSize  VFree
             myvg   2   1   0 wz--n- 10.02g 5.02g
             vg0    1   4   0 wz--n- 59.99g 7.99g

            (2)扩展物理边界

            增加新的分区:

            wKiom1PLmCLB9K2rAADLO84KnCU387.jpg

            把分区转换成PV:

            wKiom1PLmIDwZkHjAACHdm-Rz88595.jpg

            把新的物理卷加入卷组:     

            [root@localhost ~]# vgextend myvg /dev/sdb2 # vgextend扩展逻辑卷的大小
              Volume group "myvg" successfully extended
            [root@localhost ~]# vgs
              VG   #PV #LV #SN Attr   VSize  VFree 
              myvg   3   1   0 wz--n- 15.02g 10.02g
              vg0    1   4   0 wz--n- 59.99g  7.99g

            扩展物理边界:                 

            [root@localhost ~]# lvs
              LV   VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
              mylv myvg -wi-ao----  5.00g                                             
              root vg0  -wi-ao---- 20.00g                                             
              swap vg0  -wi-ao----  2.00g                                             
              usr  vg0  -wi-ao---- 10.00g                                             
              var  vg0  -wi-ao---- 20.00g                                             
            [root@localhost ~]# lvextend -L 10G /dev/myvg/mylv     # 注意:-L 10G 是指定扩展后的逻辑卷大小为10G,并不是+10G的意思
              Extending logical volume mylv to 10.00 GiB           #       -L指定的扩展后的逻辑卷大小不能比原来逻辑卷的大小还小
              Logical volume mylv successfully resized
            [root@localhost ~]# lvs
              LV   VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
              mylv myvg -wi-ao---- 10.00g                                             
              root vg0  -wi-ao---- 20.00g                                             
              swap vg0  -wi-ao----  2.00g                                             
              usr  vg0  -wi-ao---- 10.00g                                             
              var  vg0  -wi-ao---- 20.00g

            (3)扩展逻辑边界               

        [root@localhost ~]# blkid /dev/myvg/mylv    # blkid命令可以查看块设备的UUID号,也可以查看该块设备的文件系统类型    
         /dev/myvg/mylv: UUID="b9301aad-ca3b-497a-88e2-22e121247914" TYPE="ext4" 
        [root@localhost ~]# resize2fs /dev/myvg/mylv  # resize2fs命令表示重新调整文件系统的大小(根据物理边界的大小,自动调整)
         resize2fs 1.41.12 (17-May-2010)
         Filesystem at /dev/myvg/mylv is mounted on /mnt; on-line resizing required
         old desc_blocks = 1, new_desc_blocks = 1
         Performing an on-line resize of /dev/myvg/mylv to 2621440 (4k) blocks.
         The filesystem on /dev/myvg/mylv is now 2621440 blocks long. 
        [root@localhost ~]# blkid /dev/myvg/mylv
         /dev/myvg/mylv: UUID="b9301aad-ca3b-497a-88e2-22e121247914" TYPE="ext4" 
        [root@localhost ~]# ls /mnt   # 扩展逻辑卷mylv后,数据没丢失
         fstab  lost+found

    2、缩减逻辑卷

       注意:a、缩减逻辑卷的操作是很危险的,操作不当,很有可能会使得数据丢失。请慎重!!!

                       b、缩减逻辑卷时,逻辑卷要离线,不能处在挂载当中!

           

        (1)先确定缩减后的目标大小;并确保对应的目标逻辑卷大小中有足够的空间可容纳原有所有数据;                

        [root@localhost ~]# lvs /dev/myvg/mylv        
        LV   VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
        mylv myvg -wi-a----- 10.00g

            (2)先制裁文件系统,并要执行强制检测

        [root@localhost ~]# mount  # mount命令能查看当前系统中挂载的设备
        /dev/mapper/myvg-mylv on /mnt type ext4 (rw)
        [root@localhost ~]# umount /dev/myvg/mylv    # umount命令可卸载所指定的已挂载的设备
        [root@localhost ~]# e2fsck -f /dev/myvg/mylv  # e2fsck -f ,强制检测逻辑卷mylv的文件系统
        e2fsck 1.41.12 (17-May-2010)
        Pass 1: Checking inodes, blocks, and sizes
        Pass 2: Checking directory structure
        Pass 3: Checking directory connectivity
        Pass 4: Checking reference counts
        Pass 5: Checking group summary information
        /dev/myvg/mylv: 12/655360 files (0.0% non-contiguous), 76784/2621440 blocks

            (3)缩减逻辑边界           

        [root@localhost ~]# resize2fs /dev/myvg/mylv 5G  # 这表示自动调整逻辑卷mylv的文件系统大小到5G
        resize2fs 1.41.12 (17-May-2010)
        Resizing the filesystem on /dev/myvg/mylv to 1310720 (4k) blocks.
        The filesystem on /dev/myvg/mylv is now 1310720 blocks long.

           (4)缩减物理边界                

        [root@localhost ~]# lvreduce -L 5G /dev/myvg/mylv    # 这表示缩减逻辑卷mylv的存储空间到5G
        WARNING: Reducing active logical volume to 5.00 GiB
        THIS MAY DESTROY YOUR DATA (filesystem etc.)
        Do you really want to reduce mylv? [y/n]: y    # 注意:这里会提示你当前的操作有可能会使得数据丢失,问你是否要继续?(想清楚额,后果自付!!!)
        Reducing logical volume mylv to 5.00 GiB
        Logical volume mylv successfully resized

        (5)重新把逻辑卷挂载上去,查看数据是否丢失      

         wKioL1PLv2fR76GDAAShhrENGI4117.jpg

    

        呼!!!看到这里,各位看官是不是都有点视觉疲劳了?

        革命尚未成功,同志仍须继续!

        不过,写到这里篇幅已经不够了,本人决定另起一篇博客(是这篇博客的续写)继续写下去。

        欲知后事如何,且听下回分解!

            

        


            

本文出自 “恒则有成” 博客,请务必保留此出处http://hjqjk.blog.51cto.com/5970897/1440623

lvm(逻辑卷管理)的魅力