当前位置:首页>Linux>Linux虚拟机磁盘容量不足?简单几步完成扩容!

Linux虚拟机磁盘容量不足?简单几步完成扩容!

  • 2026-10-11 06:14:42
Linux虚拟机磁盘容量不足?简单几步完成扩容!

Linux虚拟机磁盘容量不足?简单几步完成扩容!

适用场景:VMware Workstation / Player + Ubuntu(传统分区) · 面向有一定 Linux 基础的读者

虚拟机跑着跑着,突然一条 No space left on device 糊在脸上;df -h 一看,根分区赫然 100%。删缓存、清日志只能续命几天,治标不治本。其实给虚拟机扩容并不需要重装系统,全程三步就能搞定。本文带你走一遍完整流程。

一、先搞清楚:扩容为什么要分三步

很多人第一次扩容会踩这样的坑:在 VMware 里把磁盘从 20G 改成 40G,重启进系统一看,df -h 还是 20G,以为失败了。

原因在于,虚拟机里的磁盘空间其实是三层嵌套的结构,你只改了最外面一层,里面两层并不会自动跟着变大。所以完整的扩容动作也对应三步,缺一不可:

层级
工具 / 位置
作用
① 虚拟磁盘
VMware 设置界面
把 .vmdk 文件容量调大
② 分区
growpart
让分区吃掉新增的空闲空间
③ 文件系统
resize2fs
让文件系统撑满整个分区

记住这张图,后面每一步你都知道自己在操作哪一层,排错时也不会抓瞎。

二、动手之前的准备工作

扩容本身很安全,但下面这几条准备能帮你避开 90% 的翻车现场:

⚠️ 关键:先删快照,再关机如果虚拟机存在快照(Snapshot),VMware 里"扩展磁盘"的按钮会是灰色不可点的。这是新手最常见的卡点。请先在“虚拟机 → 快照 → 快照管理器”里删除所有快照,再进行下一步。

准备清单:

  • 关闭虚拟机
    :必须是完全关机(Power Off),挂起(Suspend)状态不行。
  • 删除全部快照
    :原因见上方警告框。
  • 确认磁盘不是"独立/非持久"模式
    :否则同样无法扩展。
  • 做个备份
    :正常操作不会丢数据,但重要虚拟机建议先复制一份 .vmdk 目录,图个安心。

三、第一步:在 VMware 里扩大磁盘

这一步操作的是最外层的虚拟磁盘文件,全程在图形界面完成:

  1. 确保虚拟机已关机。
  2. 选中该虚拟机,点击 「编辑虚拟机设置」(Edit virtual machine settings)。
  3. 在「硬件」列表中选中 「硬盘 (Hard Disk)」。
  4. 右侧点击 「扩展 (Expand)」,在弹框里填入新的磁盘大小(例如从 20 改为 40 GB),确认。
  5. 等待进度条走完,点「确定」关闭设置。

💡 提示VMware 弹框里通常会写一句:扩展磁盘容量后,还需要在客户机操作系统里对分区和文件系统进行扩展。—— 这正是我们下面第二、三步要做的事,VMware 自己并不会帮你做。

现在开机进入 Ubuntu。此时用 lsblk 查看,会发现磁盘 sda 已经变大,但分区 sda3 还是原来的大小,后面多出一块未分配空间:

$ lsblkNAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT sda      8:0    0   40G  0 disk           ← 磁盘已经是 40G├─sda1   8:1    0    1M  0 part ├─sda2   8:2    0    2G  0 part /boot └─sda3   8:3    0   18G  0 part /            ← 分区还停在 18G
先确认几个关键信息,后面命令要用到:
  • 要扩容的磁盘设备名:这里是 /dev/sda。
  • 要扩容的分区号:根分区 / 挂在 sda3,所以分区号是 3。
  • 再用 df -hT / 确认文件系统类型是 ext4(决定第三步用哪个命令)。
