LVM逻辑卷管理

一、简述

什么是逻辑卷?LVM(Logical Volume Manager)利用Linux内核device-mapper实现存储系统的虚拟化。通过LVM,把底层存储硬件抽象化成存储逻辑块,再将这些逻辑块集合构成存储池,从存储池空间划分分区,可以简单地扩大或缩小分区,而不用担心硬盘没有足够的连续空间。

使用逻辑卷分区有什么用?使用逻辑卷分区重点在于可以弹性地调整文件系统的容量。在实际环境中我们经常会遇一个文件系统空间不足,想要扩展却又十分麻烦,一开始划分空间偏大,想要缩减也是同样不方便。而LVM可以很好地解决这些问题。

逻辑卷的缺点:由于LVM的原理,导致一个文件数据可能分布在多个硬件设备上,这些设备中只要有一个损坏,数据便有丢失。而且存储效率上也有所下降。通常LVM结合RAID使用,提升读写效能或数据可靠性。

二、LVM原理

    首先理解四个逻辑卷基本概念:

    1、PV(Physical Volume)物理卷:LVM的基本存储逻辑块,可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域(physical extents)。

    2、VG(Volume Group)卷组:一个或多个物理卷组成卷组,即构成一个存储池。可以在卷组上创建“LVM分区”(逻辑卷)

    3、LV(Logical Volume)逻辑卷:由若干物理区域组成的虚拟分区,类似于硬盘分区

    4PE(Physical Extent)物理区域:硬盘可供指派给逻辑卷的最小单位。

    5、LE(Logical Extent)逻辑区域:物理区域被指派给逻辑卷后变为逻辑区域,组成逻辑卷的最小单位。

lvm.jpg

简答来讲,我们先将块设备初始化为PV,将若干个PV划分为一个VG卷组并命名,卷组被创建时,将PV划分为若干个PE,默认PE大小为4M,即这些PE构成了卷组,最后我们从卷组中拿出若干个PE组成逻辑卷并命名,相当于划分出一块硬盘分区,逻辑卷创建后就可以正常使用它了,比如进行格式化操作,然后挂载到目录树上。

三、LVM创建演示

以下操作环境为Centos6.8

准备工作:我划分了三个分区/dev/sdb{1,2,3},并设置分区类型为 Linux LVM

blob.png

PV初始化

[root@centos6 mapper]$ pvcreate /dev/sdb{1,2,3}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created

简单查看创建PV信息

[root@centos6 mapper]$ pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1       lvm2 ---- 5.00g 5.00g
  /dev/sdb2       lvm2 ---- 5.00g 5.00g
  /dev/sdb3       lvm2 ---- 5.00g 5.00g

详细查看PV信息

[root@centos6 mapper]$ pvdisplay
  "/dev/sdb1" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0               #在未被加入卷组前,未划分PE
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               jxLEiT-LOXv-9zqY-Vui2-QRNN-AkN4-vcZehm
   
  "/dev/sdb2" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               vHa18C-QW5D-8lB1-2dRX-jxOF-OcCF-aFBDSb
   
  "/dev/sdb3" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb3
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               NtfNOu-NRYs-CRv8-TcyI-HXbg-Nidr-89Kiwf

VG:创建一个名为jat的卷组

[root@centos6 mapper]$ vgcreate jat /dev/sdb{1,2}
  Volume group "jat" successfully created

查看VG信息

[root@centos6 mapper]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  jat    2   0   0 wz--n- 9.99g 9.99g
[root@centos6 mapper]# vgdisplay
  --- Volume group ---
  VG Name               jat
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               9.99 GiB            #卷组容量为两个PV容量总
  PE Size               4.00 MiB            #默认PE大小为4M
  Total PE              2558                #PE的总数
  Alloc PE / Size       0 / 0               #PE分配的情况
  Free  PE / Size       2558 / 9.99 GiB
  VG UUID               bwm8dx-QYgR-H0cO-xbCe-AvGe-zvDL-qfNIlp

再来看下PV信息

[root@centos6 mapper]$ pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               jat
  PV Size               5.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB       #相关PE的信息已更新
  Total PE              1279
  Free PE               1279
  Allocated PE          0
  PV UUID               jxLEiT-LOXv-9zqY-Vui2-QRNN-AkN4-vcZehm

创建LV

[root@centos6 mapper]$ lvcreate -L 2G -n pap1 jat
  Logical volume "pap1" created.
[root@centos6 mapper]$ lvcreate -L 4G -n pap2 jat
  Logical volume "pap2" created.

查看LV

[root@centos6 mapper]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  pap1 jat  -wi-a----- 2.00g                                                    
  pap2 jat  -wi-a----- 4.00g                                                    
