逻辑卷管理员(Logical Volume Manager)介绍

一、简介

  • 我们在平时使用磁盘的时候经常会遇到磁盘的空间因为经常使用而造成磁盘的空间使用殆尽,但再重新更换磁盘又太麻烦,不仅要重新格式化磁盘,还要将原磁盘里数据再拷过去,特别的不方便,在Linux中为了解决这个问题,就提出了LVM的概念。
  • LVM的好处在于可以弹性的调整filesystem的容量!而并非在于效率与数据保存方面。需要数据读写效率或者是数据的可靠性,可以参考我的前一篇介绍RAID的文章。 LVM可以将多个实际partition整合在一起,让这些partitions看起来就像是一块磁盘一样!而且,在未来还可以很方便地新增或移除其他的实际partition到这个LVM管理的磁盘当中。这样的好处就是整个磁盘的使用空间实际上是可以随时变更的,具有很好的弹性!

二、LVM中涉及到的一些概念

  • LVM,英文全称为:Logical Volume Manager,中文可以翻译为:逻辑卷管理员,个人一般喜欢简单叫成:逻辑卷管理,只是个人喜好而已!
  • LVM可以将多个实际的partitions(或disk)通过软件组合成一块更大的且独立的磁盘,然后对这个新组成的大磁盘进行分区,再通过挂载后即可使用!在这个过程中会遇到以下几个概念:
    • Physical Volume, PV, 物理卷轴—组成LVM最底层的部分
      通过pvcreate指令可以将PV处理成LVM中最底层的实体卷轴,但是在执行pvcreate操作之前必须要先将实际的partition (或Disk)的filesystem调整为LVM的识别码(说白点就是要先将该磁盘的filesystem格式化成能为LVM识别的filesystem),调整system ID的方法就是通过gdisk指令!
    • Volume Group, VG, 卷轴群组
      可以将多个PV 整合成VG ,这个被组成的VG就是构成LVM的大磁盘!后面的操作只是针对这个组成的大磁盘进行格式化、分区等一些类似于对普通磁盘的操作!至于这个大磁碟最大可以支持多大的容量,这与下面要说明的PE 以及LVM 的版本有关。在预设的情况下, 使用32位版的Linux 系统时,基本上LV 最大仅能支援到65534 个PE 而已,若使用预设的PE为4MB 的情况下, 最大容量则仅能达到约256GB 而已;不过,这个问题在64位版的Linux 系统上面就不存在了!LV几乎没有容量限制!
    • Physical Extent, PE, 物理范围区块
      就像上面所说的LVM预设使用4MB的PE区块,而LVM的LV在32位系统上最多仅能含有65534个PE (lvm1的格式),因此预设的LVM的LV会有4M*65534/(1024M/G )=256G。这个PE是整个LVM最小的储存区块,也就是说,数据实际上都是通过写入PE来处理的。简单的说,这个PE就有点像档案系统里面的block大小啦。在CentOS 6.x以后,由于默认使用lvm2版本,以及系统转为64位,所以这个限制已经不存在了。
    • Logical Volume, LV, 逻辑卷轴
      最终,VG还可以被切成LV,这个LV就是最后可以被格式化使用的类似于分割槽的东西!LV的大小是不可以随意指定的!由于PE是整个LVM的最小储存单位,所以LV的大小实际上是与在此LV内的PE总数有关。为了方便使用者利用LVM来管理其系统,因此LV的装置档名通常指定为『/dev/vgname/lvname』的样式,也可以按照自己的习惯指定!
      这里写图片描述
      实现LVM的操作过程可以大致参考下图所示的流程:
      这里写图片描述
      上图是由下往上进行操作的!

三、LVM创建实际操作流程

  • 想要创建LVM,首先系统内核必须要支持且安装了lvm2软件,好一点的是,现在大部分的CentOS系统都已支持这个软件了,且都已经默认安装了!若想知道自己的系统是否已经安装该软件可以使用:rpm -qi lvm2 指令查询!
  • 若想创建LVM首先要做的一步就是对已有的物理磁盘进行格式化,在CentOS6中可以使用fdisk指令,在CentOS7中可以使用gdisk指令,具体的操作可以这里就不细讲了。下图所示的是将分好区的磁盘格式化成LVM可以识别的文件系统格式:
    这里写图片描述
    这一步也可以不进行文件系统设定,提前设定的好处就是到后面避免有些LVM指令识别不出来partition。
