LVM即逻辑卷管理器,是Linux系统用户对硬盘分区管理的一种机制,理论性较强,其创建的初衷是为了解决硬盘设备在创建完分区后不易修改分区大小的权限,LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,他提供了一个抽象的卷组,可以把多个硬盘进行罐组合并。这样一来,用户就不用担心物理硬盘设备的底层架构布局,可以轻松实现对硬盘分区的动态调整。简而言之,生产中我们某个分区不够用的情况下,出来清理历史数据外,就是调整当前数据的存储位置,否则分区一旦满了,就没法工作了,而LVM技术就可以解决不用迁移原来的数据(原来的分区必须是LVM格式的),就可以随意添加硬盘,然后向LVM分区动态添加空间,当然,也可以缩减空间。重点是原来的数据不会受到任何影响。
物理卷:PV【Physical Volume】
卷组:VG【Volume Group】
逻辑卷:LV【Logical Volume】
基本单元:PE【Physical Extent】
物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,而且物理卷在建立后可以动态的扩建或者缩小红箭。这就是LVM的核心理念。
首先我们看看物理卷、卷组和逻辑卷的常用命令。
功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩展 | vgextend | lvextend | |
缩小 | vgreduce | lvreduce |
首先我们准备两块5GB的硬盘,在虚拟机里添加即可,分别是/dev/sdb和/dev/sdc两块硬盘。
1、让新建家的两块硬盘设备支持LVM技术。(注意,当前操作系统是Centos7.7 最小化安装的没有lvm相关命令,需要yum install -y lvm2进行安装)
#pvcreate /dev/sdb /dev/sdc
2、把两块硬盘设备加入到storage卷组中,然后查看卷组的状态。
#vgcreate storage /dev/sdb /dev/sdc
#vgdisplay
3、切割出一个6GB的逻辑卷设备。
这里需要注意切割单位的问题。在对逻辑卷进行切割时候有两种计量单位。第一种是以容量为单位,所使用的参数是-L。例如,在使用-L 6G生成一个大小等于6G的逻辑卷。另外一种是以基本单位的个数为单位,所使用的参数为-l。每个单元的到校默认为4MB。例如使用-l 1000可以生成一个大小为4MBx1000=4000MB的逻辑卷。后者显然有点繁琐,我们就用-L计量单位为各位演示下面的操作。
# lvcreate -n vo -L 6G storage
查看逻辑卷
# lvdisplay
4、把生成好的逻辑卷进行格式化,然后挂载使用,这里我们用ext4格式为各位演示。Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中(实际上是做了一个符号链接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称、逻辑卷名称)
# mkfs.ext4 /dev/storage/vo
创建挂载目录,并挂载逻辑卷
# mkdir /lvmtest
# mount /dev/storage/vo /lvmtest/
5、查看挂载状态,并写入挂载配置文件,使其永久生效。
# vim /etc/fstab (追加至最后一条)
/dev/storage/vo /lvmtest ext4 defaults 0 0
验证
前面我们挂载了两块5GB的硬盘,我们初始给LVM的使用空间是6GB,我们最大可以扩容到10GB,下面进行扩容。
1、首先需要卸载之前的lvm挂载盘。
# umount /lvmtest/
2、把前面LVM的6GB扩容至9GB。
# lvextend -L 9G /dev/storage/vo
3、检查硬盘完整性,并重置硬盘容量。
# e2fsck -f /dev/storage/vo
重置硬盘容量,这一步很重要,如果不重置LVM容量将还是6GB。下面是ext4的重置方法,xfs格式需要用命令:# xfs_growfs /dev/storage/vo
# resize2fs /dev/storage/vo
最后,我们挂载一下,然后验证LVM容量。
相较于扩容逻辑卷,在对逻辑卷进行缩减容量操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(也是为了保证数据安全)。在执行缩容操作前记得先把文件系统卸载掉。
1、卸载。
# umount /lvmtest/
2、检查文件系统的完整性。
# e2fsck -f /dev/storage/vo
3、把逻辑卷vo的容量缩减到5GB。
# resize2fs /dev/storage/vo 5G
4、重新挂载文件系统并查看系统状态。
# mount -a
#df -h
生产环境中想要重新部署LVM或者不再继续使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠覆。
1、取消逻辑卷与目录的挂载关联,删除配置文件中的永久生效(/etc/fstab下的挂载记录)的设备参数。
#umount /lvmtest
#vim /etc/fstab,进来删除或者注释LVM挂载记录。
2、删除逻辑卷设备,需要输入y来确认操作。
# lvremove /dev/storage/vo
3、删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。
# vgremove storage
4、删除物理卷设备。
# pvremove /dev/sdb /dev/sdc
5、最后一步,在上述操作完成没有报错之后,再执行lvdisplay、vgdisplay、pvdisplay命令来查看LVM的信息时就不会再看到信息了。
如果我们之前已经完成了/dev/sdb和/dev/sdc两块硬盘的操作,比如我们两块硬盘的总容量是10GB,我们已经用了9GB,我们又想新加一块硬盘怎么操作呢?如下:
现状:
开始:
这里我们用的是虚拟机,添加硬盘我们就不再赘述,我们直接开始。
1、查看硬盘信息。
2、让新加的sdd硬盘设备支持LVM技术。
# pvcreate /dev/sdd
3、 把sdd这块硬盘设备加入到storage卷组中,然后查看卷组状态。
# vgextend storage /dev/sdd
# vgdisplay
如下图所示,已经添加成功。
4、扩容、扩容、扩容,给它扩容到14GB,记住每次扩容缩容都必须先卸载文件系统。
# umount /lvmtest/
# lvextend -L 14G /dev/storage/vo
检查硬盘完整性,并重置硬盘容量。
# e2fsck -f /dev/storage/vo
# resize2fs /dev/storage/vo
5、最后挂载文件系统,并验证效果。
LVM具备“快照卷”功能,功能类似于VMware workstation的快照功能,可以对某个逻辑卷设备做一次快照,如果日后发现数据改错了,可以利用做好的亏按照进行覆盖还原,不过它有两个特点。
1、亏按照卷的容量必须等同于逻辑卷的容量。
2、快照卷仅此一次有效,一旦执行还原操作后则会被立即自动删除。
3、那么问题来了,比如我卷组总共空间2TB,当前数据已经有1.5TB,我得做一个一样大的卷组,显然当前的这个卷组是不可能再有1.5TB的空间了,除非扩容,很浪费空间。据说快照和逻辑卷必须是在同一卷组上。
4、这个东西凭我个人的经验,生产过程中基本用不到,阿里云有快照那个更安全快捷。本地有本地备份和异地备份文件,有兴趣可以自己了解一下。