[root@centos6 mapper]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/jat/pap1        #逻辑卷设备地址
  LV Name                pap1
  VG Name                jat
  LV UUID                heIpsn-nhPS-BH91-CDrU-6pi0-LFyR-MZBeRs
  LV Write Access        read/write
  LV Creation host, time centos6.localdomain, 2016-09-02 20:26:27 +0800
  LV Status              available            #新创建的LV默认激活可用
  # open                 0
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

引用LV设备有多个路径

形式1:/dev/mapper/VG_NAME-LV_NAME

形式2:/dev/VG_NAME/LV_NAME

以上都是软连接指向实际设备文件/dev/dm-N

blob.png

格式化逻辑卷pap1,挂载

mkfs.ext4 /dev/jat/pap1
mount /dev/jat/pap1 /mnt/pap1

使用df命令查看,逻辑卷pap1可用容量

blob.png

尝试向逻辑卷挂载点拷贝一些数据,完全正常,至此逻辑卷创建成功。

blob.png

四、扩展VG,LV

扩展VG

[root@centos6 ~]$ vgextend jat /dev/sdb3        #给卷组jat新加一个PV
  Volume group "jat" successfully extended
[root@centos6 ~]# vgs                           #查看VG容量已增加了5G
  VG   #PV #LV #SN Attr   VSize  VFree
  jat    3   2   0 wz--n- 14.99g 8.99g

在线扩展LV

命令工具:lvextend

-l|–extents [+]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}]

    此选项可以指定逻辑卷新的LE数量,或增加的数量,也可指定百分比形式扩展

-L|–size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE]}

    此选项指定大小来扩展

lvextend -l +100%FREE /dev/jat/pap1     #将jat卷组的所有剩余PE分配给pap1
lvextend -L 5G /dev/jat/pap1            #将pap1扩展至5G大小
lvextend -L +1G /dev/jat/pap1           #增加1G的容量

扩展前,vgdisplay 查看卷组使用情况,原始pap1容量

blob.png

blob.png

开始扩展pap1

[root@centos6 ~]# lvextend -L +2G /dev/jat/pap1
  Size of logical volume jat/pap1 changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents).
  Logical volume pap1 successfully resized.

查看pap1 容量增加了2G

blob.png

再对文件系统调整大小

[root@centos6 ~]$ fsadm resize /dev/jat/pap1
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/jat-pap1 is mounted on /mnt/pap1; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/mapper/jat-pap1 to 1048576 (4k) blocks.
The filesystem on /dev/mapper/jat-pap1 is now 1048576 blocks long.

其实可以在扩展LV带上-r选项可省略此步骤,例如

lvextend -r -L +2G /dev/jat/pap1

df-h查看文件系统大小,已经增加2G容量

blob.png

五、缩减LV

缩减操作较为危险,谨慎操作。缩减LV之前确保已对文件系统重新调整大小。

1、卸载逻辑卷

umount /mnt/pap1

2、强制检测文件系统

e2fsck -f /dev/mapper/jat-pap1

3、resize文件系统

[root@centos6 ~]$ fsadm resize /dev/jat/pap1 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/jat-pap1 to 786432 (4k) blocks.
The filesystem on /dev/mapper/jat-pap1 is now 786432 blocks long.

4、缩减LV

[root@centos6 ~]$ lvchange -an /dev/jat/pap1        #停止pap1工作
[root@centos6 ~]$ lvreduce -L 3G /dev/jat/pap1      #缩减至3G
  Size of logical volume jat/pap1 changed from 4.00 GiB (1024 extents) to 3.00 GiB (768 extents).
  Logical volume pap1 successfully resized.

5、激活,挂载

lvchange -ay /dev/jat/pap1
mount /dev/jat/pap1 /mnt/pap1

六、移除PV

移除PV正确操作不会毁坏数据

例如移除/dev/sdb1 此PV

[root@centos6 ~]# pvmove /dev/sdb1   #先把此PV内分配走PE转移到其他PV上
  /dev/sdb1: Moved: 0.1%
  /dev/sdb1: Moved: 12.9%
  /dev/sdb1: Moved: 22.5%
  /dev/sdb1: Moved: 32.7%
  /dev/sdb1: Moved: 42.2%
  /dev/sdb1: Moved: 52.3%
  /dev/sdb1: Moved: 62.8%
  /dev/sdb1: Moved: 71.6%
  /dev/sdb1: Moved: 82.8%
  /dev/sdb1: Moved: 93.5%
  /dev/sdb1: Moved: 100.0%
[root@centos6 ~]# vgreduce jat /dev/sdb1    #在卷组中移除
  Removed "/dev/sdb1" from volume group "jat"
