虚拟机 Ubuntu 磁盘扩容完全指南:从原理到实践,一步到位

一、为什么要写这篇文章?

在使用虚拟机进行开发、测试或学习的过程中,磁盘空间不足是几乎每个开发者都会遇到的问题。初始分配的 20GB、40GB 磁盘空间,随着系统更新、Docker 镜像堆积、项目文件增多,很快就会捉襟见肘。

很多同学在面对扩容问题时感到困惑:

  • ✅ 虚拟机设置里扩展了磁盘,为什么 df -h 看不到变化?
  • ❌ 扩容会不会丢失数据?
  • ❌ 快照和扩容有什么关系?

二、概念

2.1 虚拟磁盘的两层结构

要理解扩容的本质,首先需要明白虚拟机磁盘的 "两层结构"

复制代码
┌─────────────────────────────────────────────┐
│           第一层:虚拟化层(Hypervisor)        │
│   VMware / VirtualBox 管理的虚拟磁盘文件(.vmdk) │
│   ← 这一步是 "扩展物理边界"                      │
└─────────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────────┐
│          第二层:操作系统层(Guest OS)         │
│   Ubuntu 的分区表和文件系统                    │
│   ← 这一步是 "重新分区 & 扩容文件系统"            │
└─────────────────────────────────────────────┘

关键认知:

  • 在虚拟机设置中点击"扩展",只是增大了第一层的虚拟磁盘文件
  • 必须进入操作系统内部,对第二层进行重新分区,才能让新空间生效
  • 这就是为什么很多人扩展后用 df -h 查看发现空间没变的原因!

2.2 扩容操作的三大阶段

阶段 操作位置 核心动作 风险等级
🟢 准备阶段 虚拟机管理界面 备份、清理快照
🟡 扩展阶段 虚拟机设置 → 硬盘 → 扩展 增大虚拟磁盘容量
🔵 分区阶段 Ubuntu 系统内 重新分区、调整文件系统

三、前置准备

3.1 删除所有快照

快照(Snapshot) 是虚拟机在某个时间点的状态保存。扩容前必须删除所有快照,原因如下:

  • 快照依赖的是差异磁盘(differential disk) 机制,扩容操作需要修改基础磁盘文件
  • 存在快照时,扩容操作可能失败或导致快照数据损坏
  • 某些虚拟化软件在存在快照时会直接禁用磁盘扩展选项

操作路径: 虚拟机菜单 → 快照管理器 → 选择所有快照 → 删除

3.2 完整备份(强烈建议!)

扩容操作虽然成熟可靠,但任何磁盘操作都存在风险,特别是:

  • 第一次进行扩容操作
  • 生产环境或包含重要数据的虚拟机
  • 对 Linux 分区不熟悉的用户

推荐的备份方式:

bash 复制代码
# 方式1:直接复制虚拟磁盘文件(需先关闭虚拟机)
cp my-vm.vmdk my-vm-backup.vmdk

# 方式2:使用虚拟机自带的克隆/导出功能
# VMware: 文件 → 导出为 OVF
# VirtualBox: 管理 → 克隆

💡 经验之谈:宁可备份了不用,也不要用的时候没有。这一步花费的时间,远低于数据丢失后恢复的成本。


四、实操步骤详解

步骤一:虚拟化层面扩展磁盘

VMware Workstation 为例(VirtualBox 类似):

  1. 关闭虚拟机(部分支持在线扩容,但建议关机操作更安全)

  2. 打开 虚拟机设置硬盘(Hard Disk)

  3. 点击 "扩展(Expand)" 按钮

  4. 输入目标磁盘大小(例如从 40GB → 80GB)

  5. 点击确认,等待扩展完成

    操作路径:
    虚拟机 → 设置(Settings) → 硬盘(Hard Disk) →
    → 扩展(Expand) → 输入新大小 → 扩展(Expand)

扩展完成后,系统通常会弹出提示:

⚠️ 提示信息:"您需要在客户机操作系统中重新对磁盘进行分区,以利用新的磁盘空间。"

这个提示正是我们接下来要做的事情。

步骤二:验证当前状态

启动虚拟机,打开终端执行:

bash 复制代码
df -h

此时会发现------磁盘大小还是原来的值! 这是正常现象。

原因回顾: 我们只完成了第一层的扩展,第二层的分区表还没有更新。新增的空间就像一个"未分配的房间",还没有被纳入文件系统的管理范围。

步骤三:Ubuntu 内重新分区(图形化方式)

这是让新空间生效的关键步骤!

方法 A:使用 GNOME Disks 工具(推荐 🌟)

这是 Ubuntu 自带的图形化磁盘管理工具,操作直观且安全:

  1. 打开 Ubuntu 的 活动概览(按 Super 键或点击左下角)
  2. 搜索 "Disks" 或中文 "磁盘"
  3. 打开 GNOME Disks 应用程序

