简介:针对Linux下VMware虚拟机磁盘空间不足的常见问题,这份docx操作指南面向Linux运维人员、开发测试者及虚拟化入门用户,可解决Red Hat Enterprise Linux等发行版因根分区写满导致软件无法正常安装、服务无法启动的窘境。系统讲解从VMware Workstation扩展虚拟磁盘,到Linux系统内分区扩容的完整流程,文档以Red Hat Enterprise Linux为例,适用于多数主流Linux发行版;资源仅1个docx文档,压缩包约324KB,内容结构紧凑,配有界面截图与命令行示例,即使不熟悉分区操作的读者也能对照逐步实施。文档覆盖两种扩容场景:现有磁盘未分配空间的扩展法,以及新增硬盘后的分区、格式化与挂载方法;重点演示fdisk交互式创建/dev/sda4分区、mkfs.ext2格式化、mount临时挂载及编辑/etc/fstab实现开机自动挂载等关键步骤,并对创建主分区、接受默认柱面、保存设置等交互细节给出明确提示,避免初学者误操作。目前已有6512人学习下载,步骤经过较多用户实践验证,实用性较好。掌握这套扩容思路后,无需重装系统即可安全扩展VMware虚拟机存储空间,避免重复配置开发环境、减少服务中断时间,适合作为日常运维、虚拟化实验和故障排查场景下的速查手册。
1. 磁盘满的虚拟机扩容:为什么 VMware 调大了盘 Linux 还是满的
Linux 系统里用 VMware 虚拟机做开发,最怕听到 no space left on device。软件安装到一半直接失败,依赖包、日志、数据库占满系统盘,有时候连 SSH 都登不进去,只能看着一台虚拟机变成“假死”状态。更折腾的是:你在 VMware 设置里把磁盘从 20G 调到 50G,满心期待重启后空间变大,结果 Linux 里 df -h 一看,还是原来的容量,好像什么都没发生过。这个“扩容不生效”的坑,几乎是每个 VMware 用户必踩的项目,我也是来回折腾了好几轮才摸清楚完整链路:VMware 只是把虚拟硬盘文件做大,Linux 侧还需要自行分区、格式化、挂载,三者缺一不可。这篇就按故障推进的顺序,把每一步的报错逻辑、解决命令和验证手段拆开讲,照着做基本能一次走通。
2. VMware 层扩容:把虚拟硬盘做大只是开始
2.1 图形界面 Expand:一般场景的第一选择
打开 VMware,选中虚拟机,点击 Edit virtual machine settings,在 Hardware 选项卡里选中 Hard Disk,右侧的 Utilities 下拉菜单中就能找到 Expand。点击后会要求输入目标磁盘容量,比如把 20G 改成 50G,确认后进入一个较长的 Expand 过程,这个过程是在把 vmdk 文件在宿主机磁盘上真正撑大,耗时取决于当前磁盘用量和宿主机磁盘速度。
# 命令行等效操作(VMware 自带的磁盘管理工具) vmware-vdiskmanager -x 50GB "/data/vm/你的虚拟机.vmdk"参数说明:-x 表示扩展目标大小,后面必须跟虚拟磁盘的 vmdk 文件路径,路径含空格时用引号包住。这个命令适合 GUI 打不开、或者你习惯用 SSH 在宿主机上操作时使用,效果和界面里的 Expand 完全一致。不过虚拟机处于挂起状态时,建议先在 VMware 里关机关闭电源,再做扩展,避免文件锁冲突导致扩容失败或 vmdk 损坏。
为什么要在这里停下来强调?因为 Expand 完成后,Linux 启动后依然只看到原来的 sda1、sda2、sda3,df 照样报满。虚拟磁盘的分区表和文件系统完全没有被改动,VMware 只是给你留出了一段“未分配的空白空间”。记住这句判断,能免掉后面一半的困惑:Expand 是给磁盘预留空间,不是直接给系统加容量。操作前我还建议先给虚拟机做个快照,分区表操作一旦失误,快照是最有效的后悔药,比任何修复工具都省心。
2.2 无法 Expand 时:新增一块磁盘(Add)是廉价后悔药
有些场景下 Expand 是灰色不可点的,比如虚拟磁盘是别人导出的 OVA 转出来的,或者磁盘存在较老的快照链,VMware 界面会直接禁用扩展。这时候不用急着重装系统,加一块新硬盘即可。还是在 Edit virtual machine settings 界面,点击 Add,设备类型选 Hard Disk,容量给一个想要的数值,比如 50G,然后一路 Finish。
新增的磁盘在 Linux 里通常会显示为 /dev/sdb,而不是原盘的 sda。注意,这个差异就是很多人“找不到新空间”的原因:数据盘是独立设备,不是 sda4。它后续的处理流程和原盘一样,需要 fdisk /dev/sdb 分区、mkfs 格式化、mount 挂载,唯一区别是分区名变成了 sdb1、sdb2。如果你的虚拟机里已经有好几块盘,新盘可能变成 sdc、sdd,连设备名都可能不同,这时候不要凭记忆猜,用 lsblk 看一次就能确定。
2.3 为什么 Linux 看不到新空间:这是两层黑匣子
这是最多人卡住的认知断层。VMware 把虚拟磁盘文件扩大后,理论上 Linux 的 SCSI 驱动可以感知到更大的磁盘容量,但内核在启动时读取的磁盘大小信息已经缓存在内存里;更重要的是,分区表里没有任何一个分区用到了新空间,所以文件系统层面(df -h)完全无变化。
我的判断习惯是:先 lsblk,再看 fdisk -l /dev/sda。lsblk 能直接显示磁盘总容量,如果 sda 已经变成 50G,但下面分区依然停在 20G 的布局,说明 VMware 层已经生效,该做 Linux 侧的分区和格式化。千万别重复重启 VMware 或重开虚拟机,那不会有任何效果,问题不在宿主机,而在客户机操作系统。理解了这个两层黑匣子的结构,你就能明白:VMware 负责把“虚拟硬盘做大”,Linux 侧的分区、文件系统、挂载路径,每一步都需要手动接手。
3. fdisk 分区:手动分出 /dev/sda4 的完整流程
3.1 fdisk -l 先读盘:分区编号别被“最大分区”带偏
以 root 身份登录系统,第一步执行 fdisk -l /dev/sda,把当前分区布局完整列出来。你大概率会看到 sda1、sda2、sda3 三个分区,sda3 是编号最大的那个。原资料里“最大分区为 /dev/sda3,说明新创建的分区将会是 sda4”这个表述容易误导新人,“最大”在这里指的不是容量最大,而是分区编号最大、位于磁盘后部,sda 后面的数字是内核给每个分区排的顺序号,不是大小单位。
fdisk -l /dev/sda看输出时注意两件事:一是磁盘总容量是否已经变成 VMware 层设定的 50G,如果还是 20G,说明硬件层没改成功,回到第 2 章重新检查;二是当前最后一个分区的编号,如果显示的是 sda3,那你下一步新增的就是 sda4。如果你看到分区表里已经有 sda5、sda6 这种编号,说明这块盘曾经用过扩展分区/逻辑分区布局,情况会复杂一点,在 3.3 里单独说明。
3.2 fdisk 交互命令逐条拆:n、p、三个回车、w
进入 fdisk 交互界面,整个过程只需要四个关键动作:n 新建分区、p 选择主分区、三个回车接受默认值、w 写盘保存。下面是完整交互序列:
fdisk /dev/sda Command (m for help): m # 查看帮助,新手先按这个 Command (m for help): n # 新增一个分区 Partition type: p primary / e extended Select (default p): p # 明确输入 p,创建主分区 Partition number (1-4, default 4): 回车 # 直接回车接受默认编号 4 First sector (2048-104857599, default 2048): 回车 # 回车取默认起始扇区 Last sector, +sectors or +size (…, default …): 回车 # 回车使用剩余全部空间 Command (m for help): w # 将分区表写入磁盘并退出逐条解释:m 只是列帮助菜单,不做任何修改;n 进入新建分区流程;这里的 p 是 primary(主分区),不要选 e(extended)。接下来三个回车是重点,别手痒输入数字。Partition number 默认 4,说明这是倒数第一个可用主分区编号,接受即可;First sector 默认值正好是 sda3 结束位置的下一个扇区,让系统自动选可以保证不会覆盖旧数据;Last sector 默认值是磁盘末尾,回车把 VMware 扩容出来的整个空白区域全部划进 sda4,不浪费一丁点空间。
最后 w 一定要记得输:fdisk 的所有操作都只存在内存里,w 才是真正写盘。如果中途发现序号输错了,可以用 q 退出,什么都不会保存。这是 fdisk 给的最后反悔机会。写盘后再执行一次 fdisk -l /dev/sda,看到 sda4 出现在分区列表里,Start 在 sda3 之后、End 在磁盘末尾位置,分区这一步才真正完成。
3.3 到底要不要 reboot:分区表刷新与 LVM 的特殊路
原资料里写完 w 之后强调“必须 reboot,否则 /dev/sda4 无法格式化”,这个说法在大多数现代发行版里其实有两种处理方式。内核不会自动重新读取分区表,新建的分区节点不会立刻出现,所以 mkfs.ext4 /dev/sda4 会报 No such file or directory。
现代内核大多支持 partprobe 热重读分区表,常见做法是执行 partprobe /dev/sda,让内核重新扫描一次;如果执行完 ls /dev/sda4 还是没出现,说明内核还没认,这时就不要纠结了,直接 reboot。我的建议是:只要机器允许重启,优先 reboot,这是最稳的;服务器不能重启时再把 partprobe 当应急手段,它不是 100% 可靠。
还有一个隐藏分支:如果你的 RHEL 是走 LVM 安装的(安装程序里默认“使用 LVM”),fdisk -l 看到的布局完全不同,根分区挂载点往往是 /dev/mapper/xxx 而不是 /dev/sda3。这种布局不适合照抄 sda4 方案,应该创建物理卷、vgextend、lvextend 来扩逻辑卷,否则后期系统会非常别扭。判断方法很简单:lsblk 里看到 mapper 或者 vg 字样,就说明你在 LVM 路上,直接跳过分区这一步;看到干净的 sda1/sda2/sda3,才按本文章节继续。
4. 格式化与挂载:mkfs、mount 与 fstab 持久化的正确打开方式
4.1 格式化的文件系统选择:为什么现在用 ext4 而不是 ext2
重启或 partprobe 成功后,确认 /dev/sda4 已出现,接下来格式化。原资料写的是 mkfs.ext2,那是早期资料的选择,ext2 没有日志功能,断电或系统崩溃后容易丢数据,现在几乎不会有人新建 ext2 分区。常见做法是用 ext4,兼容性好,支持日志,虚拟机关机异常时恢复能力强。
mkfs.ext4 /dev/sda4如果想让数据盘将来在 Windows 和 Linux 之间共享,可以改用 mkfs.vfat 或 mkfs.xfs;XFS 在某些 RHEL 发行版里是根文件系统默认选择,但作为通用的数据盘,ext4 不易出错。格式化会把分区上所有数据清空,所以执行前必须再次核对设备号,重点检查你到底是在格式化 /dev/sda4,还是手滑写成了 sda3。这个错误在虚拟机上发生过不止一次,一条命令下去系统盘数据全没,而且普通删除的文件还能找回,格式化后的恢复成本就高太多了。
4.2 挂载与验证:mount 以后该看哪几个输出
新分区需要挂载点才能被访问。常见做法是在根目录下建一个独立目录,比如 /disk4,路径清晰,也不影响系统盘的原有目录结构。
mkdir /disk4 mount /dev/sda4 /disk4/ df -hmkdir 创建目录,mount 把分区挂载上去,df -h 验证挂载结果。执行完 df -h,应该能看到 /dev/sda4 挂在 /disk4,容量接近扩容后剩余的可用空间。注意 df 显示的是文件系统大小,不是磁盘原始大小,会因文件系统元数据开销略有出入,但不会差出数量级。如果 mount 报错,先用 dmesg | tail 看内核日志,最常见的报错是 wrong fs type,说明格式化没成功,或者分区类型被建成了扩展分区,需要回头检查 fdisk 那一步。
4.3 开机自动挂载:fstab 五个字段与 UUID 防漂
临时挂载在重启后失效,/disk4 会变成空目录。要想开机自动挂载,必须编辑 /etc/fstab。打开文件,在末尾追加下面这一行:
vim /etc/fstab/dev/sda4 /disk4 ext4 defaults 0 0字段从左到右的含义:设备名、挂载点、文件系统类型、挂载参数、是否 dump 备份、是否开机 fsck 检查。defaults 包含 rw、suid、dev、exec、auto 等常规组合,对数据盘够用;最后的 0 0 表示不参与 dump 和启动检查。设备名可以写 /dev/sda4,但更稳的是写成 UUID,因为设备名可能因磁盘顺序变化发生漂移,下次开机变成 sdb4,挂载就失败了。用 blkid /dev/sda4 查看 UUID,替换第一列,比如写成 UUID=xxxx-xxxx,这样无论设备名怎么变动,挂载目标都不会错。
写入后有一个关键时刻:先执行 mount -a 测试一下,它会按 fstab 内容把所有条目重新挂载一遍;如果这条命令报错或挂在某个字段上,说明配置有问题,当场改掉,别等到重启时才发现系统卡在挂载阶段。改 fstab 前把原文件备份成 /etc/fstab.bak,任何一行写错都有回退余地,这是最便宜的一条预防措施。
5. 扩容高频翻车点排查:现象、原因、解决
这里整理五条我在不同环境里见过的扩容失败案例,全部按“现象 → 原因 → 解决”的结构写,基本覆盖你接下来可能遇到的九成问题。
5.1 df -h 没变化:误以为 VMware 层扩容没生效
现象:VMware 里磁盘已经改成 50G,重启后 df -h 依然显示原来的满容量。原因:这是把 VMware 的 Expand 当成了 Windows 下的分区助手动作用,实际上 Expand 只扩大虚拟磁盘文件,分区表、文件系统都没动。解决:按第 3、4 章流程补做 Linux 层操作;做完后及时用 df -h 重查,必要时先 sync 再执行,文件系统缓存不会实时刷新,稍微等一两秒是正常现象。不要反复重启 VMware,问题不在宿主机。
5.2 /dev/sda4 不出现:reboot 和 partprobe 怎么选
现象:fdisk 写完 w,ls /dev/sda* 里没有 sda4,执行 mkfs.ext4 /dev/sda4 报 No such file or directory。原因:内核分区表缓存没有刷新,新建分区的设备节点没有生成。解决:有重启条件直接 reboot;没有的情况下执行 partprobe /dev/sda,等两秒再看 ls /dev/sda4;如果还是没有,回头检查 fdisk 操作是否真正写盘成功,fdisk -l 里是否真的列出了 sda4。有些虚拟化环境还需要触发 SCSI 驱动重新扫描,这里不展开,重启是效率最高的一招。
5.3 分区表不敢动:fdisk 里只用 n、p、w、q 四条命令
现象:新人对 fdisk 的 m 帮助菜单几十条命令发怵,不知道按什么,担心按错把分区表写坏。原因:fdisk 是交互式工具,但本文流程只依赖四条命令,其它命令在当前场景下就不需要碰。解决:把流程固化成肌肉记忆:n 新建、p 主分区、三个回车、w 写盘。想反悔就 q,退出后所有操作撤销,分区表原封不动。做完 w 后用 fdisk -l 再看一次,确认 sda4 的 Start 和 End 位置符合预期再继续。分区表操作慢即是快,每一步都停一下确认输出,比一口气输到底稳得多。
5.4 fstab 写错:开机卡在挂载失败的应急恢复
现象:fstab 加了一行 sda4 配置,重启后系统进入 emergency 模式,或者卡在挂载超时反复重试。原因:字段填错、设备名写错、文件系统类型写错都可能导致挂载失败,最常见的是把 ext4 写成 ext2,或者设备名写成了 /dev/sda(磁盘)而不是 /dev/sda4(分区)。解决:进入维护模式后,先执行 mount -o remount,rw / 把根文件系统改成可写,然后 vim /etc/fstab 修正或删除错误行;如果改动前备份了 fstab,直接恢复备份。重点是预防:改完 fstab 先 mount -a 验证,再考虑重启,这是唯一的可靠顺序。如果扩容前建了快照,此时恢复快照是最快的后悔药。
5.5 新空间小得离谱:主分区还是扩展分区没选对
现象:按流程挂载后,df -h 显示容量远小于预期,或者 mkfs 阶段直接报错无法格式化。原因:fdisk 询问分区类型时,如果你输入了 e 或者直接回车接受了扩展分区默认值,分区就会变成 extended。扩展分区本身不承载数据,只是逻辑分区的容器,不能直接格式化用。解决:重新进入 fdisk /dev/sda,用 d 删除建错的分区,再走一遍 n → p → 三个回车 → w。MTD 布局下最多四个主分区;如果四个槽位都已经用完,需要另想分区表手术,建议直接在 VMware 层新增一块磁盘更简单。分区表本身就是 GPT 时,主分区数量限制不同,但做法思路一致,先确认 sda4 的类型是 primary 再格式化。
6. 十秒定位:扩容卡在哪一层的快速排查法
遇到扩容后空间还没有变大,先别急着翻日志,执行下面三条命令就能知道卡在哪一层:
df -h # 看文件系统使用和挂载情况 lsblk # 看磁盘总容量与分区结构 fdisk -l /dev/sda # 看分区表细节与未分配空间把三者对照起来,结论很直接:
- lsblk 里 sda 已经是 50G,但分区里没有 sda4:卡在分区阶段,回到第 3 章重新执行 fdisk。
- 有 sda4,df -h 却看不到 /disk4:卡在挂载阶段,检查 mount 命令是否执行、fstab 是否写对。
- 有 sda4 且挂载成功,但根分区还是满的:程序装的路径不对,新空间挂在 /disk4,而你持续往 / 下写文件,等于扩容白做。
- lsblk 里 sda 总容量还是 20G:VMware 层的 Expand 或 Add 没生效,回到第 2 章检查虚拟机设置;特别注意,挂起状态改硬件配置往往不生效,必须完全关机(Power Off)再开机。
- 输出里看到 mapper、vg、lv 关键字:这是 LVM 布局,不要走 fdisk 分区这条路,要用 vgextend 和 lvextend 扩展逻辑卷,否则后续扩容路径会越走越乱。
这套查法我每次扩容时都会强制走一遍,尤其是 df、lsblk、fdisk 三连,每一条输出都能直接指向下一步动作。之前遇到过一次虚拟机“磁盘满”的假警报,实际是 fstab 把新盘挂到了 /tmp,缓存文件全堆积在那块盘上,系统盘反而没怎么用,排查了半天才意识到是挂载点选错。从那以后,凡是给虚拟机加盘,我都是先拍快照,再执行三连确认,分区前用 blkid 核对设备,改完 fstab 一定 mount -a 验证再重启,这套流程走下来,基本没在扩容这件事上再翻过车。希望帮到你。
本文还有配套的精品资源,点击获取