首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LVM 详解:从理论到实践,全面掌握逻辑卷管理

LVM 详解:从理论到实践,全面掌握逻辑卷管理

作者头像
数据小冰
发布2025-11-13 19:21:27
发布2025-11-13 19:21:27
9750
举报
文章被收录于专栏:数据小冰数据小冰
磁盘分区

在正式介绍LVM技术前,先来说说磁盘分区。对于磁盘分区,相信都不陌生。像Windows系统,会把磁盘分为C盘、D盘等。对于Linux系统,会把磁盘sda分成sda1、sda2等等。下图是一个CentOS系统,可以看到磁盘总大小为21.5GB, 被划分为/dev/sda1、/dev/sda2和/dev/sda3一个3个分区,还剩余7个多G空间。

LVM是什么

LVM是 Logical Volume Manager英文缩写,翻译成中文是 逻辑卷管理器。它是linux系统中磁盘管理工具,其思想是将物理磁盘和分区进行虚拟化,创建虚拟的磁盘空间,从虚拟的磁盘空间中按需分配,使用起来更灵活,更易于管理。

如下图,LVM通过3层抽象来管理存储空间,分别是物理卷PV(physical volume)、卷组VG(volume group)、逻辑卷LV(logical volume)。

什么是PV

PV指物理卷,初始的物理存储设备,例如机械硬盘(HDD)、固态硬盘(SSD),需要创建物理卷,才能添加到LVM中的卷组中。通俗理解,物理磁盘就像是砖头水泥等原始建筑材料,创建物理卷相当于对这些原始材料进行标准化处理,把它们做成统一的乐高积木,变成可以随意拼接的标准化模块。

什么是VG

VG即卷组,它处于LVM中的核心位置,将多个物理卷组合成一个统一的存储结构,总容量大小为各个物理卷对应物理设备容量之和。卷组把多个物理磁盘虚拟成一个虚拟盘,可以灵活对该虚拟盘进行划分,分成多个逻辑卷。

例如,我们的设备有2块1TB的硬盘,想创建一个2TB的分区,采用标准的磁盘划分方法是无法实现的。采用LVM技术,把2块1TB的磁盘做成PV,然后将它们加入到一个VG,该VG的容量即为2TB。采用LVM,我们可以不受到单盘大小限制,可以轻松创建一个大的虚拟空间。

什么是LV

LV指逻辑卷,即对上面的VG进行划分,分配出来的虚拟的、灵活的逻辑空间,供操作系统使用。

为什么采用3层抽象

通过前面介绍,我们已了解LVM通过3层抽象(PV、VG和LV)来管理存储空间,为啥要采用3层呢?其中的关键是卷组层VG,将资源池化,对LV层屏蔽了底层物理设备的类型、数量等细节,实现了底层解耦。LV直接基于VG构建的虚拟的空间划分,非常灵活。而PV将物理磁盘进行标准化,从而构建VG。通俗来说,3层抽象构成了一个单向的依赖,每层只为上层服务,每层都是上层的基石,都有着不可替代作用。

为啥要使用LVM

LVM相比传统标准磁盘划分,具有特有的优点,这是我们要使用LVM的原因。主要有以下两个优点:

  • 动态调整大小:LVM可以在不重启不移动数据的情况下,在线扩大或缩小逻辑卷LV的大小。
  • 虚拟存储空间:可以将多个大小不同、类型不同的物理磁盘整合成一个大的存储空间(VG)进行管理。
怎么使用LVM

下面我们基于物理磁盘,看看如何创建逻辑卷。基本步骤如下:

  1. 根据物理磁盘创建物理卷
  2. 创建卷组,并将1中创建的物理卷加入里面
  3. 基于2中创建的卷组创建逻辑卷
  4. 对划分的逻辑卷进行格式化文件系统,如xfs、ext4等
  5. 挂载文件系统

现有的设备磁盘划分情况如下,只有一块磁盘/dev/sda,大小为21.5G。目前已划分sda1、sda2和sda3一共三个分区,它们总大小是13G,还剩余大概7G空间。

现在将剩余的空间划分到/dev/sda4中。

通过lsblk命令可以看到,磁盘划分成功,现在多了sda4分区,大小为7G。

将分区sda4标记为LVM类型,默认是Linux类型,Id是83,如下图所示。

