80·存储管理高级

LVM 逻辑卷管理

lvmvolume

第80课:LVM 逻辑卷管理

学习目标

完成本课学习后,你将能够:

  1. 理解LVM核心概念:清晰阐述物理卷(PV)、卷组(VG)和逻辑卷(LV)的关系与作用。
  2. 掌握LVM创建流程:熟练使用命令从创建物理卷到最终生成可用逻辑卷的全过程。
  3. 执行LVM动态管理:掌握在线扩容、缩容逻辑卷,并理解其中的风险与注意事项。
  4. 实践LVM维护操作:学会查看LVM信息、添加新物理卷以及安全地删除LVM组件。

核心概念

想象一下,你在玩一套乐高积木。

  • 物理卷 (Physical Volume, PV):就是你手里一块块标准的乐高积木砖。它们是系统中实际的硬盘分区或整个磁盘。使用 pvcreate 命令就是给这块“砖”打上LVM的标签,让它准备好被使用。
  • 卷组 (Volume Group, VG):就像一个大的乐高积木篮子。你可以把多个PV(积木砖)放进去,形成一个大的、统一的存储池。这个池子的总容量是所有PV容量之和。使用 vgcreate 命令就是创建这个篮子。
  • 逻辑卷 (Logical Volume, LV):是你最终要建的“乐高墙壁”。你从这个篮子(VG)里拿出一些积木(容量),拼成你需要大小和形状的墙壁。这个LV就相当于我们传统的磁盘分区(如 /dev/sda1),可以格式化(mkfs)并挂载到目录上使用。使用 lvcreate 命令就是建造这面墙壁。

最大的魔力在于,当你的“墙壁”(LV)空间不够时,你不需要拆墙重建。你只需要从篮子里(VG)再拿出一些积木(空间),无缝拼接到现有的墙壁上,瞬间墙壁就变大了。这就是LVM 动态扩容 的魅力。

代码示例

假设我们有两块新的空磁盘 /dev/sdb/dev/sdc,我们将演示如何将它们整合成一个大的逻辑卷并使用。

# ============================================================
# 步骤1:创建物理卷 (PV)
# 将 /dev/sdb 和 /dev/sdc 标记为LVM物理卷。
# ============================================================
sudo pvcreate /dev/sdb /dev/sdc
# 输出类似:
# Physical volume "/dev/sdb" successfully created.
# Physical volume "/dev/sdc" successfully created.

# 查看创建好的物理卷信息
sudo pvs
# 或更详细的
sudo pvdisplay

# ============================================================
# 步骤2:创建卷组 (VG)
# 用这两个物理卷创建一个名为 `data-vg` 的卷组。
# ============================================================
sudo vgcreate data-vg /dev/sdb /dev/sdc
# 输出类似:
# Volume group "data-vg" successfully created

# 查看卷组信息,能看到总容量是两块盘之和
sudo vgdisplay data-vg

# ============================================================
# 步骤3:创建逻辑卷 (LV)
# 从 `data-vg` 中划分出一个200GB的逻辑卷,命名为 `app-lv`。
# ============================================================
sudo lvcreate -L 200G -n app-lv data-vg
# 参数解释:
# -L 200G: 指定逻辑卷大小为200GB。
# -n app-lv: 指定逻辑卷的名称。
# data-vg: 从哪个卷组中划分。

# 查看逻辑卷信息
sudo lvdisplay /dev/data-vg/app-lv

# ============================================================
# 步骤4:格式化并挂载逻辑卷
# 逻辑卷在系统中的路径通常是 `/dev/<VG名>/<LV名>`。
# ============================================================
# 创建文件系统
sudo mkfs.ext4 /dev/data-vg/app-lv

# 创建挂载点并挂载
sudo mkdir /data
sudo mount /dev/data-vg/app-lv /data

# 验证挂载
df -h /data
# 输出中应显示 `/dev/mapper/data-vg-app-lv` 或 `/dev/data-vg/app-lv`,大小约200G。

