什么是 LVM逻辑卷?

当分区的空间不够用时无法扩展其大小,只能通过添加硬盘、创建新的分区来扩充空间,但是新添加进来的硬盘是作为独立文件系统存在的,原有的文件系统并未得到扩充,上层应用很多时候只能访问一个文件系统。所以只能让现有磁盘下线,换上新的磁盘之后,再将原始数据导入。

ubuntu 的 LVM 逻辑卷_逻辑卷

如果在实际生产环境的服务器中,出现这种分区已用完的时,我们是很难对原有分区处理扩容的,处理的方式就是我们不得不先扩容更大的新分区,然后停止项目的运行,移动项目到新的扩容分区中;非常麻烦~

虽然有第三方解决方案对原有分区进行扩容,但是这些第三方的扩容解决方案实践起来后是非常不稳定的,很容易引起数据的丢失、丢盘的情况发生;

LVM 就很好的解决了上面分区扩容麻烦的问题;

LVM(Logical volume Manager) 逻辑卷管理:通过将底层物理硬盘抽象地封装起来,以逻辑卷的形式表现给上层系统。逻辑卷的大小可以动态调整,而且不会丢失现有的数据。新加入的硬盘也不会改变现有上层的逻辑卷。

作为一种 动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性!

我们能操作的只是 逻辑卷,逻辑卷说白了,就是可伸缩的 "分区卷",其分区大小可以动态调节,而不受制于原始的固定分区大小;

LVM 的底层概念

ubuntu 的 LVM 逻辑卷_文件系统_02

上图中,我们最终能使用和操作的就是 LV逻辑卷,所做的很多操作都是为了 LV逻辑卷;逻辑卷就是为取代原先的分区

一句话概括:物理磁盘被格式化为PV(physical volume),空间被分为一个个PE(physical extend)【大小为 4 MB,为逻辑卷的最小单位】。不同的PV加入同一个VG(volume group),不同PV的PE全部进入VG的PE池内。LV(logical volume)基于PE创建,大小为PE的整数倍,组成LV的PE可能来自于不同的物理磁盘。LV现在就能挂载使用了。

详解:

假如有一块硬盘,我们使用LVM技术时,将硬盘插入服务器中,将该硬盘条带化(格式化)成物理卷PV,即把硬盘空间划分为以4M的基准切割N多个PE;比如一个硬盘容量为400M,那么一共就有 100(400/4) 个PE;(PE是逻辑卷空间管理的最基本单位,PE默认是4M大小)

创建一个卷组VG,可以理解为空间池(或者说 地址池),作用是用来装 PE 的,如上图,多个硬盘的PE装入到了 VG 中;VG 必须有名称的;VG的大小由多少个PE来决定;

基于卷组VG来创建我们每个逻辑卷LV(相当于传统的分区),从VG拿出来多少个PE到LV中,这个LV的空间就有多大;我们把创建好的逻辑卷格式化,然后挂载,就可以用了;LV 必须有名称的;LV的大小由多少个PE来决定;

当创建好卷组VG时,会创建目录 ​​/dev/卷组名/​​​ ;而当逻辑卷创建好时,会创建文件 ​​/dev/卷组名/逻辑卷名​​;

注意:组成逻辑卷的PE可以来自不同的硬盘,如上图,sda的PE是灰色的,而 sdb的PE是白色的,lV有3个灰1个白的PE:

ubuntu 的 LVM 逻辑卷_逻辑卷_03

我们不需要关心也不能操作 VG、PV 和 PE,我们只能操作 LV逻辑卷;

当我们对LV拉伸活收缩时,实际上就是增加活减少PE,来达到伸缩LV逻辑卷的目的;

对 卷组VG 的伸缩,就是加减硬盘;

ubuntu 的 LVM 逻辑卷_逻辑卷_04

LVM逻辑卷 是一个动态磁盘管理的工具,原理非常简单~

总结:

  • 物理磁盘被格式化为PV,空间被分为一个个PE
  • 不同的PV加入同一个VG,不同PV的PE全部进入VG的PE池内
  • LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同物理磁盘
  • LV现在就直接可以格式化后挂载使用了
  • LV的扩充缩减实际上就是增加或减少组成该LV的PE的数量。其过程不丢失原始数据

LVM逻辑卷的基本管理操作

ubuntu 的 LVM 逻辑卷_数据_05

先检查新硬盘是否插入: ​​fdisk -l​​​ 或者 ​​df -h​​​ 或者 ​​lsblk​

创建LVM

