虚拟机磁盘空间不足,优先在虚拟化平台里把虚拟磁盘文件调大,再进系统扩展分区和文件系统;如果虚拟磁盘格式或快照结构不支持直接扩容,就新增一块独立虚拟磁盘并迁移数据。 很多人以为扩容只是把硬盘“调大”这么简单,实际上一半的扩容失败都发生在最后一步:分区没扩展。
虚拟机磁盘空间不足怎么解决?先分清原因再动手
- 快照累积,你给虚拟机开了快照,之后产生的每次写入都会先计入快照增量文件,快照越多、时间越久,磁盘占用越离谱,业内专家指出,快照和日志往往是虚拟机磁盘膨胀最主要的两个隐性来源。
- 日志与应用缓存,数据库的binlog、容器日志、
/var/log下的系统日志,都会悄悄吞掉大量空间,很多服务器跑上一两年,根分区就满了,清理日志往往能省出不少空间。 - 磁盘文件格式的影响,精简置备的虚拟磁盘按需增长,刚开始很省空间,但删掉虚拟机内部文件后容量并不会自动归还;厚置备则是一开始就占满宿主机的空间,扩容前要评估宿主机剩余存储是否够用。
判断方法是:先进虚拟机看 df -h,再回宿主平台查虚拟磁盘文件实际大小,两步对照后,你就能确定是“真的需要扩容”,还是“清理一下就能救回来”,如果是日志或快照导致的空间告警,优先清理而不是扩容。
扩展虚拟机磁盘容量,先想清楚走哪条路
直接扩容虚拟磁盘文件,适合系统盘根分区满了、数据不需要迁移的场景,这是大多数人的第一选择。新增独立虚拟磁盘,适合数据积累型负载,比如把数据库目录搬到新盘上;或者直接扩容报错,比如磁盘格式太老、快照链太乱。
| 对比项 | 直接扩容虚拟磁盘 | 新增独立数据盘 |
|---|---|---|
| 适用场景 | 根分区或系统盘空间不足 | 数据目录持续增长、原盘不宜动 |
| 操作复杂度 | 相对简单 | 需要挂载、迁移数据 |
| 风险点 | 必须处理快照、分区扩展 | 新盘盘符、开机自启挂载配置 |
| 常见平台支持 | VMware、VirtualBox、Hyper-V、KVM | 几乎所有平台 |
如果只是临时救急,新增数据盘更安全;如果目标是扩大 或 C: 盘,直接扩容再扩展分区才是正路。
vmware虚拟机磁盘扩容:图形界面三步走
VMware Workstation 用户,按下面顺序操作:
- 关机,虽然 VMware Workstation 也支持在线扩展,但为了避免文件系统状态不一致,关机最稳妥。
- 打开“虚拟机设置”,选中硬盘,右侧找到 扩展 按钮。
- 输入新的磁盘大小,点击确定,等待进度条走完。
这里有个前置条件:如果这台虚拟机有快照,扩展大小按钮通常是灰色不可用的,你需要先在“快照管理器”里删除当前快照,或在“虚拟机 → 快照”里执行合并操作,合并过程中磁盘文件会变大,留足宿主机的可用空间。
很多人在这一步结束后立刻回到虚拟机里看,发现容量没变化,就开始怀疑操作失败了,其实是正常的,因为虚拟磁盘文件变大后,还需要在虚拟机内部把分区和文件系统一并扩大,这一步放在文章后面专门说。
其他主流平台的扩容操作:VirtualBox、Hyper-V与KVM
VirtualBox扩容vdi文件:一条命令解决问题
VirtualBox 扩容主要靠命令行,比图形界面更直接,先关闭虚拟机,然后打开终端或 CMD,进入 VirtualBox 安装目录或有 VBoxManage.exe 的路径,执行:
VBoxManage modifyhd "D:\vms\ubuntu\ubuntu.vdi" --resize 40960
后面的数字单位是 MB,40960 就是扩容到 40GB。注意路径别带引号出错,文件名区分大小写,如果虚拟机有快照,同样无法直接扩容,需要先删除快照或用 VBoxManage clonehd 克隆出一个干净磁盘再操作。
Hyper-V 扩展 VHDX 虚拟硬盘
在 Hyper-V 管理器里,先关闭虚拟机,右键选择“编辑磁盘”,选中 VHDX 文件后选择 扩展,输入新大小即可,整个过程是图形向导,没有太多容易出错的地方。
唯一要留意的是磁盘类型,如果原始 VHDX 是固定大小,扩展后新空间不会自动补足为物理占用,而是在虚拟机内部看得到更大的空间,上限取决于虚拟磁盘格式及宿主机配置,普通业务场景很少碰到天花板。
KVM虚拟机增加磁盘容量:用qemu-img命令
KVM 下常见格式是 qcow2,扩容命令很简单:
sudo qemu-img resize /var/lib/libvirt/images/ubuntu.qcow2 +40G
注意 +40G 是增加 40GB,不是扩容到 40GB,执行完再启动虚拟机,用 lsblk 查看系统盘大小,新空间才会出现,如果是给 KVM 虚拟机加一块新数据盘,可以用 virsh attach-disk 在线挂载,不过持久化配置还得手动改 XML 文件,新手更容易出错。
在虚拟机系统里扩展磁盘分区,最后一步别偷懒
虚拟磁盘扩容成功,只完成了 50%,剩下的 50% 是在操作系统里扩展分区,让文件系统真正“看到”那块新空间。
Windows 虚拟机:扩展卷
Win + X 打开磁盘管理,找到对应磁盘,如果扩容后的未分配空间就在系统分区的右侧,直接右键系统分区选 扩展卷,连续点击下一步即可,扩展卷”按钮是灰色,说明未分配空间不在系统分区相邻位置,或者磁盘分区表格式导致扩展受限。
Linux 虚拟机:growpart 与 resize2fs
以最典型的 Ubuntu/CentOS 为例:
- 查看分区布局:
lsblk,确认磁盘已经变大,但分区还停留在旧大小。 - 扩展分区边界:
sudo growpart /dev/sda 1,把第一分区扩展到整块磁盘。 - 扩展文件系统:
sudo resize2fs /dev/sda1(ext4)或sudo xfs_growfs /(XFS)。
使用 LVM 的虚拟机还要多走两步:先 sudo pvresize /dev/sda1 让物理卷识别新空间,再 sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv,最后用 resize2fs 或 xfs_growfs 扩大逻辑卷上的文件系统。
一个容易踩的坑:未分配空间没紧挨着分区
扩充分区的前提是空闲空间跟目标分区相邻,如果磁盘原本有多个分区,扩容出来的新区间被挡在中间,扩展卷或者 growpart 就会失败,这种情况下比较省事的方案是:把新空间单独做成一个分区,挂载到 /data 或 D盘 等目录,而不是强行合并进系统盘。
常见问题:扩展虚拟机磁盘容量时的三个坑
有快照的虚拟机,扩容总失败是怎么回事?
快照会把虚拟磁盘拆成父盘和增量盘,扩容工具无法直接修改这种链式结构,解决方法是先删除或合并快照,再执行扩容,如果这些快照还想保留,先导出虚拟机的完整备份,再删除快照扩容,最后恢复数据,行业共识认为,大部分扩容失败都与快照未清理有关。
磁盘扩容后虚拟机里还是显示空间不足?
大概率是分区没扩展,用 df -h 看不靠谱,先看 lsblk:如果磁盘大小已更新,但分区大小没变,说明分区和文件系统还停留在旧状态,按上面步骤执行 growpart 必须写清楚磁盘和分区的编号,如果仍提示找不到新空间,重启一次虚拟机再操作。
扩容前必须要备份吗?直接扩容会不会丢数据?
有一定风险,稳妥做法是先备份,最简单的是把虚拟磁盘文件完整复制一份;有条件的话,在虚拟机内建一个临时快照或做一次完整导出,但要记住,快照会反过来限制扩容操作,所以更推荐直接备份镜像文件,这类操作的风险点主要集中在分区扩展阶段,备份花不了几分钟,恢复却可能花上几个小时。