# ============================================================
# 步骤5:动态扩容逻辑卷(在线扩展!)
# 假设 /data 空间不足,我们向卷组 `data-vg` 中添加一块新磁盘 /dev/sdd,
# 然后将逻辑卷 `app-lv` 扩容100GB。
# ============================================================
# 1. 准备新物理卷并添加到卷组
sudo pvcreate /dev/sdd
sudo vgextend data-vg /dev/sdd

# 2. 扩展逻辑卷大小(增加100GB)
sudo lvextend -L +100G /dev/data-vg/app-lv

# 3. 同步文件系统,使扩容生效(关键步骤!)
sudo resize2fs /dev/data-vg/app-lv  # 对于ext2/3/4文件系统
# 如果是XFS文件系统,使用 `sudo xfs_growfs /data`

# 再次查看挂载点,大小已增加约100GB
df -h /data

实践练习

练习1:基础创建

要求:在系统中找到两个未使用的磁盘分区 /dev/sde1/dev/sdf1,使用LVM创建一个大小为10GB的逻辑卷 test-lv,卷组名为 test-vg,并将其格式化为 ext4,挂载到 /mnt/test预期输出df -h /mnt/test 命令应显示该分区,且大小约为10GB。

练习2:动态扩容

要求:承接练习1,现在假设 /mnt/test 空间不足。请在不卸载挂载点的情况下,将逻辑卷 test-lv 在线扩容5GB(使用卷组 test-vg 中的剩余空间或扩展卷组)。 预期输出:扩容完成后,df -h /mnt/test 显示的大小应增加约5GB。

练习3:清理与删除

要求:安全地删除练习1和练习2中创建的所有LVM组件(逻辑卷、卷组、物理卷),并取消 /mnt/test 的挂载。 预期输出pvs, vgs, lvs 命令均无相关输出,/mnt/test 目录为空。

常见错误

  1. 忘记先创建PV:直接对磁盘使用 vgcreate 会报错。必须先用 pvcreate 初始化磁盘或分区。
  2. 使用错误的设备路径:使用整个磁盘 /dev/sdb 或分区 /dev/sdb1 都可以,但要确保设备正确且未被其他文件系统占用。
  3. 扩容LV后忘记扩展文件系统:这是最常见的错误!lvextend 只是增加了逻辑卷的容量,必须接着使用 resize2fs (ext4) 或 xfs_growfs (xfs) 来扩展文件系统,否则 df 命令看到的可用空间不会增加。
  4. 盲目缩容:缩减(lvreduce)逻辑卷大小风险极高,因为这可能导致数据丢失。操作前必须卸载文件系统,并必须先使用 resize2fs 将文件系统缩小到目标大小以下,然后再用 lvreduce 缩减逻辑卷。通常不建议对正在使用的生产LV进行缩容。
  5. 删除顺序错误:删除LVM组件的顺序必须是:卸载LV -> 删除LV (lvremove) -> 删除VG (vgremove) -> 删除PV (pvremove)。逆序操作会导致错误。

小结

LVM通过在物理磁盘和文件系统之间引入一个逻辑抽象层,为存储管理带来了极大的灵活性。

  • 核心架构物理卷 (PV) -> 卷组 (VG) -> 逻辑卷 (LV)。PV提供原始存储空间,VG汇集空间形成资源池,LV是最终交付给用户使用的分区。
  • 核心优势在线扩容lvextend + resize2fs)是LVM最强大的功能,允许在不中断服务的情况下扩展存储容量。
  • 关键操作:熟练掌握 pvcreate, vgcreate, lvcreate, lvextend, resize2fs, pvs/vgs/lvs 等命令。
  • 重要提醒:扩容LV后务必扩展文件系统;缩容操作风险大,应谨慎执行;删除LVM组件需按正确顺序进行。

通过LVM,你可以将零散的磁盘空间整合成一个统一、可弹性伸缩的存储池,这是现代Linux服务器存储管理的标准实践。下一课,我们将学习如何将多个磁盘组合成具有冗余或性能优势的 RAID 磁盘阵列,它常与LVM结合使用,构建更强大可靠的存储解决方案。

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「RAID 磁盘阵列配置」 以巩固所学知识。