VMware Ubuntu 虚拟机磁盘已扩容,为什么还是无法启动?(磁盘100%占满解决方案)

VMware Ubuntu 虚拟机磁盘已扩容,为什么还是无法启动?(磁盘100%占满解决方案)

前言

最近遇到了一个比较坑的问题。

VMware 中的 Ubuntu 24.04 虚拟机由于长期开发,磁盘被写满了。

于是我第一反应就是:

VMware → 设置 → 硬盘 → 扩展(Expand)磁盘容量

例如:

40GB → 50GB

本以为重启就好了,结果却发现:

[FAILED] Failed to start gdm.service - GNOME Display Manager.

图形界面始终无法启动。

经过排查发现:

VMware 扩容成功 ≠ Ubuntu 分区自动扩容。

本文记录完整解决过程。


一、故障现象

启动 Ubuntu 后停留在:

[FAILED] Failed to start gdm.service - GNOME Display Manager.

无法进入桌面。

但是:

Ctrl + Alt + F3

可以进入 tty 登录界面。

说明:

  • Linux 内核正常
  • 根分区正常挂载
  • systemd 正常启动
  • 只是图形界面启动失败

二、原因分析

进入终端以后查看磁盘:

df-h

输出:

Filesystem Size Used Avail Use% /dev/sda2 40G 39G 0 100%

可以看到:

根分区已经100%满了

即使 VMware 已经扩容,

Ubuntu 仍然认为:

/ 40GB

因为:

VMware 只是扩大了虚拟硬盘(VMDK),并没有自动扩大 Linux 分区。


三、确认 VMware 是否扩容成功

查看磁盘:

lsblk

例如:

NAME SIZE sda 50G ├─sda1 1M └─sda2 40G

这里可以看到:

整个硬盘:

50G

但是:

sda2 只有40G

说明:

新增的:

10G

仍然没有分配给系统。


四、为什么图形界面启动失败?

Ubuntu Desktop 的图形界面(GDM)启动时需要:

  • 创建临时文件
  • 创建 Socket
  • 写日志
  • 创建缓存

而:

/ 100%

以后:

任何写入都会失败。

所以最终出现:

Failed to start gdm.service

实际上:

不是 GDM 坏了,而是磁盘没有可用空间。


五、第一步:进入终端

启动以后按:

Ctrl + Alt + F3

登录自己的账号。


六、查看磁盘使用情况

查看整体:

df-h

查看一级目录大小:

sudodu-xh/ --max-depth=12>/dev/null|sort-hr

例如:

39G / 23G /home 5.1G /var 5.1G /usr

说明:

真正占空间的是:

/home

而不是:

/var/log

或者:

Docker

七、扩容 Linux 分区

Ubuntu 不会自动使用 VMware 新增加的空间。

需要手动扩容。

安装工具:

sudoaptinstallcloud-guest-utils

扩展第二个分区:

sudogrowpart /dev/sda2

扩展 ext4 文件系统:

sudoresize2fs /dev/sda2

再次查看:

df-h

结果:

Filesystem Size /dev/sda2 50G

说明扩容完成。


八、如果磁盘100%,无法安装 growpart 怎么办?

因为:

100%

以后:

甚至:

apt install

都有可能失败。

此时建议:

先释放一点空间。

例如:

清理 apt 缓存:

sudoaptclean

清理 journal:

sudojournalctl --vacuum-size=100M

或者查看:

sudodu-xh/home --max-depth=2|sort-hr

删除一些不需要的大文件。

只要腾出几百 MB 即可继续操作。


九、为什么 Ubuntu 不自动扩容?

很多人都有这个疑问。

例如:

原来:

40G ┌──────────────┐ │ sda2 40G │ └──────────────┘

VMware 扩容以后:

50G ┌──────────────┬──────────┐ │ sda2 40G │ 10G 空闲 │ └──────────────┴──────────┘

Ubuntu 无法判断:

新增的:

10G

究竟应该:

  • 扩给根目录
  • 新建数据盘
  • 建立新的分区
  • 留给 LVM

所以:

Linux 默认不会自动修改分区。


十、总结

整个问题其实可以归纳成一句话:

VMware 扩容的是虚拟硬盘,而不是 Ubuntu 分区。

因此:

VMware Expand ↓ 虚拟磁盘变大 ↓ Ubuntu 分区大小不变 ↓ 根分区仍然100% ↓ GDM启动失败

正确流程应该是:

VMware 扩容 ↓ Ubuntu 查看磁盘(lsblk) ↓ growpart 扩展分区 ↓ resize2fs 扩展 ext4 ↓ df -h 验证 ↓ 重启

常用命令汇总

# 查看磁盘使用率df-h# 查看磁盘分区lsblk# 查看磁盘详细信息sudofdisk-l# 查看一级目录占用sudodu-xh/ --max-depth=12>/dev/null|sort-hr# 清理 apt 缓存sudoaptclean# 清理 journal 日志sudojournalctl --vacuum-size=100M# 安装扩容工具sudoaptinstallcloud-guest-utils# 扩展分区sudogrowpart /dev/sda2# 扩展 ext4 文件系统sudoresize2fs /dev/sda2

踩坑总结

  1. 不要认为 VMware 扩容后 Ubuntu 会自动识别新增空间。
  2. df -hlsblk是排查磁盘问题最重要的两个命令。
  3. 出现Failed to start gdm.service时,不一定是图形系统损坏,很多情况下只是根分区已满。
  4. 开发环境建议一开始就分配 80~100GB 以上磁盘空间,避免频繁扩容。

这套方法适用于VMware + Ubuntu Desktop(普通 ext4 根分区,非 LVM)的磁盘占满导致无法启动场景,对 VirtualBox 等虚拟机平台也具有参考价值。