Linux LVM 详解:从入门、常用命令到实战扩容

发布时间: 更新时间: 总字数:2571 阅读时间:6m 作者: IP上海 分享 网址

本文系统地分析和讲解 Linux 的逻辑卷管理器 (LVM),并提供一个清晰的实战教程。

目标

本文分为三个核心部分:

  1. LVM 介绍:解释 LVM 是什么,它的工作原理以及使用它的好处。
  2. 常用命令总结:提供一个清晰、分类的 LVM 常用命令列表,作为快速参考手册。
  3. 实战扩容教程:给出一个具体场景——将一块全新的物理硬盘加入到系统中,并用它来扩展一个已有的逻辑卷(LV)的容量。

Part 1: LVM 介绍 (Introduction)

1.1 什么是 LVM?

LVM (Logical Volume Manager) 是 Linux 系统下的一种功能强大的磁盘管理工具。它在传统的物理磁盘和分区之上建立了一个逻辑层,使得管理员可以更加灵活地管理磁盘存储空间。

想象一下传统的磁盘分区就像用水泥墙砌成的房间,一旦建好,想要调整大小就非常困难,需要砸墙重建。而 LVM 就像是用乐高积木搭建的存储池,你可以随时轻松地增加积木(新硬盘)来扩大整个池子,然后从池子里划分出任意大小的空间(逻辑卷)来使用,甚至可以动态调整这些空间的大小,而不会影响里面存放的数据。

1.2 LVM 的核心组件与工作原理

LVM 主要由三个核心概念组成:

  • 物理卷 (Physical Volume - PV)

    • 是什么:LVM 的基本存储单元,通常是整个硬盘(如 /dev/sdb)或一个标准分区(如 /dev/sdb1)。它是 LVM 的原材料
    • 作用:将物理设备转换为 LVM 可识别的格式。
  • 卷组 (Volume Group - VG)

    • 是什么:一个或多个物理卷组成的存储池。
    • 作用:将多个 PV 整合在一起,形成一个统一的、巨大的存储资源池。你可以把 VG 看作是 LVM 的存储仓库
  • 逻辑卷 (Logical Volume - LV)

    • 是什么:从卷组 (VG) 中划分出来的一块逻辑空间,这块空间对于操作系统来说,就像一个普通的分区。
    • 作用:我们最终创建文件系统、挂载并使用的就是逻辑卷。你可以根据需要从 VG 中切割出任意大小的 LV。

它们之间的关系可以这样理解:

+-----------------------------------------------------------------+
| 操作系统层面 (OS Level)                                           |
|                                                                 |
|  +-----------------+      +-----------------+                   |
|  | 文件系统 (ext4)  |      | 文件系统 (xfs)   |  <-- 在 LV 上创建文件系统 |
|  |  (挂载于 /data)  |      |  (挂载于 /home)  |                   |
|  +-------+---------+      +--------+--------+                   |
|          ^                           ^                          |
|          |                           |                          |
|  +-------+---------+      +--------+--------+      +----------+ |
|  | 逻辑卷 LV 1     |      | 逻辑卷 LV 2     |      |  空闲空间  | |  <-- 从 VG 中划分 LV
|  | (/dev/my_vg/data_lv)|      | (/dev/my_vg/home_lv)|      |          | |
|  +-----------------------------------------------------------+ |
|                        卷组 VG (my_vg)                            |
+--------------------------------+--------------------------------+
|          ^                     |                                |
|          |                     |                                |
|  +-------+---------+     +-----v-----------+                   |
|  | 物理卷 PV 1     |     |  物理卷 PV 2      |  <-- 将 PV 加入到 VG 中 |
|  | (/dev/sdb1)     |     |  (/dev/sdc)       |                   |
|  +-----------------+     +-----------------+                   |
|                                                                 |
| 物理设备层面 (Physical Level)                                     |
+-----------------------------------------------------------------+

1.3 为什么使用 LVM?

  • 弹性容量:可以轻松地扩大或缩小逻辑卷的大小,无需重新分区。
  • 跨盘符存储:可以将多个物理硬盘合并成一个大的卷组,创建一个跨越多个硬盘的逻辑卷。
  • 快照功能 (Snapshot):可以对逻辑卷创建即时快照,用于数据备份和恢复,非常方便。
  • 在线操作:大部分 LVM 的调整操作(如扩容)都可以在系统运行时在线完成,无需停机。

Part 2: 常用 LVM 命令总结

以下命令按管理对象(PV, VG, LV)进行分类,方便查阅。

2.1 物理卷 (PV) 管理命令

命令 用途说明 示例
pvcreate 将一个物理硬盘或分区初始化为物理卷。 pvcreate /dev/sdb1
pvscan 扫描系统中所有可识别的物理卷。 pvscan
pvdisplay 显示物理卷的详细信息。 pvdisplay /dev/sdb1
pvremove 移除一个物理卷的 LVM 属性。 pvremove /dev/sdb1
pvs 以简洁的列表形式显示物理卷信息。 pvs

2.2 卷组 (VG) 管理命令

命令 用途说明 示例
vgcreate 从一个或多个 PV 创建一个新的卷组。 vgcreate my_vg /dev/sdb1 /dev/sdc1
vgscan 扫描并列出系统中的所有卷组。 vgscan
vgdisplay 显示卷组的详细信息。 vgdisplay my_vg
vgextend 向现有卷组中添加新的物理卷以扩容。 vgextend my_vg /dev/sdd1
vgreduce 从卷组中移除一个物理卷。 vgreduce my_vg /dev/sdd1
vgremove 删除一个卷组。 vgremove my_vg
vgs 以简洁的列表形式显示卷组信息。 vgs

