虚拟机磁盘动态扩容(原理+实操)
环境:
windows11主机
vmware虚拟机 ubuntu22.04 server
引言:为何我们需要动态磁盘管理?
你是否曾经历过这样的场景?一台运行着关键服务的Ubuntu 22.04 Server,经过数月的稳定工作后,突然开始频繁发出磁盘空间不足的警报。通过df -h命令检查,发现根分区(/)的使用率已经飙升至90%以上。在传统分区方案下,这几乎意味着一场灾难性的维护操作:你需要准备系统安装盘、备份所有数据、重新规划分区、格式化磁盘,最后再恢复数据——整个过程耗时耗力,且存在极高的数据丢失风险。
幸运的是,现代Linux发行版普遍采用了一种名为逻辑卷管理(Logical Volume Manager, LVM)的技术。LVM彻底改变了这一困境,它允许你在不中断服务的情况下,对磁盘进行“在线扩容”。这意味着你可以像给房子加盖楼层一样,为你的服务器动态增加存储空间,而无需“搬家”或停机。
本文将为你详细解析在Windows 11上的VMware虚拟机环境中,如何对一个基于LVM架构的Ubuntu 22.04 Server进行安全、高效的磁盘扩容。我们将深入探讨核心概念,并提供一份可直接复用的操作手册。
核心存储概念详解
在动手操作之前,理解底层的存储架构至关重要。
(一)LVM三层架构模型
LVM的核心思想是将物理存储资源抽象化,形成一个灵活的“存储池”。它由三个层级构成:
-
物理卷 (Physical Volume, PV)
物理卷是 LVM 结构的最底层。它指的是一个真实的物理存储设备,例如一个完整的硬盘(如/dev/sdb)或硬盘上的一个分区(如/dev/sdb1)。这个物理设备经过 LVM 的初始化后,才能被 LVM 识别和使用。 -
卷组 (Volume Group, VG)
卷组是建立在物理卷之上的一个抽象层。它将一个或多个物理卷的存储空间整合在一起,形成一个统一的、大容量的“存储池”。这个存储池屏蔽了底层物理设备的差异,使得管理员可以像管理一个整体设备一样来管理它 -
逻辑卷 (Logical Volume, LV)
逻辑卷是从卷组这个“存储池”中划分出来的虚拟存储空间。它相当于传统意义上的磁盘分区,可以被格式化(如 ext4, XFS)并挂载到文件系统中供操作系统使用。逻辑卷的最大优势在于其大小可以动态调整,而无需重新分区或中断服务。 -
PE (Physical Extent)
PE 是物理卷上被划分出的最小存储单元,是卷组分配空间的基本单位。当物理卷被创建时,它会被自动分割成许多大小相等的 PE(默认大小通常为 4MB)。卷组在创建逻辑卷时,就是以 PE 为单位来分配空间的。逻辑卷也对应着逻辑扩展块(Logical Extent, LE),一个 LE 会映射到一个 PE。
(二)文件系统类型对比
逻辑卷创建后,需要在其上建立文件系统才能存储文件。Ubuntu 22.04主要支持两种主流文件系统:
| 特性 | ext4 | XFS |
|---|---|---|
| 是否支持在线扩容 | 是 | 是 |
| 是否支持缩容 | 是 | 否 |
| 推荐场景 | 通用型系统分区,兼容性好 | 大文件、高性能需求,数据库等 |
重要提示:虽然两者都支持在线扩容,但XFS文件系统不支持在线缩容。一旦扩大,就无法轻易缩小。因此,选择文件系统时需根据未来需求权衡。
Ubuntu 22.04 Server磁盘扩容完整流程
本节将带你一步步完成从VMware设置到系统级扩容的全过程。请务必严格按照顺序执行。
步骤1:VMware层面扩展虚拟磁盘
这是扩容的第一步,也是前提条件。你不能凭空变出磁盘空间。
操作前提:
- 关闭虚拟机:必须完全关机,而非挂起。
- 删除所有快照:VMware会锁定磁盘以防止快照链损坏,因此必须先删除所有快照,否则“扩展”按钮将处于灰色不可用状态。
具体操作:
- 在VMware Workstation中,右键点击你的Ubuntu虚拟机,选择“设置”。
- 在硬件列表中选择“硬盘”。
- 点击右侧的“扩展”按钮。
- 在弹出的窗口中,输入新的总容量(例如,如果原为20GB,想扩到40GB,则输入“40”)。
- 点击“扩展”确认。
成功标志:启动虚拟机后,通过sudo fdisk -l /dev/sda命令,你应该能看到磁盘的总容量已更新为新值。
步骤2:确认系统是否使用LVM
并非所有系统都使用LVM。我们首先需要验证。
lsblk
观察输出结果。如果你看到类似以下结构(这里是扩容后的结果):

