在生产或测试环境中,经常会遇到虚拟机磁盘空间不足,需要进行在线扩容。下面整理一次典型的 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 mismatchbackup 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 的虚拟化场景,可作为常用维护笔记保存。

Leave a Reply

Your email address will not be published. Required fields are marked *