VMware+Ubuntu实战:虚拟磁盘修复与LVM分区扩容完整解决方案

2 阅读7分钟

VMware+Ubuntu实战:虚拟磁盘修复与LVM分区扩容完整解决方案

前言

在使用 VMware 运行 Ubuntu 虚拟机时,常会遇到两个核心问题:一是虚拟磁盘因强制关机、宿主机崩溃导致损坏,提示「需要修复」;二是初始磁盘空间不足,通过 VMware 扩容后,Ubuntu 系统无法识别新增空间。本文结合真实操作场景,从「磁盘修复→VMware 扩容→Ubuntu LVM 分区扩容」全程拆解,提供可直接复制的命令和避坑指南,新手也能快速上手。


一、场景说明

  • 环境:Windows 宿主机 + VMware Workstation/Player + Ubuntu 20.04/22.04(LVM 分区格式)
  • 核心问题
  1. VMware 提示「指定的虚拟磁盘需要进行修复」;
  2. 虚拟磁盘从 10G 扩容到 35G 后,Ubuntu 仅识别 9.8G,剩余空间未利用;
  3. 磁盘分区表显示GPT PMBR size mismatch(GPT/MBR 标识不匹配)。
  • 最终目标:修复虚拟磁盘 + 让 Ubuntu 完全识别 35G 空间,根目录可用空间≥20G。

二、第一步:修复 VMware 虚拟磁盘(Windows 宿主机操作)

虚拟磁盘损坏多因强制关机、文件占用冲突导致,优先用 VMware 自带工具修复,无需复杂命令。

前提准备

  1. 关闭故障虚拟机,完全退出 VMware(右键任务栏 VMware 图标→退出,避免进程占用);
  2. 备份虚拟机核心文件:找到虚拟机安装目录,复制.vmdk(磁盘文件)、.vmx(配置文件)到其他磁盘,防止修复失败;
  3. 确保宿主机剩余空间≥虚拟磁盘实际占用大小的 10%(如虚拟盘用 7.5G,留 1G 以上)。

方法 1:VMware 图形化修复(推荐)

  1. 启动 VMware,选中故障虚拟机(不要开机);
  2. 点击顶部「编辑虚拟机设置」→ 左侧「硬盘」→ 右侧「实用工具」(低版本在「高级」中);
  3. 先点击「检查」:VMware 自动扫描磁盘错误,等待进度条完成;
  4. 扫描出错误后,点击「修复」,完成后关闭设置,尝试启动虚拟机。

🔧 避坑:若「修复」按钮灰色,重启宿主机后再试(彻底释放文件占用)。

方法 2:命令行修复(图形化失效时)

若图形化工具修复失败,用 VMware 自带的vmware-vdiskmanager命令兜底:

  1. 以管理员身份打开 CMD,切换到 VMware 安装目录(默认路径):
# VMware Workstationcd C:\Program Files (x86)\VMware\VMware Workstation
​
# VMware Playercd C:\Program Files\VMware\VMware Player
  1. 执行修复命令(替换为你的.vmdk路径,带空格需用双引号):
vmware-vdiskmanager -r "D:\VM\Ubuntu\Ubuntu.vmdk" -t 0 "D:\VM\Ubuntu\Ubuntu_fix.vmdk"
  1. 修复完成后,打开 VMware→编辑虚拟机设置→移除原损坏硬盘→「添加」→「使用现有虚拟磁盘」→选中_fix.vmdk,启动虚拟机。

三、第二步:VMware 扩容虚拟磁盘(Windows 宿主机操作)

磁盘修复后,通过 VMware 扩展虚拟磁盘容量(以 10G 扩到 35G 为例):

  1. 关闭 Ubuntu 虚拟机,打开 VMware→编辑虚拟机设置→「硬盘」→「扩展」;
  2. 输入扩容后的总大小(如 35G),点击「确定」(VMware 会自动扩展.vmdk文件);
  3. 启动 Ubuntu 虚拟机,此时系统尚未识别新增空间,需后续分区扩容。

四、第三步:Ubuntu LVM 分区扩容(虚拟机内操作)

Ubuntu 默认采用 LVM 分区格式,VMware 扩容后需手动将新增空间分配给根目录,核心是「创建 LVM 分区→加入卷组→扩容逻辑卷」。

1. 查看磁盘状态(确认问题)

先执行以下命令,了解当前磁盘使用和分区情况:

# 查看磁盘挂载和使用情况df -h
​
# 查看磁盘分区详情(确认扩容后的总大小和未分配空间)
​
sudo fdisk -l /dev/sda
​
# 查看磁盘分区结构(确认LVM关联关系)
​
lsblk /dev/sda
关键输出解读:
  • df -h:根目录/仅 9.8G,使用率 81%(空间不足);
  • fdisk -l /dev/sda:磁盘总大小 35G,但最后一个分区sda3仅 18.2G,剩余 16.8G 未分配,且提示GPT PMBR size mismatch(无需单独修复,后续会自动同步);
  • lsblk /dev/sdasda3关联 LVM 逻辑卷ubuntu--vg-ubuntu--lv(根目录挂载点),新增空间未被利用。

2. 创建新 LVM 分区(占用未分配空间)

使用parted工具创建 LVM 格式分区,适配 GPT 分区表:

# 进入parted交互式工具
​
sudo parted /dev/sda

进入后依次输入以下指令(按回车执行,无需额外输入):

mkpart primary 41940992s 100%  # 从sda3末尾扇区(41940991)的下一个扇区开始,占满剩余空间set 4 lvm on  # 标记新分区(sda4)为LVM格式
​
quit  # 退出parted

✅ 说明:

41940992s

需根据你的

sda3

最后扇区调整(用

fdisk -l /dev/sda

查看),确保无缝衔接未分配空间。

3. 刷新分区表,识别新分区

# 刷新分区表,让系统识别sda4
​
sudo partprobe /dev/sda
​
# 验证新分区是否创建成功(能看到sda4即正常)
​
lsblk /dev/sda

4. LVM 核心扩容命令(直接复制执行)

将新分区sda4加入现有 LVM 卷组,扩容根目录逻辑卷:

# 1. 将sda4创建为LVM物理卷
​
sudo pvcreate /dev/sda4
​
# 2. 把物理卷加入现有卷组ubuntu-vg(卷组名用vgs命令可查)
​
sudo vgextend ubuntu-vg /dev/sda4
​
# 3. 将根目录逻辑卷扩容到卷组最大可用空间(占满35G)
​
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
​
# 4. 刷新文件系统,让系统立即识别扩容后的空间
​
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

🔧 避坑:若执行

resize2fs

提示

bad magic number in super-block

,说明文件系统为 XFS,替换为:

sudo xfs_growfs /dev/mapper/ubuntu--vg-ubuntu--lv

5. 验证扩容结果(关键步骤)

执行以下命令,确认扩容成功:

df -h
成功标识:

根目录/Size显示 33G 左右(35G 虚拟盘系统预留 2G),可用空间≥20G,使用率降至 25% 左右,如下:

/dev/mapper/ubuntu--vg-ubuntu--lv   33G  7.5G   24G  25% /

五、常见问题与避坑指南

1. 修复磁盘时提示「文件被占用」

  • 解决:任务管理器结束vmware.exevmware-vmx.exe进程,或重启宿主机。

2. 创建分区时提示Partition(s) on /dev/sda are being used

  • 解决:无需担心,parted支持在线分区,直接按步骤执行即可,不会丢失数据。

3. 扩容后根目录大小未变化

  • 排查:是否漏执行resize2fs(刷新文件系统),或卷组名、逻辑卷路径错误(用vgslvs命令确认)。

4. GPT PMBR size mismatch提示未消失

  • 说明:该提示是 VMware 扩容后分区表标识不同步导致,无需单独修复,扩容完成后再次执行sudo fdisk -l /dev/sda,提示会自动消失。

六、后续维护建议

  1. 定期清理系统冗余,保持空间充裕:
# 清理apt缓存、无用软件和7天前日志

sudo apt autoremove --purge -y && sudo apt clean -y && journalctl --vacuum-time=7d -y

# 删除临时文件

sudo rm -rf /tmp/* /var/tmp/*
  1. 避免强制关闭虚拟机,优先使用 Ubuntu 内「关机」功能,防止磁盘损坏;
  2. 若需再次扩容,重复「VMware 扩展磁盘→创建 LVM 分区→LVM 扩容」流程即可;
  3. 大文件(镜像、压缩包)建议存放在/home目录,避免根目录快速占满。

总结

本文从实际场景出发,完整覆盖了「VMware 虚拟磁盘修复→磁盘扩容→Ubuntu LVM 分区扩容」的全流程,核心是利用 VMware 自带工具修复磁盘,通过 LVM 分区管理实现空间扩展。所有命令均经过实战验证,步骤清晰、避坑指南到位,适合新手和有同类需求的开发者参考。如果遇到具体报错,可根据报错信息核对步骤或留言交流~