其中TYPE列为lvm,并且设备路径包含mapper字样,那么恭喜你,系统正在使用LVM,可以继续后续步骤。
你也可以通过以下命令进一步确认:
sudo vgdisplay
sudo lvdisplay
如果有正常输出,说明LVM配置正确。
步骤3:LVM系统扩容(标准路径)
现在进入最关键的系统级操作。请确保每一步都成功后再进行下一步。
3.1 扩展底层分区(growpart)
VMware扩展了磁盘,但操作系统内的分区表还不知道这个变化。growpart工具就是用来解决这个问题的。
安装工具:
sudo apt update && sudo apt install cloud-guest-utils -y
执行扩展: 假设你的LVM物理卷位于/dev/sda3,执行:
sudo growpart /dev/sda 3
注意:命令中的/dev/sda和3之间有空格,分别代表磁盘设备和分区号。
预期输出:
CHANGED: partition=3 start=... new: size=..., end=...
出现CHANGED字样即表示分区扩展成功。
3.2 扩展物理卷(pvresize)
此步骤是为了让LVM识别到growpart刚刚扩展的分区空间。
sudo pvresize /dev/sda3
验证:
pvs
你应该能看到PSize(物理卷大小)已经增大,并且PFree(空闲空间)大于0。如果没有,请检查上一步是否成功。
3.3 扩展逻辑卷(lvextend)
现在,我们从卷组的空闲空间中,为根逻辑卷分配更多容量。
占用所有空闲空间:
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
这里的+100%FREE是一个非常实用的参数,它表示使用卷组中100%的剩余空间。
或指定增量(例如增加10GB):
sudo lvextend -L +10G /dev/mapper/ubuntu--vg-ubuntu--lv
预期输出:
Size of logical volume ubuntu-vg/ubuntu-lv changed from <14.00 GiB to 27.00 GiB
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
3.5 扩展文件系统
这是最后一步,也是最容易被忽略的一步。lvextend只扩大了逻辑卷,但文件系统仍然认为自己只有旧的大小。我们必须手动通知文件系统去利用新空间。
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
终极快捷命令: 为了简化流程,避免忘记最后一步,强烈推荐使用lvextend的-r参数,它可以自动同步文件系统扩展:
sudo lvextend -r -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
这条命令会依次完成逻辑卷扩展和文件系统调整,大大降低了出错概率。
关键注意事项
| 项目 | 说明 |
|---|---|
| 快照清理 | 扩容前必须删除所有快照,否则VMware无法扩展磁盘。 |
| 分区相邻性 | 未分配空间必须与目标分区相邻,否则growpart无法扩展。 |
| 命名一致性 | 实际名称可能为ubuntu-vg而非ubuntu--vg,请通过vgs命令精确查询。 |
| 文件系统匹配 | 绝对不要对XFS文件系统使用resize2fs,反之亦然。 |
| 在线操作支持 | LVM与ext4/xfs均支持在线扩容,无需卸载根分区。 |
结语:掌握弹性存储的艺术
永远记住:任何磁盘操作都伴随着风险。
现在,你已经拥有了为服务器“无痛增肌”的能力。不妨在你的测试虚拟机上动手实践一番,将理论转化为真正的经验。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)