2.3 逻辑卷 (LV) 管理命令

命令 用途说明 示例
lvcreate 从卷组中创建一个新的逻辑卷。 lvcreate -L 10G -n data_lv my_vg (创建 10G)
lvscan 扫描并列出系统中的所有逻辑卷。 lvscan
lvdisplay 显示逻辑卷的详细信息。 lvdisplay /dev/my_vg/data_lv
lvextend 扩展一个逻辑卷的容量。 lvextend -l +100%FREE /dev/my_vg/data_lv
lvreduce 缩减一个逻辑卷的容量 (危险操作)。 lvreduce -L -2G /dev/my_vg/data_lv
lvremove 删除一个逻辑卷。 lvremove /dev/my_vg/data_lv
lvs 以简洁的列表形式显示逻辑卷信息。 lvs
lvrename 重命名逻辑卷。 lvrename my_vg old_name new_name

2.4 文件系统相关命令 (扩容/缩容后必须执行)

命令 适用文件系统 用途 示例
resize2fs ext2, ext3, ext4 调整文件系统大小以匹配逻辑卷。 resize2fs /dev/my_vg/data_lv
xfs_growfs XFS 扩展 XFS 文件系统大小(不支持缩容)。 xfs_growfs /data (注意:这里是挂载点)

其他

  • lv 位于 /dev/vgname/lvname
  • device mapper(dm)是 kernel 寻找 storage device 的统一入口,被 LVM、RAID 等使用了。所以/dev/vgname/lvname 仅仅是个 link

Part 3: 实战教程:为现有 LV 添加新磁盘并扩容

本教程将引导你完成一个非常常见的场景:系统 /data 目录空间不足,你添加了一块新的硬盘,并希望用这块新硬盘来扩展 /data 目录的容量。

场景设定

  • 现有卷组datavg
  • 现有逻辑卷datalv,设备路径为 /dev/datavg/datalv
  • 挂载点/data
  • 文件系统类型:ext4
  • 新增物理硬盘/dev/sdc (一块全新的、未分区的硬盘)
  • 目标:将 /dev/sdc 的全部空间加入 datavg 卷组,并扩展 datalv,最终使 /data 目录的可用空间增加。

⚠️ 重要提示:开始任何磁盘操作前,请务必备份重要数据!

操作步骤

准备工作:检查当前状态

在开始之前,先检查一下系统当前的状态,以便操作后进行对比。

# 1. 查看块设备信息,确认新硬盘 /dev/sdc 已被识别
lsblk

# 2. 查看当前文件系统的使用情况,记录 /data 的大小
df -hT

# 3. 查看卷组信息,记录 datavg 的总大小 (VSize) 和剩余空间 (VFree)
vgs

# 4. 查看逻辑卷信息,记录 datalv 的大小 (LSize)
lvs

第一步:创建物理卷 (PV)

将新硬盘 /dev/sdc 初始化为 LVM 的物理卷。

sudo pvcreate /dev/sdc

成功后会显示 “Physical volume “/dev/sdc” successfully created”。你可以使用 pvspvdisplay /dev/sdc 来验证。

第二步:将新的 PV 添加到卷组 (VG)

使用 vgextend 命令,将刚刚创建的物理卷 /dev/sdc 添加到现有的 datavg 卷组中。

sudo vgextend datavg /dev/sdc

成功后会显示 “Volume group “datavg” successfully extended”。此时再用 vgs 查看,你会发现 datavgVSizeVFree 都增加了 /dev/sdc 的容量。

第三步:扩展逻辑卷 (LV)

现在卷组 datavg 有了更多的可用空间,我们可以用这些空间来扩展逻辑卷 datalv

我们使用 -l +100%FREE 参数,意思是将 datavg 中所有剩余的空闲空间都分配给 datalv

sudo lvextend -l +100%FREE /dev/datavg/datalv

备选方案:如果你只想增加固定大小,比如 200GB,可以使用 -L 参数: sudo lvextend -L +200G /dev/datavg/datalv

成功后会显示 “Size of logical volume … changed from … to …"。此时用 lvs 命令查看,可以看到 datalvLSize 已经变大了。

第四步:调整文件系统大小(至关重要!)

这是最容易被遗忘但又最关键的一步! 上一步只是扩大了逻辑卷这个容器的边界,但容器内部的文件系统并不知道空间变大了。我们需要执行一条命令来通知文件系统去使用这些新增的空间。

由于我们的文件系统是 ext4,所以使用 resize2fs 命令。

sudo resize2fs /dev/datavg/datalv

如果你的文件系统是 XFS,则应使用 xfs_growfs,并且参数是挂载点:

# 假如是 XFS 文件系统
# sudo xfs_growfs /data

这条命令会在线扩展文件系统,将新空间纳入管理。

第五步:最终确认

最后,再次检查文件系统的使用情况,确认扩容已成功。

df -hT

现在,你应该能看到 /data 目录的总大小已经显著增加,扩容操作圆满完成!

本文总阅读量 次 本站总访问量 次 本站总访客数
Home Archives Categories Tags Statistics