在 Disks 界面中:

  • 左侧选择需要扩容的虚拟硬盘设备 (通常显示为 /dev/sda
  • 选择需要扩展的分区(通常是最后一个分区)
  • 点击分区条目上的 齿轮图标 ⚙️
  • 选择 "调整大小/Resize""调整分区大小"
  • 拖动滑块到最大值(将圆球/滑块拖到最右侧,占用所有未分配空间)
  • 点击 "Resize"(调整大小)按钮
  • 等待操作完成
方法 B:使用命令行方式(进阶)

对于习惯终端操作的同学,也可以使用命令行完成:

bash 复制代码
# 1. 安装 parted 工具(如果尚未安装)
sudo apt update && sudo apt install -y parted

# 2. 查看磁盘和分区情况
sudo parted /dev/sda print free

# 3. 使用 growpart 扩展分区(以扩展第1个分区的第1个分区为例)
sudo growpart /dev/sda 1

# 4. 扩展文件系统(ext4)
sudo resize2fs /dev/sda1

# 或者对于 LVM 逻辑卷
# sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
# sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

步骤四:验证扩容结果

操作完成后,再次执行验证命令:

bash 复制代码
df -h

预期输出示例:

复制代码
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        75G   15G   56G  21%  /

🎉 如果看到磁盘总容量已经变成设定的目标大小,说明扩容成功!







五、常见问题与排查指南(FAQ)

Q1:扩展选项是灰色的,无法点击?

可能原因及解决方案:

  • ❌ 存在快照 → 先删除所有快照
  • ❌ 虚拟机正在运行 → 关闭虚拟机后再操作
  • ❌ 磁盘模式为"独立模式" → 更改磁盘模式设置

Q2:扩容后 df -h 还是没变?

检查清单:

  1. 是否完成了虚拟机设置中的"扩展"操作?→ 重新确认第一步
  2. 是否进入了 Ubuntu 并进行了分区调整?→ 执行步骤三
  3. 使用 sudo fdisk -l 查看是否能看到更大的磁盘总量 → 如果能看到但分区没变,说明问题出在分区步骤

Q3:扩容过程报错怎么办?

  • 错误类型: "Failed to extend the virtual disk"
  • 解决方向: 检查宿主机磁盘是否有足够空间;尝试将虚拟机文件移动到空间充足的磁盘再操作

Q4:能否在线扩容(不关机)?

  • VMware: 支持对 SCSI 控制器的磁盘进行热扩展,但分区调整仍需要在系统内操作
  • VirtualBox: 一般需要关闭虚拟机后再进行磁盘扩展
  • 建议: 无论哪种情况,关机操作更安全可靠

Q5:扩容有上限吗?

理论上限取决于:

  • 宿主机可用磁盘空间
  • 虚拟化软件的限制(一般可达数 TB)
  • 文件系统的限制(ext4 单分区最大支持 1EB)

六、最佳实践与总结

✅ 推荐的操作流程图

复制代码
┌─────────────┐
│  ① 备份虚拟机  │ ──→ 安全基石
└──────┬───────┘
       ↓
┌─────────────┐
│ ② 删除所有快照│ ──→ 解除依赖约束
└──────┬───────┘
       ↓
┌─────────────┐
│③ 虚拟机设置扩展│ ──→ 扩大物理边界
└──────┬───────┘
       ↓
┌─────────────┐
│④ 启动系统验证 │ ──→ df -h 确认现状
└──────┬───────┘
       ↓
┌──────────────┐
│⑤ GNOME Disks │ ──→ 重新分配分区
│  调整分区大小  │
└──────┬───────┘
       ↓
┌─────────────┐
│⑥ 再次验证结果 │ ──-> 🎉 完成!
└─────────────┘

📝 总结要点

要点 说明
🔑 核心理解 扩容 = 虚拟层扩展 + OS 层重分区,缺一不可
🛡️ 安全第一 务必先备份,再操作
📸 快照清理 扩容前必须删除所有快照
🖥️ 工具选择 新手推荐 GNOME Disks 图形化工具
最终验证 df -h 确认扩容效果

写在最后

虚拟机磁盘扩容看似复杂,但只要理解了两层结构 的核心原理,按照正确的流程一步步操作,其实是一件非常可控且安全的事情。

如果在实际操作中遇到问题,欢迎在评论区留言交流~

适用环境:VMware Workstation / VirtualBox + Ubuntu 20.04/22.04/24.04


觉得有用的话,点个「在看」支持一下吧!关注我,获取更多运维开发实战干货 🚀

相关推荐
陳10302 小时前
Linux:进程间切换与调度
linux·运维·服务器
lcreek2 小时前
Linux 虚拟文件系统的建立与使用全过程解析
linux·虚拟文件系统·vfs
寒秋花开曾相惜2 小时前
(学习笔记)第四章 处理器体系结构
linux·网络·数据结构·笔记·学习
疏星浅月3 小时前
虚拟内存三大核心作用详解
linux·c语言·arm开发·嵌入式硬件
邂逅星河浪漫4 小时前
【银行内网开发-管理端】Vue管理端+Auth后台开发+Nginx配置+Linux部署(详细解析)
linux·javascript·css·vue.js·nginx·html·前后端联调
码农小钻风4 小时前
利用Samba实现局域网跨平台共享文件
linux·samba·共享
LN花开富贵5 小时前
【ROS】鱼香ROS2学习笔记二
linux·笔记·python·学习·嵌入式
GS8FG5 小时前
Busybox生成根文件系统,并移植e2fsprogs:RK3568
linux·驱动开发
Cyber4K7 小时前
【Nginx专项】基础入门篇:状态页、微更新、内容替换、读取、压缩及防盗链
linux·运维·服务器·nginx·github