今天分享一下LVM,这是我结合生产环境总结出来的操作,非常实用,文章较长,请耐心阅读。

一、逻辑卷介绍
LVM(Logical Volume Manager)逻辑卷管理,是在硬盘分区和文件系统之间添加的一个逻辑层。
LVM就是通过将底层的物理硬盘封装,然后以逻辑卷的方式呈现给上层应用。当我们对底层的物理硬盘进行操作时,不再是针对分区进行操作,而是通过逻辑卷对底层硬盘进行管理操作。
二、逻辑卷基本概念
概念原理图如下:

(1) 物理卷(Physical Volume,PV)
物理卷是底层真正提供容量,存放数据的设备,它可以是硬盘分区、整个硬盘、raid阵列或SAN硬盘。设备必须初始化为LVM物理卷,才能与LVM结合使用。。
(2) 卷组(Volume Group, VG)
卷组建立在物理卷之上,它由一个或多个物理卷组成。即把物理卷整合起来提供容量分配。 一个LVM系统中可以只有一个卷组,也可以包含多个卷组。
(3) 逻辑卷(Logical Volume, LV)
逻辑卷建立在卷组之上,它是从卷组中“切出”的一块空间。它是最终用户使用的逻辑设备。逻辑卷创建之后,其大小可以伸缩。
(4) 物理区域 PE(physical extent)
每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是能被LVM寻址的最小单元。PE的大小可指定,默认为4 MB。 PE的大小一旦确定将不能改变,同一个卷组中的所有物理卷的PE的大小是一致的。 4MB=4096kb=4096kb/4kb=1024个block
三、逻辑卷创建与删除
操作命令:

创建和删除顺序:

1. 环境准备
可以将硬盘做成PV,也可以将分区做成PV。
本次实验就用三块5G的硬盘来模拟(容量你自定义即可)。

