目录

◆ 什么是逻辑卷(lvm)及其有什么优点

◆ 逻辑卷的组成和基础概念

逻辑卷原理图

◆ lvm的实现流程

◆ 放大lV容量

◆ 缩小lv容量

◆ LVM的系统快照

◆ 练习题


*什么是逻辑卷?

   LVMLogical Volume Manager(逻辑卷管理器)的简写。是Linux核心所提供的逻辑卷管理(Logical Volume Management功能。它在硬盘的硬盘分区之上,又创建了一个逻辑层以方便系统管理硬盘分区系统。LVM的做法是将任何块设备(分区,硬盘,raid)通过软件组合起来看起来就像是独立的大磁盘,然后将这块大磁盘再分为可使用的分区lV,挂载使用。

   

LVM的优点:

它是建立在物理存储设备之上的一个抽象层,允许用户生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性;

LVM将存储虚拟化,使用逻辑卷,用户不会受限于物理磁盘的大小;另外,与硬件相关的存储设置被器隐藏,用户可以不用停止应用或卸载文件系统来调整卷大小或数据迁移,可以减少操作成本。

LVM与直接使用物理存储相比,有以下优点:

1、  灵活的容量

当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘分区成单一的逻辑卷.

2、  可伸缩的存储池;

你可以使用简单的命令来扩大或缩小逻辑卷大小,不用重新格式化或分区磁盘设备.

3、  在线的数据再分配

你可以在线移动数据,数据可以在磁盘在线的情况下重新分配.比如,你可以在线更换可热插拔的磁盘.

4、  方便的设备命名;

逻辑卷可以按你觉得方便的方式来起任何名称.

5、  磁盘条块化

你可以生成一个逻辑盘,它的数据可以被条块化存储在2个或更多的磁盘上.这样可以明显提升数据吞吐量.

6、  镜像卷

逻辑卷提供方便的方法来镜像你的数据.

7、  卷快照

使用逻辑卷,你可以获得设备快照用来一致性备份或者测试数据更新效果而不影响真实数据.


* 逻辑卷的组成和基础概念


  物理存储介质(The Physical Media):

    这里指系统的存储设备,如:/dev/hda1/dev/sda等等,是存储系统最低层的存储单元。

  • 物理卷(PV,Physical Volume):

     物理卷就是指磁盘,磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(RAID),是LVM的基本存储逻辑块,但和基本的    物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。当前LVM允许你在每个物理卷上保存这个物理卷的0    2份元数据拷贝。默认为1,保存在设备的开始处。为2,在设备结束处保存第二份备份。

  • 卷组(VG,Volume Group):

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

  • PE:PE是建立VG后将存储空间分成的块,不同于文件系统的block,也不同于raid的chunk,默认大小是,相当于lV的基础块大小

  • 逻辑卷(LV,Logical Volume):

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

  • 快照卷(SnapshotVolumes)

   快照卷提供在特定瞬间的一个设备虚拟映像,当快照开始时,它复制一份对当前数据区域的改变,由于它优先执行这些改变,所以它可以重构当前设备的状态。


* 逻辑卷的结构图   

Physicalvolume (PV)Volume group (VG)Logicalvolume(LV) Physical extent (PE),下面我们用一个简单

的图来说明下物理卷、卷组、逻辑卷他们之间的关系:(该图来自于网络)

wKiom1XkRiGzaWlYAAHCcBy2oiU321.jpg

逻辑卷的创建,就是将多块硬盘创建物理卷,而将这些物理卷以逻辑的形式总成一个容器,然后从这个容器里面创建大小不同的分区文件,而这个容器就是所谓的卷组(VG),而从这个容器里创建大小不同的分区文件,这个分区文件就叫做逻辑卷。


PV阶段的相关命令;

pv相关的常用命令: 格式: command <device>   

  pvcreate:将物理分区新建成为PV

  pvscan:查询出目前系统里面任何具有pv的磁盘

  pvdisplay:显示出目前系统上面的pv详细状态

  pvremove:将pv属性删除,让该分区不具有pv属性

VG阶段的相关命令:

   vgcreate:创建vg的命令

        vgcreate [options] VG名称 PV名称

          -s: 指定PE大小
        vgscan;查找系统上是否有VG存在

        vgdisplay:显示目前系统上面的VG状态

        vgextend:在VG内增加额外的PV

        vgreduce:在VG内删除PV

        vgchange;设置VG是否启动

        vgremove:删除一个VG

LV阶段相关的命令:

    lvcreate [options]  -n lV名称 VG名称

            -L:设定VG的大小

   lvresize -l +-# <device>

   resize2fs [-f] [device] [size]

            -f:强制执行resize操作

             size:如果不加该选项,默认是使用整个分区的容量来处理

            


*LVM的实现过程

1.分出三个同为2G的分区,且systemID调为8e

 

[root@localhost ~]# fdisk /dev/sdb -l

...

 Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048     4196351     2097152   83  Linux

/dev/sdb2         4196352   104857599    50330624    5  Extended

/dev/sdb5         4198400     8392703     2097152   83  Linux

/dev/sdb6         8394752    12589055     2097152   83  Linux

/dev/sdb7        12591104    16785407     2097152   83  Linux

 

2.创建pv

[root@localhost ~]# pvcreate /dev/sdb{5,6,7,8}

  Physical volume "/dev/sdb5" successfully created

  Physical volume "/dev/sdb6" successfully created

  Physical volume "/dev/sdb7" successfully created

全部的分区整合成为一个VG,VG的名称设置为myvg;且PE的大小为16M;

[root@localhost ~]# vgcreate -s 16M myvg /dev/sdb{5,6}

  Volume group "myvg" successfully created

全部的VG容量给LV(可以分给多个LV),LV的名称为mylv;

[root@localhost ~]# lvcreate -L 2G -n mylv myvg 

  Logical volume "mylv" created.

最终格式化这个LV为ext3的文件系统,且挂载在/mnt/lvm中;

[root@localhost ~]# mke2fs -t ext3 /dev/myvg/mylv 

[root@localhost ~]# mkdir /mnt/lvm

[root@localhost ~]# mount /dev/myvg/mylv /mnt/lvm/

[root@localhost ~]# df

    Filesystem              1K-blocks    Used Available Use% Mounted on

     ...

    /dev/sr0                  7587292 7587292         0 100% /run/media/lxy/CentOS 7 x86_64

    tmpfs                      123892       0    123892   0% /run/user/0

    /dev/mapper/myvg-mylv     1998672    3140   1890676   1% /mnt/lvm


*放大LV容量

  因为前面我已经预留了一个分区,前两步可以略过

   1.新增8e类型的分区

   2.利用pvcreate构建pv

   3.利用vgextend加入myvg中

      

[root@localhost ~]# vgextend myvg /dev/sdb7

^[[5~  Volume group "myvg" successfully extended

[root@localhost ~]# vgdisplay myvg

  --- Volume group ---

  VG Name               myvg

  System ID             

  Format                lvm2

  Metadata Areas        3

  Metadata Sequence No  3

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                1

  Open LV               1

  Max PV                0

  Cur PV                3

  Act PV                3

  VG Size               14.95 GiB

  PE Size               16.00 MiB

  Total PE              957

  Alloc PE / Size       128 / 2.00 GiB

  Free  PE / Size       829 / 12.95 GiB

  VG UUID               re5Y8m-2NWR-zGFI-XqXn-ByGY-RCG8-rYQwn2

   4.利用lvresize将新加入的pv内的pe加入到mylv中

 

[root@localhost ~]# lvresize -l +829 /dev/myvg/mylv

  Size of logical volume myvg/mylv changed from 2.00 GiB (128 extents) to 14.95 GiB (957 extents).

  Logical volume mylv successfully resized.

[root@localhost ~]# df /mnt/lvm

Filesystem            1K-blocks  Used Available Use% Mounted on

/dev/mapper/myvg-mylv   1998672  7624   1886192   1% /mnt/lvm

   5.resize2fs将文件系统的容量确实增加

 

[root@localhost ~]# resize2fs /dev/myvg/mylv 

resize2fs 1.42.9 (28-Dec-2013)

Filesystem at /dev/myvg/mylv is mounted on /mnt/lvm; on-line resizing required

old_desc_blocks = 1, new_desc_blocks = 1

The filesystem on /dev/myvg/mylv is now 3919872 blocks long.


[root@localhost ~]# df /mnt/lvm

Filesystem            1K-blocks  Used Available Use% Mounted on

/dev/mapper/myvg-mylv  15367152  9656  14709644   1% /mnt/lvm

 

*  缩减LVM

缩减前准备:

查看逻辑卷使用空间情况;

不能在线缩减,得先卸载;

确保缩减后的空间大小依然能存储原有的所有数据;

在缩减之后应该先强行检查文件,以确保文件系统处于一致性状态;

  1. 本处想将/dev/sdb7抽离出来,要先查看/dev/sdb7的容量大小,然后计算剩余空间是否足够使用

[root@localhost ~]# pvdisplay /dev/sdb7

  --- Physical volume ---

  PV Name               /dev/sdb7

  VG Name               myvg

  PV Size               5.00 GiB / not usable 16.00 MiB

  Allocatable           yes (but full)

  PE Size               16.00 MiB

  Total PE              319

  Free PE               0

  Allocated PE          319

  PV UUID               fzz8ky-ToC9-dyc3-L6te-sffl-MjxO-srV1Xn


[root@localhost ~]# pvscan

  PV /dev/sda2   VG centos   lvm2 [99.51 GiB / 64.00 MiB free]

  PV /dev/sdb5   VG myvg     lvm2 [4.98 GiB / 0    free]

  PV /dev/sdb6   VG myvg     lvm2 [4.98 GiB / 0    free]

  PV /dev/sdb7   VG myvg     lvm2 [4.98 GiB / 0    free]

  Total: 4 [114.46 GiB] / in use: 4 [114.46 GiB] / in no VG: 0 [0   ]


剩余的pv大小:4.98+4.98=9.96GB 



[root@localhost ~]# umount /mnt/lvm

[root@localhost ~]# resize2fs /dev/myvg/mylv ^C

[root@localhost ~]# lvscan

  ACTIVE            '/dev/myvg/mylv' [14.95 GiB] inherit

 [root@localhost ~]# e2fsck -f /dev/myvg/mylv 

[root@localhost ~]# resize2fs /dev/myvg/mylv 10G

resize2fs 1.42.9 (28-Dec-2013)

Resizing the filesystem on /dev/myvg/mylv to 2621440 (4k) blocks.

The filesystem on /dev/myvg/mylv is now 2621440 blocks long.

[root@localhost ~]# mount /dev/myvg/mylv /mnt/lvm/

[root@localhost ~]# df /mnt/lvm/

Filesystem            1K-blocks  Used Available Use% Mounted on

/dev/mapper/myvg-mylv  10255672  9148   9813272   1% /mnt/lv