linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux及计算机学科基础理论版 >

LVM逻辑卷管理器配置使用详解

时间:2017-05-16  来源:未知  作者:linuxsir首页

简介 
逻辑卷是一种device mapper技术,即可以将一个或者多个底层块设备组织成一个逻辑设备,从而提供动态改变大小不停机情况下添加磁盘快照以及备份 等功能,使得对于磁盘的管理更加方便。

 

Logical Volume Manager (LVM),逻辑卷管理LVM是一个多才多艺的硬盘系统工具,无论在Linux或者其他类似的系统,都是非常的好用。传统分区使用固定大小分区,重新调整大小十分麻烦,但是LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘,可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷,LVM并不需要重启就可以让内核知道分区的存在。文章详细记录在PV/VG/LV中3个阶段的创建/添加/扩展/减小/删除等实战操作步骤,方便自己回顾一些基础用法,也希望能够帮助大家更好的理解LVM的原理。

  • 逻辑卷的组成结构 
    逻辑卷的组成如下图所示:

从上图中可以看出,整个逻辑卷的体系分为3个层次: 
底层的PV 
中层的VG 
最上层的LV 
最底层的PV作为整个逻辑卷体系的最底层,可以理解为打上了可以被纳入逻辑卷管理体系的标签的整块磁盘或者磁盘上的某个分区;中间层的VG是逻辑卷的卷组,由一个或者多个PV组成,并且用同一标准进行分块,每一块被称为PE(Physical Extent)或者PP(Physical Partition),作为LVM的最小寻址单元;最上层的LV是从VG中划分出来的卷,并且作为设备文件,可以在其上面创建各种linux支持的文件系统。在LV层面也有一个概念LE(Logical Extent)。LE与PE一一对应。

  • 针对LVM底层PV的一些基本操作 
    对于底层的PV而言,操作的命令如下表所示:

命令解释
pvchange 控制指定PV是否可以分派新空间的权限
pvck 检查PV的LVM元数据的一致性
pvcreate 将指定磁盘或分区转化为PV
pvdisplay 详细地查看系统当前的PV情况
pvmove 在同一VG卷组里面移动一个PV的数据到另一个PV里面
pvremove 删除PV标签,即移除PV
pvs 简略地查看系统当前的PV情况
pvresize 当PV对应的设备分区(如md软raid)扩容之后,利用该命令可以扩容PV
pvscan 扫描所有打着PV标签的设备文件

      一些pv操作的实验如下所示:

$ lsblk /dev/sdb /dev/sdd1 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb    8:16   0   7G  0 disk  sdd1   8:49   0   7G  0 part    创建pv  $ pvcreate /dev/sdb /dev/sdd1   Physical volume "/dev/sdb" successfully created   Physical volume "/dev/sdd1" successfully created    查看pv $ pvs   PV         VG   Fmt  Attr PSize PFree   /dev/sdb        lvm2 ---  7.00g 7.00g   /dev/sdd1       lvm2 ---  7.00g 7.00g    扫描pv $ pvscan   PV /dev/sdb          lvm2 [7.00 GiB]   PV /dev/sdd1         lvm2 [7.00 GiB]   Total: 2 [14.00 GiB] / in use: 0 [0   ] / in no VG: 2 [14.00 GiB]    检查pv元数据 $ pvck /dev/sdb   Found label on /dev/sdb, sector 1, type=LVM2 001   Found text metadata area: offset=4096, size=1044480 $ pvck /dev/sdd1   Found label on /dev/sdd1, sector 1, type=LVM2 001   Found text metadata area: offset=4096, size=1044480    删除pv $ pvremove /dev/sdd1   Labels on physical volume "/dev/sdd1" successfully wiped 
  • 针对LVM中层VG的一些基本操作 
    对于中层的VG而言,操作的命令如下表所示

