本文主要内容
- 前言
- 1. 什么是LVM?
- 2. LVM实验
- 1. LVM各组件实现流程表
- 2. 创建LVM及挂载
- 3. LVM的拉伸
- 1. VG容量充足时
- 2. 当VG不足时
- 4.LVM的缩减
- 5. LVM的LV磁盘快照
- 6. LVM的删除
- 7. 如何移除正在使用的PV
- 3.LVM相关命令集合
前言
在linux提升五中,我们介绍了关于磁盘分区等的内容。但是在生产环境中往往会出现这样的情况,在项目初始我们规划主机时给了/home了50G,但是随着项目发展,用户数量不断上升,此时文件系统50G的大小将无法满足项目的要求,这是我们该如何解决这个问题呢?
第一种比较直接的方法,就是增加一个新硬盘,重新格式化,将原本/home的内容复制过来,然后将原本的分区卸载重新挂载新的分区。这的确是解决这个问题的一个方法,但是显然复制将会很花时间,而且若是在后期发现第二次分区时给的容量过大将会浪费大量磁盘空间,那有没有更好的办法来解决我们的问题呢?这就是我们本节要讲的内容——逻辑卷管理器。
1. 什么是LVM?
LVM全名为Logucal Volume Manager,中文翻译为逻辑卷管理器,它可以将几个物理的分区通过软件组合成一块看起来是独立的大磁盘VG,然后将这块大磁盘在经过划分成为可使用的分区LV,最终可以挂载使用。那么其中的原理是什么呢?
我们首先需要了解一下我们以上提到的一些名词,和一些相关的概念。
物理卷(Physical Volume,PV):物理卷就是组成我们需要的大磁盘的最底层,它是怎么来的呢?首先将我们实际中的分区通过gdisk
命令将系统标识符转化为LVM的标识符后,在经过pvcreate
命令就可以将其转换为我们的物理卷了。
卷组(Volume Group,VG):卷组其实就是物理卷族,它就是我们在以上提到的由物理卷PV组成的大磁盘。
逻辑卷(Logical Volume,LV):逻辑卷就是将我们的卷组分割后的产物,可以像被格式化的分区一样使用的东西。
物理扩展块(Physical Extent,PE):PE是整个LVM最小的存储数据单位,换句话说,我们的文件数据都是借由写入PE来完成的,它类似于文件系统中的block的大小。
了解完以上的概念,我们接着讲LVM是如何工作的,在前言中我们提到的问题是怎样通过LVM来解决。LVM最主要的功能就是可以弹性的修改文件系统的容量,它是通过交换PE来进行数据转换,将原本LV中的PE转移到其他设备中以降低LV容量,或将其他设备的PE加到LV中增大容量。这样说有些抽象,我们用一个图来理解一下。
如上图,将VG内的PE划分9个给一个逻辑卷LV,若未来这个LV需要扩充的话,增加VG中没有使用的PE即可完成扩充。如果整个VG此时都不够用了,则需要增添新的物理卷PV来扩充VG。
如果到了这里还觉得不好理解,那就来做个实验吧!
2. LVM实验
1. LVM各组件实现流程表
需要注意的是,PV是组成VG的物理卷,而PE是最小存储数据单位。
2. 创建LVM及挂载
首先需要初始化设备,具体步骤如下:
创建一个物理分区作为物理卷,具体如下:
物理分区创建好后,就可以使用pvcreate 分区名称
创建pv了
pv创建成功后就可以创建vg啦,直接使用vgcreate VG名称 组成VG的PV名
来创建VG,但此时默认创建得到的VG的最小存储单位PE大小为4G,我们可以使用-s
来指定PE大小,我在这里选择的PE大小为2M,并且可以使用vgdisplay
来查看VG相关详细信息如下:
我们的大磁盘VG得到了,接下来就可以划分可以被初始化使用的LV了,具体步骤如下:
初始化完成后就可以挂载使用我们的逻辑卷了,具体如下:
3. LVM的拉伸
1. VG容量充足时
在VG,也就是我们的大磁盘容量充足时,我们想要扩展我们的逻辑卷LV的容量时,可以使用lvextend -L 容量大小 LV名称
来扩展我们的逻辑卷。
但若是只扩展了我们逻辑卷,却未能扩展该卷上的文件系统,这个逻辑卷是无法使用的,所以在扩展完设备后我们应该也要扩展我们的操作系统。扩展文件系统的命令如下:
xfs_growfs 挂载点 在rhel8.0中只能使用挂载点来扩展xfs型文件系统
xfs_growfs 挂载点/挂载设备 在rhel7中可以使用挂载点或者挂载设备来扩展xfs型文件系统
resize2fs 挂载设备 扩展ext型文件系统
具体操作如下:
需注意,在这整个扩展过程中无需卸载设备。
2. 当VG不足时
当VG不足时,我们想要扩展我们正在使用的逻辑卷LV的大小时,需要先对VG进行扩展,再对LV进行扩展。我们知道VG其实是由我们的物理卷PV组成的,所以扩展VG其实就是给VG增添新的物理卷。具体操作如下:
若此时你的主机中没有未使用的物理卷,你首先需要新建一个物理卷,具体操作如上文中所示,须先增添一个序列号类型为linux LVM型的磁盘分区:
然后创建物理卷PV,再利用vgextend VG名 PV名
对VG进行扩充,具体操作如下:
然后就回到我们LVM扩充的第一种情况——VG充足的情况下扩充LV,先扩展LV设备再扩展该设备上的文件系统,具体操作如下:
这就完成啦,以上就是我们LVM的扩充的内容,接下来我们看一下如何缩减LVM呢。
4.LVM的缩减
并不是所有文件系统类型都可以进行文件系统的缩减,我们的xfs文件系统就不能够进行缩减,但ext文件系统是可以的。
逻辑卷或者说的更大一些,设备(磁盘分区等存储设备)其实是文件系统的载体,在之前的扩充阶段我们扩展LVM时需要先扩充设备在扩充文件系统,而在LVM缩减阶段我们需要先缩减文件系统再缩减该文件系统所在设备。
实验具体步骤如下:
由于我们之前使用的文件系统类型为xfs,所以我们必须要将文件系统类型先转化ext类型。需注意我们转化文件系统前要卸载设备。
和LVM的扩展不同,LVM的缩减必须要卸载设备才能进行,卸载设备后,使用lvreduce -L 指定逻辑卷容量大小 逻辑卷名
缩减设备,具体如下:
5. LVM的LV磁盘快照
什么是LV的磁盘快照呢?
快照就是将当时的系统情况记录下来,就好像照相记录一样。最初创建LV磁盘快照时,未来若有任何数据修改,则原始数据就会搬移到快照区,没有被修改的区域则由快照区和文件系统共享。
所以,我们可以认为LVM是很好的 备份工具,它只有备份又被修改的数据,文件系统中没有被修改的数据依旧被保持在原本的数据快内,但是LVM快照功能会知道哪些数据被放置在哪里,因此快照当时的文件系统就会被备份下来,且快照所占用的容量非常小。
关于快照的命令如下:
lvcreate -L 容量大小 快照名称 -s 被照的对象 ##创建快照
lvremove 快照名称 ##删除快照
在建立快照之前我们先在我们的逻辑卷中建立一个文件,来验证一下快照的备份功能。
接下来我们建立marslv0的快照,需注意建立快照须卸载设备,
将快照挂载好之后,我们可以查看之前建立的文件如下,
为了验证快照的备份功能,我们先删除快照中的文件,然后重新挂载原逻辑卷,然后查看原文件是否存在,具体操作如下:
我们可以看到原文件依旧存在。
至于删除快照就很简单了,具体操作如下:
6. LVM的删除
LVM的删除也很重要,因为我们的物理分区已经被LVM使用,如果在没有关闭LVM的情况下直接删除分区或转为其他用途,系统很容易出问题,删除流程如下:
- 卸载系统上面的LVM文件系统(包括快照和LV)
- 删除LV
- 先使用
vgchange -a n VG名称
使得这个VG不再具有Active的标记,再删除VG, - 删除PV
- 将该物理分区的ID修改回83
具体操作过程如下:
以上就完成了LVM的删除了。
7. 如何移除正在使用的PV
如若我们正在使用的vg中有大量剩余未使用空间,此时若是就这样闲置就会浪费这些空间,如何移除组成VG中的某个PV呢?相关命令如下:
vgreduce VG名称 PV名称 ##删除组成该VG的该PV
现在假设我们遇到这样的一个情况,在某个项目中我们预先给我们的卷组分配了两块PV,一个是1G大小,一个是500M大小,再项目即将完成后我们发现该VG中仅使用了不到500M的空间,为了充分利用资源我们需要移除1G大小的PV,但是由于1G大小的PV正在使用中,无法直接移除,我们该如何解决呢?
具体操作如下:
解决办法:须先将/dev/vdb1中的数据移除到/dev/vdb2中,再将/dev/vdb1这个物理卷移除。
pvmove PV1名称 PV2名称 #将PV1中的数据转移到PV2中去
3.LVM相关命令集合
在此,结合鸟哥的linux私房菜,来总结一下相关的命令,如下表:
任务 | PV阶段 | VG阶段 | LV阶段 | 文件系统(xfs/ext4) |
---|---|---|---|---|
查找 scan | pvscan | vgscan | lvscan | lsblk,blkid |
建立 create | pvcreate | vgcreate | lvcreate | mkfs.xfs / mkfs.ext4 |
列出 display | pvdisplay | vgdisplay | lvdisplay | df,mount |
扩展 extend | vgextend | lvextend(lvresize) | xfs_growfs / resize2fs | |
缩减 reduce | vgreduce | lvresuce(lvresize) | 不支持缩减/resize2fs | |
删除 remove | pvremove | vgremove | lvremove | 先卸载,再重新初始化 |
修改容量 resize | lvresize | xfs_growfs / resize2fs | ||
修改属性 attribute | pvchange | vgchange | lvchange | /etc/tstab / remount |