$ df -hT /Filesystem     Type  Size  Used Avail Use% Mounted on /dev/sda3      ext4   18G   17G  0.5G  98% /← 类型 ext4,用量已 98%

四、第二步:用 growpart 扩展分区

growpart 能在分区已挂载、系统在线运行的状态下,安全地把分区边界推到磁盘末尾,无需卸载或进入 LiveCD。它由 cloud-guest-utils 包提供,默认可能没装:

# 安装 growpart(若提示 command not found)
$ sudo apt update
$ sudo apt install -y cloud-guest-utils

然后执行扩容。注意语法:磁盘设备和分区号是两个用空格分开的参数,不要用 /dev/sda3 这种写法:

# 格式: sudo growpart  <磁盘设备>  <分区号>$ sudo growpart /dev/sda 3CHANGED: partition=3 start=4198400 old: size=37746688 new: size=79693824

⚠️ 最容易写错的一行是 growpart /dev/sda 3(设备 + 空格 + 分区号),不是growpart /dev/sda3。写成后者会报 unexpected number of partitions 之类的错误。

再看一眼 lsblk,分区 sda3 已经变成 40G 附近了。但此时 df -h 里的可用空间还没变——因为文件系统还没跟上,这就是最后一步的事。

五、第三步:用 resize2fs 扩展文件系统

对 ext2/ext3/ext4 文件系统,用 resize2fs 把文件系统撑满整个分区。同样支持在线扩容,不用卸载:

# 参数是分区,不是磁盘$ sudo resize2fs /dev/sda3resize2fs 1.46.5 (30-Dec-2021) Filesystem at /dev/sda3 is mounted on /; on-line resizing required The filesystem on /dev/sda3 is now 9961728 (4k) blocks long.

💡 如果你的文件系统是 xfsUbuntu 默认是 ext4,但如果第一步 df -hT 显示类型是 xfs,就不能用 resize2fs,改用 xfs_growfs,且参数是挂载点而非分区:sudo xfs_growfs /

最后验证成果:

$ df -h /Filesystem      Size  Used Avail Use% Mounted on /dev/sda3        39G   17G   21G  45% /← 40G 到位,可用空间回来了

看到 Size 变大、Use% 降下来,扩容就彻底完成了。整个过程不用重启、不用重装、数据零丢失。

六、常见坑与排错清单

现象
原因 & 解决
VMware「扩展」按钮是灰的
存在快照,或磁盘为独立模式。删除全部快照、改回持久模式后重试。
扩了磁盘但 df -h 没变
只做了第一步。继续执行 growpart + resize2fs 这两步。
growpart 报 command not found
没装工具:sudo apt install cloud-guest-utils。
growpart 报 unexpected number 等错
语法写错。正确是 growpart /dev/sda 3,设备与分区号之间要有空格。
growpart 提示 NOCHANGE
分区后面没有空闲空间。确认第一步 VMware 磁盘确实已扩大,且开机后 lsblk 里 sda 已变大。
resize2fs 报 bad magic number
文件系统不是 ext 系。八成是 xfs,改用 xfs_growfs /。
要扩的分区不是最后一个
growpart 只能向后吃相邻的空闲空间。若目标分区后面还有别的分区,需借助 parted/gparted 调整,操作前务必备份。

七、三条命令速查

确认好设备名和分区号后,核心其实就这三步(以根分区在 /dev/sda3、文件系统 ext4 为例):

▍扩容三连

# 0. VMware 里先把磁盘调大并开机,然后:
# 1. 装工具(已装可跳过)sudo apt install -y cloud-guest-utils
# 2. 扩分区(设备 空格 分区号)sudo growpart /dev/sda 3
# 3. 扩文件系统(ext4); sudo resize2fs /dev/sda3
# 4. 验证df -h /

把设备名(/dev/sda)和分区号(3)换成你自己 lsblk 里看到的值即可。收藏这篇,下次磁盘再告急,三分钟搞定。

本文流程适用于 VMware + Ubuntu 传统分区(MBR/GPT 普通分区)场景。

最新文章

随机文章