LVM 全攻略:一文掌握逻辑卷的增删改查(含生产实操)

今天分享一下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格式,所有有4PV 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.

查看逻辑卷:

复制
# lvs1.

注意事项:

生产环境尽量不要一个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.

阅读剩余
THE END