命令命令解释
vgcfgbackup 备份VG描述文件(默认/etc/lvm/backup,亦可自由指定)
vgcfgrestore 从备份的VG描述文件对VG元数据进行恢复
vgck 检查VG
vgchange 修改特定VG的属性,包括是否激活,uuid号,……
vgconvert 修改VG元数据格式,例如从LVM1改为LVM2
vgcreate 创建VG卷组
vgs 简略地查看系统VG卷组情况
vgdisplay 详细地查看系统VG卷组的使用情况
vgexport 将特定VG变为未知状态,用于迁移卷组到别的系统上面
vgimport 将未知状态的特定VG卷组变为正常状态,用于迁移卷组到别的系统上面
vgextend 将PV添加到特定VG中
vgimportclone 用于导入重复的卷组(例如某卷组的快照),并修改其UUID
vgmerge 在满足特定条件下,对多个卷组进行归并
vgmknodes 重新创建卷组设备目录以及逻辑卷特殊文件
vgreduce 将未使用的PV从特定VG中移除
vgremove 移除特定VG
vgrename 重命名指定VG的名称
vgsplit 将指定的PV从一个VG里面挪动到另一个VG里面
vgscan 扫描系统的VG

        一些vg的操作如下所示

$ pvs   PV         VG   Fmt  Attr PSize PFree   /dev/sdb        lvm2 ---  7.00g 7.00g   /dev/sdc1       lvm2 ---  4.00g 4.00g   /dev/sdd1       lvm2 ---  7.00g 7.00g    创建vg0和vg1 $ vgcreate vg0 /dev/sdb /dev/sdd1   Volume group "vg0" successfully created $ vgcreate vg1 /dev/sdc1   Volume group "vg1" successfully created    查看vg $ vgs   VG   #PV #LV #SN Attr   VSize  VFree    vg0    2   0   0 wz--n- 13.99g 13.99g   vg1    1   0   0 wz--n-  4.00g  4.00g    扫描vg $ vgscan   Reading all physical volumes.  This may take a while...   Found volume group "vg0" using metadata type lvm2   Found volume group "vg1" using metadata type lvm2    从vg0中移除/dev/sdd1 $ vgreduce vg0 /dev/sdd1   Removed "/dev/sdd1" from volume group "vg0"    /dev/sdd1添加到vg1当中 $ vgextend vg1 /dev/sdd1   Volume group "vg1" successfully extended    /dev/sdd1从vg1挪动到vg0当中 $ vgs   VG   #PV #LV #SN Attr   VSize  VFree    vg0    1   0   0 wz--n-  7.00g  7.00g   vg1    2   0   0 wz--n- 10.99g 10.99g $ vgsplit vg1 vg0 /dev/sdd1   Existing volume group "vg0" successfully split from "vg1" $ vgs   VG   #PV #LV #SN Attr   VSize  VFree    vg0    2   0   0 wz--n- 13.99g 13.99g   vg1    1   0   0 wz--n-  4.00g  4.00g 
  • 针对LVM上层LV的一些基本操作 
    对于上层的LV而言,操作命令如下表所示:

命令命令解释
lvchange 修改指定LV的一些属性,包括是否是激活状态、是否只读……
lvconvert 转换指定LV的属性,从线性转化为镜像或者快照
lvcreate 创建LV
lvs 简略地查看系统内的LV情况
lvdisplay 详细地查看系统内的LV情况
lvextend 扩展指定LV的容量大小
lvm 管理LVM的一个shell工具
lvmconf LVM配置修改器
lvmconfig 查看LVM配置的工具
lvmdiskscan 扫描所有LVM2可见的设备
lvmdump 创建LVM的dump文件,用于诊断
lvmetad 缓存LVM元数据的守护程序
lvmpolld LVM操作命令的轮询守护程序
lvreduce 缩容指定的LV
lvremove 删除指定的LV
lvrename 重命名指定的LV
lvresize 调整指定LV的大小,即可以扩容也可以缩容
lvscan 扫描系统的LV

        一些LV的操作如下所示:

创建逻辑卷lv0 $ lvcreate -n lv0 -L 10G vg0    查看系统内的逻辑卷情况 $ lvs   LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert   lv0  vg0  -wi-ao---- 10.00g                                                       逻辑卷的扩容 $ lvextend -L +2G /dev/vg0/lv0   Size of logical volume vg0/lv0 changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).   Logical volume lv0 successfully resized.    同步文件系统(如果是ext文件系统,则使用resize2fs命令) $ xfs_growfs /dev/vg0/lv0 meta-data=/dev/mapper/vg0-lv0    isize=256    agcount=4, agsize=655360 blks          =                       sectsz=512   attr=2, projid32bit=1          =                       crc=0        finobt=0 data     =                       bsize=4096   blocks=2621440, imaxpct=25          =                       sunit=0      swidth=0 blks naming   =version 2              bsize=4096   ascii-ci=0 ftype=0 log      =internal               bsize=4096   blocks=2560, version=2          =                       sectsz=512   sunit=0 blks, lazy-count=1 realtime =none                   extsz=4096   blocks=0, rtextents=0 data blocks changed from 2621440 to 3145728    逻辑卷的缩容(只针对ext文件系统) 如何缩减lvs? $ 首先,取消挂载 umount /mnt/lv0 其次,缩减文件系统 $ resize2fs /dev/vg/lv0 50G    ext文件系统缩减到50G xfs文件系统只能扩不能缩。。。 然后,缩减逻辑卷 $ lvreduce -L 50G /dev/vg/lv0 最后,再挂载 mount /dev/vg/lv0 /mnt/lv0       注意! lvextend -r 选项,就直接resizefs了,因此,就不需要再resize2fs或者xfs_growfs了 
  • 关于LVM的快照功能 
    LVM快照是一种以空间换时间时间的方式制作的lvm卷副本。它只在lvm中工作,并只在源逻辑卷发生改变时占用快照卷的空间。如果源卷的变化达到1GB这么大,快照卷同样也会产生这样大的改变。因而,对于空间有效利用的最佳途径,就是总是进行小的修改。如果快照将存储空间消耗殆尽,我们可以使用lvextend来扩容。而如果我们需要缩减快照所占用卷的大小,可以使用lvreduce。实验如下:

       目标逻辑卷信息如下:

$ pvs   PV         VG   Fmt  Attr PSize PFree   /dev/sdb   vg0  lvm2 a--  7.00g    0    /dev/sdd1  vg0  lvm2 a--  7.00g 1.99g $ vgs   VG   #PV #LV #SN Attr   VSize  VFree   vg0    2   1   0 wz--n- 13.99g 1.99g $ lvs   LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert   lv0  vg0  -wi-ao---- 12.00g

       现在对逻辑卷lv0创建快照,命名为snaplv0

$ lvcreate -s -n snaplv0 -p r -L 1G /dev/vg0/lv0   Logical volume "snaplv0" created. $ vgs   VG   #PV #LV #SN Attr   VSize  VFree      vg0    2   2   1 wz--n- 13.99g 1016.00m $ lvs   LV      VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert   lv0     vg0  owi-aos--- 12.00g                                                      snaplv0 vg0  sri-a-s---  1.00g      lv0    0.00

        这里/dev/vg0/lv0的挂载点为/mnt。往/mnt里面写入300MB的随机文件,再观察快照情况,可以看    到,快照对应的Data一项有所增长:

dd if=/dev/urandom of=/mnt/2.txt bs=1M count=300 300+0 records in 300+0 records out 314572800 bytes (315 MB) copied, 27.5877 s, 11.4 MB/s ls 1.txt  2.txt  data $ lvs   LV      VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert   lv0     vg0  owi-aos--- 12.00g                                                      snaplv0 vg0  sri-a-s---  1.00g      lv0    29.42  

        用snaplv0对逻辑卷进行恢复,注意恢复之前需要先将对应的逻辑卷卸载。恢复之后可以看到,原有的snaplv0消失,因此可以得出结论,LVM的快照是一次性的:

umount /mnt $ lvconvert --merge /dev/vg0/snaplv0    Merging of volume snaplv0 started.   lv0: Merged: 71.0%   lv0: Merged: 91.9%   lv0: Merged: 100.0% ls /dev/vg0 lv0 mount /dev/vg0/lv0 /mnt ls /mnt 1.txt  data

       如果想要删除LVM快照,用lvremove命令,后面跟上快照设备文件的绝对路径即可,例如:

$ lvremove /dev/vg0/snaplv0

更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2017-05/143774p2.htm

linux
友情链接