1、PV阶段
  • 创建PV可能会涉及到以下指令:
指令描述
pvcreate将物理partition 创建成为PV
pvscan搜寻目前系统里面任何具有PV状态 的磁盘(或partition)
pvdisplay显示出目前系统上面的PV 状态
pvremove移除PV 属性,让该磁盘(或partition) 不具有PV 属性
1)创建pv:pvcreate /dev/vda{1,2,3,4}

这里写图片描述

2)查看pv:pvscan

这里写图片描述
上图显示了每个PV 的信息与系统中所有的PV消息。最后一行显示的是:整体PV 的容量大小/ 已经被使用到VG 的PV大小/ 剩余的PV大小

3)查看pv状态:pvdisplay

这里写图片描述
由于PE是在VG建立时才给予的参数,此时该PV还未进行设置,所以有关的参数均为0

2、VG阶段
  • 与VG相关的指令:
指令介绍
vgcreate创建VG
vgscan搜索系统上面是否有VG存在
vgdisplay显示目前系统上的VG状态
vgextend在VG内增加额外的PV
vgreduce在VG内移除PV
vgchange设置VG是否启动
vgremove删除一个VG
1)创建VG:vgcreate [ -s N[mgt]] VG名称 PV名称
-s :后面接的是PE的大小,单位可以是m,g,t(大小写均可)。

这里写图片描述

2)搜索系统中VG:vgscan

这里写图片描述

3)显示VG的详细信息:vgdisplay firstvg

这里写图片描述
上图中由于尚未创建LV,所以PE的数量均是可用的!

4)扩展VG容量:vgextend firstvg 、dev/sdd4

这里写图片描述

5)查看VG详细信息:vgdisplay firstvg

这里写图片描述

3、LV阶段
  • 创建好VG之后,接下来就是创建LV了。
  • 同上先介绍一些需要用到的指令:
指令介绍
lvcreate创建LV
lvscan查询系统中存在的LV
lvdisplay显示系统中LV的详细信息
lvextend增加LV的容量大小
lvreduce减少LV的容量大小
lvremove删除LV
lvresize对LV的容量大小进行调整
1)创建LV:
  • 指令格式:
lvcreate [LN[mgt]] [-n LV名称] VG名称
lvcreate [ -l N] [-n LV名称] VG名称

这里写图片描述

2)查看系统中的LV:lvscan

这里写图片描述

3)显示LV的详细信息:lvdisplay /dev/firstvg/firstlv

这里写图片描述
注:这里有个比较麻烦的地方,就是LV在使用时必须使用全名,也即:/dev/firstvg/firstlv。这一点要特别注意!

4)创建LV文件系统

这里写图片描述

5)进行挂载

这里写图片描述

6)检查可否能使用

这里写图片描述

三、扩展LV容量

  • LVM的最大特色就是可以弹性的调整磁盘的容量大小,可以根据前图所示的LVM创建流程进行参考操作,具体的操作流程如下:
    1)VG阶段需要有剩余的磁盘容量:LVM的创建是基于LV的,所以要对其进行扩展也是与对LV进行扩展的;但是LV的创建又是给予VG的,所以要想扩展LV就必须要保证VG的容量满足要求才行!若VG的容量不能通过PV扩展(因为VG的创建是基于PV实现的,但是PV的创建是基于物理磁盘的,所以PV不足,也就意味着磁盘已满,需要另加磁盘才行),则就只能添加物理磁盘,然后通过创建PV来扩展VG!
    2)LV阶段需要更多的可用容量:VG的容量若是满足了扩展的要求,则就可以使用lvresize指令来将剩余的容量添加到LV设备里即可!
    3)文件系统阶段的扩展:Linux系统实际操作的并不是LV,而是依托于LV的文件系统!所以在对LV进行扩展了之后就需要对文件系统进行操作!这一步非常重要,因为这一步是针对文件系统进行的操作!但是由于涉及到改变文件系统容量的大小,这也就涉及到要更改该文件系统的元数据(inode/block/superblock等数据信息),但是想要改动这些信息是非常难的,所以可以通过对block group(文件系统在被创建时,自动生成的)的修改来实现对文件系统的修改!
    注: 扩展文件系统并不是没有进行格式化,只是对新增加的那部分进行了格式化!因为之前的那部分已经被格式化过了,而这部分需要经过格式化后,在通过指令将信息反馈到原来那部分的superblock中即可!
  • 接下来演示对LVM进行扩展的大致过程:
1)查看剩余的VG容量大小:

这里写图片描述
由上图可知,目前还剩余1.9G的容量,所以接下来需要扩展的容量大小只要不超过1.9G即可!

2)对现有LV扩展1G:

这里写图片描述
上图中的指令很简单,指令在前面有过介绍,-l和-L都可以实现对LV的扩展,容量前的“+”表示要增加的容量大小,若要减小容量大小,则在前面使用“-”即可!

3)查看扩展:

这里写图片描述

4)将扩展信息写入文件系统:
这里写图片描述
根据上图显示的,说明已经扩展成功了,而且文件系统也已经识别到了!
5)查看扩展:

这里写图片描述

  • 通过以上步骤,LVM的扩展就算真正完成了,整个扩展的过程不是很复杂,同时还都是在线完成的,所以说操作起来的真的是非常方便!
    关于LVM的缩减问题,由于XFS文件系统并没有设计文件系统的缩减,所以XFS文件系统的大小是不能进行缩减的,若是想实现缩减功能则需要在EXT4文件系统上进行操作!

四、动态调整磁盘使用率

  • 首先介绍一个概念,LVM thin Volume。这是一个非常有意思的东西,其理念是:先建立一个可以用多少容量才分配实际写入多少容量的磁盘容量储存池(thin pool), 然后再由这个thin pool 去产生一个『指定要固定容量大小的LV 装置』!这个LV 就比较有意思了!因为你虽然会看到『查看时显示的容量可能会有10GB ,但实际使用中, 该设备在用到多少容量时,才会从thin pool中去实际取得所需要的容量』!说的直白点就是,可能我们的thin pool 只有1GB 的容量, 但是可以分配给一个10GB 的LV 设备!而该设备实际使用到500M 时,整个thin pool 才分配500M 给该LV !所以这里就存在一个问题,就是在所有由thin pool 所分配出来的LV 设备中,总的实际磁盘使用量是绝对不能超过thin pool 的最大实际容量!就好比,若 thin pool 仅有1GB, 那所有的由这个thin pool 创建出来的LV 设备内的实际用量,就绝对不能超过1GB 啊!
  • 接下来将会介绍一下LVM thin Volume的使用流程:
1)创建thin pool

这里写图片描述
由上图可知,创建了一个名为firsttpool的thin pool。

2)查看创建

这里写图片描述

下图可以以更加简单明了的方式进行查看:
这里写图片描述

3)创建一个指定容量大小的LV设备

这里写图片描述

4)进行格式化和挂载

这里写图片描述

5)测试

这里写图片描述
由上图可知,虽然thin pool很好用,但在使用时也要特别注意!

五、LV磁盘快照

  • 快照也是LVM系统中的一个非常重要的功能!快照的概念与VMware Workstation虚拟机上的快照概念类似,也是一种对先前文件或者数据状态的保存;快照就是将当时的系统信息记录下来,就好像拍照一样!未来若有任何数据被更动了,则原始数据会被搬移到快照区,没有被更动的数据则由快照区与文件系统共享。
    这里写图片描述
  • 左边的图为最初建置LV磁盘快照区的状况,LVM会预留一个区域(左边图的左侧四个PE区块)作为数据存放处。此时快照区内并没有任何数据,而快照区与系统区共享所有的PE数据,因此你会看到快照区的内容与文件系统是一模一样的。等到系统运作一阵子后,假设A区域的数据被更动了(上面右边图所示),则更动前系统会将该区域的数据移动到快照区,所以在右边图的快照区被占用了一块PE成为A,而其他B到L的区块则还是与文件系统共用!
  • LVM的磁盘快照功能也可以用做备份工具,同时由于它只备份更改过的数据,未更改的数据则不进行备份,所以占用的磁盘空间会较少,而且还不用特意指定备份的位置,系统会自动进行判断!非常方便!
    由于LVM的快照区与原有的LV会共用很多PE区块,所以快照区与被快照的LV必须要在同一个VG上才行!
  • 还有一点就是有人或许会想到使用thin pool 的功能来制作快照,这种方式也是可以实现的,但是不建议使用,因为限制因素比较多,实现起来非常麻烦,所以这里也不进行详细的介绍了!