1、将物理磁盘设备初始化为物理卷
​​​pvcreate /dev/sdb /dev/sdc​​​ 查看物理卷信息:​​pvdispaly​​​ 或者 ​​pvs​​​2、创建卷组,并将上面两个PV加入卷组juanzuming中
​vgcreate juanzuming /dev/sdb /dev/sdc​​3、基于卷组juanzuming创建2G大小空间的逻辑卷
​lvcreate -n mylv -L 2G juanzuming​​ 查看卷组信息:​​vgdisplay​​ 或者 ​​vgs​​4、为创建好的逻辑卷格式化创建文件系统
​mkfs.ext4 /dev/juanzuming/mylv​​ 查看逻辑卷信息:​​lvdisplay​​ 或者 ​​lvs​​5、将格式化好的逻辑卷挂载使用
​mount/dev/juanzuming/mylv /mnt​​ 将逻辑卷挂载到 /mnt 中

一定要按照上面顺序一步步下来

卷组VG 和 逻辑卷LV 可以有多个,主要是为了方便管理和维护;

上面命令全部运行完后,其在目录 ​​/dev/juanzuming/mylv​​​ 中多一个设备;但是,执行 mount 时,显示的lv逻辑卷的位置是在 ​​/dev/mapper/juanzuming-mylv​​​ 中的;答:​​/dev/juanzuming/mylv​​​ 只是一个链接,实际是在 ​​/dev/mapper​​ 这目录里面;

ubuntu 的 LVM 逻辑卷_Ubuntu_06

删除 LVM

0、卸载已经挂载
​​​umount /nmt​

1、删除LV
​​​lvremove /dev/juanzuming/mylv​​​2、删除 VG
​vgremove juanzuming​​3、删除物理卷
​pvremove /dev/sdb​

一定要按照上面顺序一步步下来

LVM 逻辑卷的 【扩大】 与 【缩小】(动态伸缩磁盘分区卷空间)

ubuntu 的 LVM 逻辑卷_Ubuntu_07

拉伸LV逻辑卷

逻辑卷的 拉伸操作 可以在线执行,不需要卸载逻辑卷,数据不会丢失
逻辑卷的 缩小 操作,必须先卸载逻辑卷

1、保证VG中有足够的空闲空间
​​​vgdisplay​​​2、扩充mylv逻辑卷,增加1G空间
​lvextend -L +1G /dev/juanzuming/mylv​​3、查看扩充后LV大小
​lvdisplay​​4、更新文件系统(必须的,否则 ​​df -h​​ 还是显示原来的空间大小)
​resize2fs /dev/juanzuming/mylv​​5、查看更新后文件系统
​df-h​

为什么要需要更新文件系统?因为LV逻辑卷是个底层的东西,操作系统需要使用任何的底层的空间,都要对其进行格式化(即创建文件系统),而文件系统在创建的时候大小就已经固定了,我们拉伸的底层空间,但是没有更新mylv这个逻辑卷的文件系统~,所以,系统并没有识别到拉伸出来的空间,所以 ​​df -h​​ 还是显示原来的空间大小;

拉伸VG卷组

1、将要添加到VG的硬盘格式化为PV
​​​pvcreate /dev/sdd​​​2、将新的PV添加到指定卷组中
​vgextend juanzuming /dev/sdd​​3.查看扩充后VG大小
​vgdisplay​

缩小LV逻辑卷

ubuntu 的 LVM 逻辑卷_Ubuntu_08

逻辑卷的缩小操作必须离线执行,要卸载逻辑卷

1、卸载已经挂载的逻辑卷
​​​umount /dev/juanzuming/mylv​​​2、缩小文件系统,缩小到1G
(会提示需要运行fsck检查文件系统)
​resize2fs /dev/juanzuming/mylv 1G​​3、缩小LV
​lvreduce -L -1G /dev/juanzuming/mylv​​4、查看缩小后的LV
​lvdisplay​​5、挂载
​mount /dev/juanzuming/mylv /mnt​

注意一定要按照上面顺序执行

缩小LV是比较危险的事,如果设置空间大小不对,那么会导致数据的丢失

缩小VG卷组

即:拿走一个硬盘的情景;

ubuntu 的 LVM 逻辑卷_Ubuntu_09

1、将一个PV从制定卷组中移除
​​​vgreduce juanzuming /dev/sdc​​​2、查看缩小后的卷组大小
​vgdisplay​

注意,卷组的大小必须比要拿走硬盘的空间大小还大!否则会造成数据丢失的风险;