复制
[root@liyb ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 2G 0 part /boot
└─sda2 8:2 0 48G 0 part
└─rl-root 253:0 0 48G 0 lvm /
sdb 8:16 0 5G 0 disk
sdc 8:32 0 5G 0 disk
sdd 8:48 0 5G 0 disk
sr0 11:0 1 10.2G 0 rom
[root@liyb ~]#1.2.3.4.5.6.7.8.9.10.11.
2. 安装lvm相关软件包
有些发行版本是安装系统时就已经安装了,不用重复安装。
复制
yum install lvm2 lvm2-libs -y1.
3. 创建物理卷(PV)
复制
# 将三个硬盘做成PV
pvcreate /dev/sdb /dev/sdc /dev/sdd # 也可以写成/dev/sd{b..d} 或 /dev/sd[bcd] 或 /dev/sd[b-d]
# 查看PV情况,因为我们根分区也是LVM格式,所有有4个PV
pvs
# 删除PV,这一步先不做。
pvremove /dev/sdb /dev/sdc /dev/sdb1.2.3.4.5.6.7.8.
图片
说明:除了pvs还可以使用pvdisplay和pvscan等命令查看更详细的信息
4. 创建与扩展卷组(VG)创建卷组(VG)使用vgcreate命令扩展卷组使用vgextend命令
将/dev/sdb与/dev/sdc创建成一个卷组,卷组名自定义为vg-data:
复制
# 创建卷组
[root@liyb ~]# vgcreate vg-data /dev/sdb /dev/sdc
Volume group "vg-data" successfully created1.2.3.
将/dev/sdd扩展添加到卷组vg01中:
复制
# vgextend vg-data /dev/sdd
Volume group "vg-data" successfully extended1.2.
查看验证:
复制
# 查看卷组情况
vgs
# 查看PV情况
pvs1.2.3.4.5.

注意事项:
可以通过-s指定PE大小(默认是4MB)PE大,读取速度快,但浪费空间。反之,读取速度慢,但节省空间。类似于socket5. 将卷组划分为逻辑卷(LV)使用lvcreate命令划分LV使用lvs命令查看
创建逻辑卷:
lvcreate常见参数
说明
-n
指定逻辑卷的名字
-L
指定逻辑卷的大小
-l
通过指定PE的个数或空间百分比来指定逻辑卷的大小
复制
# 指定创建逻辑卷大小
[root@liyb ~]# lvcreate -n lv-data -L 2G vg-data
Logical volume "lv-data" created.
# 创建第二个LV,指定PE个数,一个PE默认4MB
[root@liyb ~]# lvcreate -n lv-data2 -l 200 vg-data
Logical volume "lv-data2" created.
# 创建第三个LV,将剩余的全部的50%空间分给它
[root@liyb ~]# lvcreate -n lv-data3 -l 50%free vg-data
Logical volume "lv-data3" created.1.2.3.4.5.6.7.8.9.10.11.
查看逻辑卷:

注意事项:
生产环境尽量不要一个vg创建多个lv,我上面例子只是为了验证常用功能lv名字可以自定义,可以结合业务来起名字6. 验证lv设备名
复制
# ls /dev/vg-data
# ls /dev/mapper/vg-data*1.2.3.

7. 格式化并挂载
这里以lv-data为例,其他挂载的话,步骤一样:
复制
# 格式化
[root@liyb ~]# mkfs.xfs /dev/vg-data/lv-data
# 创建挂载点,已有挂载目录可省略
[root@liyb ~]# mkdir /data
# 挂载
[root@liyb ~] mount /dev/vg-data/lv-data /data
# 查看挂载情况
df -h1.2.3.4.5.6.7.8.9.10.

四、逻辑卷在线扩容
1. 查看vg空间
在生产环境中,扩容顺序是: 新增硬盘/分区-->创建PV-->扩容VG-->扩容LV-->扩容文件系统
复制
#
df -h |tail -1
# 查看vgs剩余可用容量
[root@liyb ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 1 0 wz--n- <48.00g 0
vg-data 3 3 0 wz--n- <14.99g <6.11g
# free空间还有近14G1.2.3.4.5.6.7.8.9.
2. 在线扩容逻辑卷
上次查看到,VG还有6G可用,我直接演示如何扩容LV。我这里也演示LV扩容的三种方法
复制
# 方法一:指定扩容后最终容量为3G(从2G变3G)
[root@liyb ~]# lvextend -L 3G /dev/vg-data/lv-data
Size of logical volume vg-data/lv-data changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents).
Logical volume vg-data/lv-data successfully resized.
# 方法二:在原有基础再扩容2G(从3G变5G)
[root@liyb ~]# lvextend -L +2G /dev/vg-data/lv-data
Size of logical volume vg-data/lv-data changed from 3.00 GiB (768 extents) to 5.00 GiB (1280 extents).
Logical volume vg-data/lv-data successfully resized.
# 方法三:将VG剩余容量全部扩容给LV,此操作会将vg剩余空间全用完。
[root@liyb ~]# lvresize -l +100%FREE /dev/vg-data/lv-data
# 查看lvs
[root@liyb ~]# lvs1.2.3.4.5.6.7.8.9.10.11.12.13.14.

3. 扩容文件系统
前面步骤只是扩容了LV,文件系统并没有扩容,所以需要进行下面步骤
复制
# 适合xfs文件系统,本次操作执行这个
xfs_growfs /dev/vg-data/lv-data
# 如果你的文件系统是ext4格式,则使用resize2fs
resize2fs /dev/vg-data/lv-data1.2.3.4.5.
4. 验证在线扩容成功
复制
[root@liyb ~]# df -h|grep data
/dev/mapper/vg--data-lv--data 8.1G 91M 8.0G 2% /data1.2.

注意事项:
在线缩容LV目前只支持ext4文件系统,没事别做这个操作,容易丢数据。xfs文件系统可支持离线扩容,但是操作时做好备份。
五、删除逻辑卷(谨慎)
如果要删除逻辑卷,逆向操作步骤为:
卸载文件系统--->删除逻辑卷LV--->删除卷组--->删除物理卷PV
复制
# 卸载文件系统,下面命令也可以选择挂载点
[root@liyb ~]# umount /dev/vg-data/lv-data
# 删除LV
[root@liyb ~]# lvremove /dev/vg-data/lv-data
Do you really want to remove active logical volume vg-data/lv-data? [y/n]: y
Logical volume "lv-data" successfully removed.
# 删除VG,如果有多个LV使用同一个卷组,会提示你都删除。
[root@liyb ~]# vgremove vg-data
Do you really want to remove volume group "vg-data" containing 2 logical volumes? [y/n]: y
Do you really want to remove active logical volume vg-data/lv-data2? [y/n]: y
Logical volume "lv-data2" successfully removed.
Do you really want to remove active logical volume vg-data/lv-data3? [y/n]: y
Logical volume "lv-data3" successfully removed.
Volume group "vg-data" successfully removed
# 删除物理卷PV
[root@liyb ~]# pvremove /dev/sd{b..d}
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.
Labels on physical volume "/dev/sdd" successfully wiped.1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.