1、传统快照区的建立
1)查看VG剩余容量

这里写图片描述

2)创建快照区

这里写图片描述

3)进行检查

这里写图片描述

4)进行挂载测试

这里写图片描述

可能会有人问为什么要是用nouuid这个参数,那是因为在XFS文件系统上是不允许有相同的UUID 文件系统被挂载,因此要加上那个nouuid 的参数,让文件系统忽略相同的UUID 所造成的问!至于为什么会出现相同的UUID,是因为快照出来的文件系统是一模一样的!

5)检查

这里写图片描述
两个挂载的文件系统的数据信息是一模一样的!

2、利用快照区复原系统
  • 利用快照区恢复原系统,有一个问题需要注意一下,就是要恢复的数据量不能超过快照区的实际容量,这个是硬性要求,没得改的!!若是原始数据被迁移到快照区的数据量超出了快照区的容量,快照区就无法容纳了,此时快照功能也就失效了!!
    先删除/srv/firstlvm/test.file文件,一会使用快照将其进行恢复!
    下图所示的是对该快照进行备份
    这里写图片描述
  • 上图中那一条命令执行后,可以在 /home 目录下找到一个名为 firstlvm_dump 的文件,这是一个备份文件!至于为什么要创建备份,而不是直接将/dev/firstvg/firstlv进行格式化,再通过将快照复制给/dev/firstvg/firstlv将其恢复,原因就在于进行格式化,再通过快照进行恢复的话,可能会由于数据本身过大,而快照的容量若不够的话,就会造成有部分数据无法复制过去,造成数据的丢失!!同时通过快照,还可以发现最近更改过什么数据!!
    这里写图片描述
  • 上图中所有针对设备的操作都必须要先将该设备卸载丢,再进行操作!!
    这里写图片描述
    根据上图所示,之前被删除的文件已经被恢复了!!

六、移除LVM

  • 被用作LVM的磁盘必须要先将LVM卸载丢,才能用作他处,否则系统可能会报错!对LVM设备的移除操作也不难,只需按照以下流程进行即可:
    1.先卸载系统上面的LVM 文件系统(包括快照与所有LV);
    2.使用lvremove 移除LV ;
    3.使用vgchange -an VGname 让VGname 这个VG 不具有Active 的标志;
    4.使用vgremove 移除VG:
    5.使用pvremove 移除PV;
    6.最后,使用fdisk 修改ID 回来啊!
    具体操作就不再进行演示了!!!

七、LVM的相关指令汇总

任务PV 阶段VG 阶段LV 阶段filesystem (XFS / EXT4)
搜寻(scan)pvscanvgscanlvscanlsblk, blkid
建立(create)pvcreatevgcreatelvcreatemkfs.xfs 和 mkfs.ext4
列出(display)pvdisplayvgdisplaylvdisplaydf, mount
增加(extend)vgextendlvextend (lvresize)xfs_growfs 和 resize2fs
减少(reduce)vgreducelvreduce (lvresize)不支持 和 resize2fs
删除(remove)pvremovevgremovelvremoveumount,重新格式化
改变容量(resize)lvresizexfs_growfs 和 resize2fs
改变属性(attribute)pvchangevgchangelvchange/etc/fstab, remount

个人并不愿意进行单纯的命令整理,所以这里只是将指令汇总一下,并没有作详细说明!具体的用法,个人一般都是直接查看帮助文档的!常用的能够知道,其余的并不太喜欢死记!!

八、LVM数据写入方式

  • 最后一点要介绍的是LVM的数据写入方式(这里也只是简单的介绍一下),LVM的数据写入方式分为以下两种:
    • 线性模式(linear):假如我将/dev/vda1, /dev/vdb1 这两个partition 加入到VG 当中,并且整个VG 只有一个LV 时,那么所谓的线性模式就是:当/dev/vda1 的容量用完之后,/dev/vdb1 的磁盘才会被使用到, 这也是建议使用的模式。
    • 交错模式(triped):就是将一份数据拆成两部分,分别写入/dev/vda1 与/dev/vdb1 ,感觉上与RAID-0有点像!这样一来,一份数据用两块磁盘来写入,理论上,读写的效率会比较好。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值