在生产或测试环境中,经常会遇到虚拟机磁盘空间不足,需要进行在线扩容。下面整理一次典型的 Linux 虚拟机磁盘扩容并扩展 LVM 根分区 的完整流程,供参考。
📌 场景简介
- 系统:基于 Ubuntu,采用 LVM 管理根分区
- 原始磁盘大小:约 12 GB
- 新磁盘大小:32 GB(通过虚拟化平台扩容后)
- 根分区挂载在
/dev/mapper/ubuntu-root - 使用 GPT 分区表
🧰 检查当前分区及 LVM 状态
使用以下命令查看磁盘、物理卷(PV)、卷组(VG)及逻辑卷(LV)情况:
fdisk -l
pvs
vgs
lvs
df -h
结果显示 /dev/sda3 为 LVM 使用的主分区,原容量约 11.5G,扩容后磁盘有大量未使用空间。
🔧 调整 GPT 分区表
执行以下命令查看并修复 GPT 分区表(如有提示 GPT PMBR size mismatch 或 backup GPT table is not at the end of the device):
parted /dev/sda print
parted /dev/sda
(parted) resizepart 3 100%
(parted) quit
执行 partprobe 命令让内核重新读取新的分区表:
partprobe
💡 扩展物理卷(PV)
物理卷扩展命令:
pvresize /dev/sda3
此时再次查看 pvs,应看到物理卷大小已经变为约 31.5G,且存在可用空闲空间。
📦 扩展逻辑卷(LV)
将全部剩余空间分配给根逻辑卷:
lvextend -l +100%FREE /dev/mapper/ubuntu-root
执行 lvs 可确认逻辑卷已经扩大到约 29.5G(具体容量根据 swap 等配置不同略有差异)。
🗂️ 扩展文件系统
根据实际文件系统类型,执行不同命令进行扩容:
- ext4 文件系统:
resize2fs /dev/mapper/ubuntu-root
- xfs 文件系统:
xfs_growfs /
扩容完成后,可通过 df -h 查看根分区容量,确认已经成功扩大。
✅ 最终状态
示例输出如下:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu-root 29G 5.4G 23G 20% /
/dev/sda2 511M 6.1M 505M 2% /boot/efi
LVM 逻辑卷信息:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root ubuntu -wi-ao---- <29.50g
swap ubuntu -wi-a----- 2.00g
卷组及物理卷信息:
VG #PV #LV #SN Attr VSize VFree
ubuntu 1 2 0 wz--n- <31.50g 0
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu lvm2 a-- <31.50g 0
💬 总结
此次扩容流程包含以下核心步骤:
1️⃣ 修复并调整 GPT 分区表
2️⃣ 扩展 LVM 物理卷(PV)
3️⃣ 扩展逻辑卷(LV)
4️⃣ 扩展文件系统
此方案可安全地在线完成,不影响系统正常运行。完成后建议备份或生成快照,以保证后续可回滚。
💡 参考命令汇总
parted /dev/sda print
parted /dev/sda resizepart 3 100%
partprobe
pvresize /dev/sda3
lvextend -l +100%FREE /dev/mapper/ubuntu-root
resize2fs /dev/mapper/ubuntu-root
df -h
🚩 这篇记录适用于大部分基于 LVM 的虚拟化场景,可作为常用维护笔记保存。