执行fdisk /dev/sda命令,然后输入t,选择分区4, 输入8e,把sda4类型设置为Linux LVM。

为啥要将类型设置为Linux LVM,主要为了安全性。标记为LVM类型,告诉管理工具该分区不在是普通的分区,例如执行mkfs命令,会发出警告,而对于普通分区执行格式化操作,会毫不犹豫进行格式化。

创建PV

对sda4创建物理卷,执行命令 pvcreate /dev/sda4,注意,如果提示 pvcreate命令找不到,先执行 yum install lvm2 进行安装(如果非centos系统,请找对应的命令)。

可以使用 pvdisplay 命令进一步验证pv是否创建成功,如下图。

创建VG

执行 vgcreate 命令来创建卷组, 如下创建了一个名称为 vg-data 的卷组,并将物理卷/dev/sda4加入其中。

查看系统已创建的卷组信息

创建LV

通过 lvcreate 命令创建逻辑卷,如下图所示。 -l 参数表示从卷组中分配多大的空间,本次我们将vg-data全部空间分配给逻辑卷 lv-data,所以-l参数值为 100%Free。

通过 lvdisplay命令检查系统中创建的逻辑卷信息

格式化逻辑卷

前面我们已经创建了一个逻辑卷lv-data,在使用前需要进行格式化。采用 mkfs.xfs命令格式lv-data,将其格式化为xfs文件系统,当然我们可以用 mkfs.ext4命令将其格式化为ext4文件系统。被格式化的逻辑卷完整名称是 /dev/{VG}/{LV},{VG}即卷组名,{LV}即逻辑卷名。

挂载

采用mount命令将已经格式化后的逻辑卷挂载到文件系统/data,如下图。

通过 df 命令检查挂载情况,如下图所示,这里参数 -T 显示文件系统信息,可以看到,的确是我们刚创建的xfs文件系统。

如何扩展LV

前面一节详细介绍了如何使用LVM,在实际使用的时候,我们会遇到一种高频的场景:为了存储更多的数据,需要对已有的LV进行扩容,本节从这个角度详细介绍。

假设我们设备现在新添加了一块磁盘,需要加入到已有的LV中。整个处理顺序大致如下:

  1. 添加了一块新磁盘
  2. 创建物理卷PV
  3. 将物理卷添加到已有的VG中
  4. 扩展逻辑卷LV

新添加了一块磁盘sdb,如下图所示,大小为5G。

对磁盘sdb进行分区,这里将整块盘划分到一个分区sdb1中,并把系统类型设置为Linux LVM。

通过fdisk -l 命令可以看到,sdb现在已经分区成功,并且类型为Linux LVM。

对/dev/sdb1创建物理卷。

使用 vgextend 命令将上面的物理卷添加到 vg-data中。

执行 vgs 命令可以看到,vg-data现在有12G空间(之前有7G,这次添加了5G),其中VFree显示有5G的空闲空间就是本次扩展的。

在准备扩展逻辑卷前先来看下当前的逻辑卷情况,可以看到大小为7G。

现在执行 lvextend -l +100%FREE /dev/vg-data/lv-data, 对lv-data进行扩容,-l +100%FREE 表示将卷组中剩余的空间全部添加到lv-data中。如果不想将剩余全部空间添加,可以设置具体值,像 lvextend -l +5G /dev/vg-data/lv-data表示添加5G空间到lv-data。

注意,最后还要调整文件系统大小,使新增的存储空间可用,这一步很容遗漏。即使前面对lv-data进行了扩容,在调整前,如下图可使用的空间还是只有7G。

通过 xfs_growfs 命令调整文件系统大小。

调整后,再次查看可使用空间,现在显示有12G,相比之前增加了5G。

没有 umount /data 我们成功将/data空间扩大了5G,如果使用传统的方法是无法做到这一点的,这正是采用LVM技术带给我们很大的便利性。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据小冰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 磁盘分区
  • LVM是什么
    • 什么是PV
    • 什么是VG
    • 什么是LV
    • 为什么采用3层抽象
  • 为啥要使用LVM
  • 怎么使用LVM
    • 创建PV
    • 创建VG
    • 创建LV
    • 格式化逻辑卷
    • 挂载
  • 如何扩展LV
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档