[root@centos6 ~]# pvremove /dev/sdb1        #最后清除PV标志
  Labels on physical volume "/dev/sdb1" successfully wiped

七、LVM快照功能

快照是一种特殊的逻辑卷,是复制原始卷的元数据而建立的逻辑卷,因此它创建速度很快,而且与原始卷在同一卷组。LVM 快照利用一种称为“写时复制(COW – Copy-On-Write)”的技术来跟踪和维持其数据的一致性。当原始卷的数据块(指原始卷所包含的所有数据块,即是空白数据块)第一次写入新数据时,会将旧数据块内容拷贝至快照空间中,也就是说如果只是删掉原始卷某一文件,但是其占用的数据块内容没有改变,删除文件只是不再占有这些数据块,COW认为数据块内容没发生改变,所以不会占用快照空间;还有如果数据块已经重写过一次数据,COW不会再跟踪。

分配给快照的空间,要依据写入的数据量多大和写入的频率,不一定要指派原始卷一样大的空间。快照空间可以扩展或缩减。

利用快照可以记录一个正在使用中的逻辑卷,然后制作一份拍照时刻的备份,由于这个备份是具有一致性的,因此非常的适合于用来备份实时系统。例如,您的运行中的数据库可能即使在备份时刻也是不允许暂停服务的,那么就可以考虑使用LVM的快照模式,然后再针对此快照来进行文件系统级别或者块设备级别的数据备份。

创建快照

为pap1创建一个快照,大小为128M

[root@centos6 pap1]$ lvcreate -s /dev/jat/pap1 -n snap_pap1 -L 128M 
  Logical volume "snap_pap1" created.

查看LV信息,已经有快照相关信息生成

blob.png

blob.png

快照逻辑卷创建时带有文件系统,可以直接挂载,建议只读挂载

[root@centos6 pap1]# mount -r /dev/jat/snap_pap1 /mnt/snap
[root@centos6 pap1]# ll !$
ll /mnt/snap
total 22
drwxr-xr-x. 128 root root  8192 Sep  3 21:04 etc        可以看见原逻辑卷的文件
drwx------.   2 root root 12288 Sep  2 22:21 lost+found
[root@centos6 pap1]# rm -rf /mnt/pap1/etc/issue    #删掉原逻辑卷一个文件做试验
[root@centos6 pap1]# cat /mnt/s
sdb1/ snap/ 
[root@centos6 pap1]# cat /mnt/snap/etc/issue        #快照区备份了原文件,证明备份有效
System time is \t
CentOS release 6.8 (Final)
Kernel \r on an \m
what is your pincode ?

原创文章,作者:cutemsyu,如若转载,请注明出处:http://www.178linux.com/42892

(0)
上一篇 2016-09-06 08:51
下一篇 2016-09-06 08:53

相关推荐

  • mount命令使用详解

    一、挂载(mount)初识     1.什么是挂载         将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录作为其它文件访问入口的行为。     2.常用的文件系统类型 &…

    Linux干货 2016-09-01
  • VIM编辑器用法及练习

    VIM编辑器用法及练习 什么是vim? vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。 Vim的第一个版本由布莱姆·米勒在1991年发布。最初的简称是Vi IMitation,随着功能的不断增加,正式名称改成了Vi IMproved。现…

    Linux干货 2016-10-30
  • 优云APM最佳实践: 诊断平安城市视频网性能问题

    前言: 平安城市已经是一个关系你我他的民生工程,但由于本身系统的复杂性,给运维工作带来了极大的挑战。如何保障摄像头在线率?如何在系统中找到视频系统故障的问题所在?在我们某一次项目经历中,优云APM在发现问题,定位故障等方面,起了很大作用,帮助我们顺利的定位到了系统的故障所在。 平安城市是一个特大型、综合性非常强的管理系统,不仅需要满足治安管理、城市管理、交通…

    Linux干货 2016-08-05
  • 马哥教育网络班22期+第十二周课程练习

    1、请描述一次完整的http请求处理过程。    (1) 客户端与服务端通过TCP三次握手建立或处理连接:接收请求或拒绝请求    (2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程    (3) 处理请求:对请求报文进行解析,获取客户端请求…

    Linux干货 2016-12-29
  • bash中的变量

        对任何一门编程语言来说,最基础的部分就是变量。那什么事变量呢?变量就是把一个已知的可以变动的值,赋给一个固定名字的,用固定的名字代表这个可变动的值。在bash中也不例外,跟大多数编程语言一样,它也有一些自己的语法和规则 bash变量:     1.规则设置:变量和变量的值中间用=连接,=的两…

    Linux干货 2016-08-15
  • sed 流编辑器使用详解

    一、Stream EDitor, 行编辑器   sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出…

    2016-08-10

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-10 09:23