第80课:LVM 逻辑卷管理
学习目标
完成本课学习后,你将能够:
- 理解LVM核心概念:清晰阐述物理卷(PV)、卷组(VG)和逻辑卷(LV)的关系与作用。
- 掌握LVM创建流程:熟练使用命令从创建物理卷到最终生成可用逻辑卷的全过程。
- 执行LVM动态管理:掌握在线扩容、缩容逻辑卷,并理解其中的风险与注意事项。
- 实践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 目录为空。
常见错误
- 忘记先创建PV:直接对磁盘使用
vgcreate会报错。必须先用pvcreate初始化磁盘或分区。 - 使用错误的设备路径:使用整个磁盘
/dev/sdb或分区/dev/sdb1都可以,但要确保设备正确且未被其他文件系统占用。 - 扩容LV后忘记扩展文件系统:这是最常见的错误!
lvextend只是增加了逻辑卷的容量,必须接着使用resize2fs(ext4) 或xfs_growfs(xfs) 来扩展文件系统,否则df命令看到的可用空间不会增加。 - 盲目缩容:缩减(
lvreduce)逻辑卷大小风险极高,因为这可能导致数据丢失。操作前必须卸载文件系统,并必须先使用resize2fs将文件系统缩小到目标大小以下,然后再用lvreduce缩减逻辑卷。通常不建议对正在使用的生产LV进行缩容。 - 删除顺序错误:删除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结合使用,构建更强大可靠的存储解决方案。