简介这是一份面向Linux运维与虚拟化入门开发者的VMware虚拟机磁盘扩容实操指南针对虚拟机根分区或数据盘空间不足、软件无法安装、服务写满磁盘等常见故障给出从VMware Workstation到Linux系统内的完整处理方案。文档以Red Hat Enterprise Linux环境为例细致讲解通过Edit Virtual Machine Settings的Utilities扩展磁盘容量随后使用fdisk调整分区表、创建新分区/dev/sda4并依次完成重启生效、mkfs格式化、创建挂载点、mount临时挂载以及修改/etc/fstab实现开机自动挂载。除主流程外还补充了当前分区已无未分配空间时新增一块虚拟硬盘的替代做法方便读者根据实际磁盘布局选择方案。包内为1个docx文档容量约324KB以步骤、命令和截图对照为主适合边看边操作。已有6512人学习下载能帮助读者在保留系统数据的前提下安全扩容避免重装系统带来的环境重建开销。1. 扩容前必须想清楚的三件事用 VMware 跑 Linux 做开发几乎都会撞上同一个尴尬系统盘 20G 用完了编译一个项目都报 No space left on device数据库一启动就写不进日志。重装系统倒是干净但开发环境、依赖库、中间件配置全得重来一遍一折腾就是大半天。给 VMware 虚拟机增加磁盘空间这件事难点不在 VMware 那个图形界面而在 Linux 里的分区、格式化、挂载三步少一步新空间都是废的。这篇文章要解决的就是把这套流程走通顺手把最容易让人翻车的几个细节——分区号、重启时机、fstab 写法——一次讲透。2. 扩容前的环境准备磁盘类型、空间规划与快照备份2.1 磁盘类型决定操作路径动手之前先确认虚拟机的磁盘类型。VMware Workstation 里常见的虚拟磁盘有两种厚置备Thick Provision和精简置备Thin Provision还有是否拆分多文件Split into multiple files的区别。这些体现在 .vmdk 文件上单个大文件还是 2GB 一个的小文件块。关键区别在于如果当初创建虚拟机时勾选了 Split into multiple files扩容前一定要确认虚拟机关机且没有任何快照锁住磁盘。否则 VMware 的 Expand 选项会直接变灰或者点下去以后进度条卡死。常见做法是在扩展前先删除旧快照或在没有快照的状态下操作等到扩完盘、分区做完确认没问题再重新建快照。另外还要确认虚拟磁盘是 SCSI 还是 SATA 类型。菜单位置略有不同但对内部操作影响不大核心是确认设备名是 /dev/sda 还是 /dev/sdb。如果是 NVMe 虚拟磁盘设备名会变成 /dev/nvme0n1fdisk 的操作对象完全不一样。这类环境最好使用 parted 配合 GPT 分区表后面第 4 章会详细对比。2.2 空间规划先想清楚扩给谁用扩容前先在 Linux 里执行 df -h 看当前挂载点分布再执行 lsblk 看磁盘和分区的关系。常见情况是 /dev/sda 一整块盘分了 sda1boot、sda2root、sda3swap 或数据分区空间全用完了。这时要决定新空间给谁挂到独立的 /disk4 目录还是把新分区变成某个现有目录的扩展。如果只是想给根目录 / 增加空间最稳妥的方式仍然是新建分区并挂载到独立目录。不建议直接改原有分区的布局因为移动或调整已有分区都有风险尤其是 swap 分区在中间的情况。独立挂载的好处是不影响系统盘原有结构fstab 一行就能搞定自动挂载。提示扩容前记下当前分区布局。用 lsblk -f 可以看到分区的文件系统类型和 UUIDfdisk -l 能看到柱面、扇区等物理信息。这些信息在配置 fstab 和排错时非常有用。2.3 快照备份这是最后一道后悔药磁盘扩容虽然操作不复杂但分区表一旦写错或者 fstab 配错导致无法启动恢复起来很痛苦。这里强烈建议在执行任何扩容操作之前先在 VMware 里对虚拟机做一次快照。具体操作确保虚拟机已关机右键虚拟机标签页 → Snapshot → Take Snapshot给快照起个容易认的名字。快照只保留一天也没关系扩容完成并确认系统正常后再进入 Snapshot Manager 把旧快照删除并重新拍一个新快照这能释放虚拟磁盘的占用空间。注意如果在开机状态下拍摄快照可能导致文件系统不一致扩容时 fdisk 读取到的分区表可能不完整。最保险的做法是关机快照。另外快照文件和 .vmdk 存在同一目录扩容前要确认宿主机物理磁盘有足够空间否则 Expand 过程会因宿主机空间不足而失败。3. 虚拟机磁盘扩容实操从 VMware Expand 到 Linux 分区挂载3.1 在 VMware 里扩展虚拟磁盘容量关闭虚拟机后在 VMware Workstation 主界面选择目标虚拟机点击 Edit virtual machine settings在 Hardware 选项卡里选中 Hard Disk右侧 Utilities 下拉菜单中点击 Expand。在弹出的窗口中把 Maximum size 改到目标值。对于原本是 20G 的磁盘扩展到 50G 算是比较常见的做法这一步只要宿主机物理磁盘空间充足通常几分钟以内就能完成。Expand 过程会看到进度条中途不要中断否则虚拟磁盘文件损坏的风险不小。完成以后 VMware 界面里看到的磁盘容量已经是 50G但这只是虚的Linux 里仍然只看到原来的 20G。启动 Linux 前建议执行一次 VMware Tools 的收缩操作当然这台机器还没装 VMware Tools 的话可以跳过。重点是如果虚拟机是从模板克隆出来的可能在启动时触发磁盘重扫出现 /dev/sda 找不到或分区号偏移的问题遇到这种情况后面会有排查方案。3.2 在 Linux 中用 fdisk 创建新分区以 root 身份登录系统先执行 fdisk -l 查看当前磁盘设备。如果当前只有 /dev/sda且最大分区是 /dev/sda3那么经过扩容之后磁盘还有约 30G 的未分配空间后续新建的分区自然是 /dev/sda4。执行 fdisk /dev/sda 进入交互模式。这个工具是老牌分区工具几乎每个 Linux 发行版都自带用起来不需要额外安装在只有一块盘的小场景下足够用。操作流程如下fdisk /dev/sda进入交互界面后依次执行# 在 fdisk 交互界面的 Command 提示符下输入 m # 查看帮助 n # 创建新分区 p # 选择 primary 主分区 # 分区号为 4直接回车接受默认值即可 # 起始柱面直接回车使用默认值 # 结束柱面直接回车使用默认值代表吃掉所有剩余空间 w # 保存分区表并退出这套操作的逻辑是扩容后磁盘尾部有了一段未分配的空间fdisk 找到这段空间在它上面新建一个主分区。分区号之所以是 4是因为 13 已经存在fdisk 自动分配最小的可用编号。起始柱面直接回车意味着把新分区从头开始排过去中间不会留下空洞结束柱面回车则让分区占满所有剩余空间。保存后用 fdisk -l 再确认一次应该能看到 /dev/sda4 了。3.3 重启使分区表生效分区表写完后必须重启系统这一步不是可有可无的。Linux 内核在运行期间对分区表的缓存是旧的直接格式化 /dev/sda4 会提示 no such file or directory 或 ioctl 错误。重启后内核重新读取分区表/dev/sda4 才会真实存在。reboot重启回来后执行 ls /dev/sda4看到设备文件再继续。有些系统是 systemd 环境用 partprobe 也能让内核重新读取分区表但在这里不推荐原因是虚拟磁盘场景下有时重扫不彻底万一没生效还得重启一次不如一步到位。3.4 格式化新分区新分区现在是裸的没有任何文件系统不能直接挂载。格式化这一步使用 mkfs 工具。这里要注意一个选择使用 ext2 还是 ext4。原文档中给出的是 ext2适合非常老的环境。但如果是 RHEL 6 及以上版本建议用 ext4 替代 ext2因为 ext4 有日志功能意外断电丢数据的风险低得多。mkfs.ext4 /dev/sda4格式化过程中会输出 inode 数量、块数量等信息。完成后执行 blkid /dev/sda4记下新分区的 UUID——这个地方后面配置 fstab 时用得上用 UUID 可以避免设备号漂移问题。3.5 挂载新分区到指定目录格式化完成后把新分区挂载到根目录下新建的 /disk4 目录mkdir /disk4 mount /dev/sda4 /disk4mount 执行后用 df -h 确认 /disk4 已经出现在列表里空间应该显示为 30G 左右的可用容量。如果这里显示正常说明 VMware 扩容、分区、格式化、挂载四步全部打通了。这时如果在 VMware 里看虚拟磁盘的分配情况会发现实际占用没有增加太多因为新分区还没写入数据用多少占多少。提示不要把新分区挂载到已有数据的目录上比如 /home 本身已经有内容再挂载 /dev/sda4 会把原有数据遮住原数据并未删除只是暂时看不见了。恢复方法就是卸载新分区原数据立刻回来。3.6 配置 fstab 实现开机自动挂载手动 mount 只是临时生效重启后会丢失。要让 /disk4 每次开机都自动挂载必须写入 /etc/fstab。使用 vim 编辑文件追加一行vim /etc/fstab在文件末尾添加以下内容/dev/sda4 /disk4 ext4 defaults 0 0这里有三个值得注意的点。第一推荐用 UUID 替换 /dev/sda4这样即使 Linux 启动时设备名因为多块盘认盘顺序变化而改变挂载也不会失败。第二文件系统类型要和你格式化时保持一致用了 ext4 写 ext2 会导致挂载失败并报错 wrong fs type。第三最后两个字段0 表示不参与 dump 备份0 表示开机不执行 fsck 扫描。如果希望开机检查磁盘完整性可以填 2但不建议对普通数据盘开 fsck因为检查会导致开机变慢。使用 UUID 的写法UUIDxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /disk4 ext4 defaults 0 0改完保存退出。先执行 umount /disk4再执行 mount -a 测试一下。如果 mount -a 没有报错说明 fstab 配置是正确的此时 df -h 里 /disk4 重新出现可以放心重启。4. 常见问题排查分区表不生效到 mount 失败五条实战踩坑记录4.1 现象一扩容后 Linux 里看不到新空间原因VMware 只是把虚拟磁盘尾部撑大了Linux 内核和分区表并不知道这段空间存在。fdisk -l 里看到的是旧分区表磁盘总容量仍然显示扩容前的大小。解决确认虚拟机已经关机完成扩容重启 Linux 后再次执行 fdisk -l。如果仍然显示旧大小检查 VMware 设置页里硬盘的容量数值是否已经更新如果显示已更新但 fdisk 还是旧值尝试在 VMware 里移除并重新添加硬盘设备这种情况多出现在从模板克隆的虚拟机上。4.2 现象二fdisk 创建分区时报 No free sectors available原因磁盘上虽然有剩余空间但分区表是 MBRMBR 最多只能有 4 个主分区而 sda1sda4 都已被占用或 sda3 创建时占满了整块盘没有留下尾部空间给 sda4。解决fdisk 创建分区时先检查是否已有 4 个 primary 分区。如果已有 4 个主分区可以考虑删除一个不用的分区再新建或者用 parted 将某分区转换为逻辑分区逻辑分区可以放在扩展分区里又或者创建扩展分区 逻辑分区逻辑分区编号从 5 开始。另一种更省事的方案是直接在 VMware 里增加新硬盘而不是硬扩原盘。新硬盘到系统里会是 /dev/sdb可以独立分区挂载不用动原分区表。4.3 现象三重启后 /dev/sda4 仍然不存在原因fdisk 只写了分区表内核没重读或者系统启动时 SCSI 设备扫描顺序发生了变化设备名从 sda 变成了 sdb。解决先执行 partprobe /dev/sda 或 partx -u /dev/sda 让内核重新读取如果还不行重启系统确认。在 fdisk -l 里看清设备名再操作不要拿文档里的 sda 当成永不变的名称。多块盘或虚拟磁盘控制器类型不同时设备名顺序可能完全不同。这种情况建议后续 fstab 里改回 UUID 方式彻底避免认盘顺序带来的影响。4.4 现象四mkfs.ext4 提示 Device /dev/sda4 not found原因设备节点没有生成。常见于分区表写完后未重启内核未重读直接执行 mkfs系统找不到这个节点。解决先确认分区表里是否存在 sda4——执行 fdisk -l 查看输出如果存在partprobe 后再次检查 /dev/sda4如果还不行reboot 一步到位。记住口诀分区 → 重启 → 格式化 → 挂载顺序不能乱跳过重启这步最容易翻车。4.5 现象五修改 fstab 后开机卡在 A start job is running for /disk4原因fstab 里挂载点和设备信息不匹配。例如设备名写错、UUID 抄错、文件系统类型错误写了 ext2 但实际是 ext4系统在开机阶段等待挂载超时卡在启动界面 90 秒。解决开机进入紧急模式emergency mode执行 mount -a 查看报错信息对应修正 fstab。在紧急模式下根文件系统通常是只读状态先执行 mount -o remount,rw / 把根切为可写再编辑 fstab。修正后执行 systemctl daemon-reload 并重启。从那以后我每次改完 fstab 都强制走一遍 mount -a reboot不再偷懒只测 mount 不测开机。5. 扩容后的验证与收尾检查三个必须跑通的验证方法扩容操作到 fstab 写完整个流程并没有结束。最后这套验证是一个都不能少的。首先执行 df -h确认 /disk4 挂载点在列表里容量正确可用空间为新增大小。df -h 显示的是挂载信息只要看到了就说明分区和文件系统没问题。第二步验证自动挂载。执行 umount /disk4然后执行 mount -a。mount -a 会按 fstab 的内容自动挂载所有条目如果没有任何报错且 df -h 里 /disk4 重新出现fstab 基本没问题。但 mount -a 成功不等同于开机自动挂载成功因为开机阶段还会涉及 systemd 的加载顺序。所以最后一步是重启一次重启后执行 df -h | grep disk4确认系统启动后自动挂载生效。第三步验证文件系统完整性。执行 tune2fs -l /dev/sda4 查看文件系统状态检查 Filesystem state 是否显示 clean。如果是 ext4再执行 e2fsck -n /dev/sda4 做只读检查。这里要注意 e2fsck 只能对未挂载的分区执行确认 /disk4 已经卸载再跑。新格式化出来的分区一般不会出错但经过多少次断电或异常关机之后养成检查习惯没有坏处。如果你扩容的是双系统共存的环境比如宿主机是 Windows虚拟机是 Linux还要额外确认 VMware 的磁盘文件在宿主机上没有被杀毒软件锁定否则下次开机可能报磁盘锁定错误。这种问题在频繁快照和多快照场景下特别常见删除旧快照是缓解手段之一。新空间落到 /disk4 之后建议顺手做一次目录规划来规范使用大文件、日志、数据库数据文件放 /disk4系统盘保留给程序和系统文件。后续再遇到空间不足的情况优先检查 /disk4 的使用量而不是重新起一个分区或者再插一块新盘。经过这套扩容的完整流程以后我每次碰到磁盘空间告警第一反应都是先 lsblk 看分区号再 df -h 看挂载点最后动 fstab——顺序对了基本不会出问题。希望这篇笔记能帮你少走一次弯路。本文还有配套的精品资源点击获取