虚拟机储存不够用时,绝大多数情况下不用重装系统,也不用把虚拟磁盘文件整个导出来重做,直接在线扩容分区、压缩虚拟磁盘或用存储迁移工具,都能做到无损扩容。
下面这 3 个技巧分别解决不同场景下的“空间焦虑”,从最简单的命令到企业级的热迁移,按需选用即可。
在线扩容不关机:虚拟机磁盘扩容无损数据吗?
无损扩容的前提是“系统能看到新的空间”,而虚拟化平台负责把新分配的空间“塞”给虚拟机,这个操作在 VMware ESXi、Proxmox VE、KVM 和 Hyper-V 上都有成熟实现,数据安全性和普通磁盘分区扩容一致。
给 Linux 虚拟机“原地长个”
以 Linux + LVM 的环境为例,先在虚拟化平台上把虚拟磁盘大小从 100GB 调到 200GB,然后进入虚拟机内,整个过程的命令顺序很固定,照抄即可。
- 查看当前分区大小,确认磁盘设备名。
lsblk - 用
growpart把分区扩展到整块磁盘末尾。
growpart /dev/sda 3
注意,/dev/sda是磁盘名,3是分区序号,以实际环境为准。 - 让内核重新读取分区表,无需重启。
partprobe /dev/sda - 扩展物理卷。
pvresize /dev/sda3 - 把剩余空间全部加到逻辑卷(比如根目录所在卷)。
lvextend -l +100%FREE /dev/mapper/centos-root - 最后在线调整文件系统。
- ext4 用
resize2fs /dev/mapper/centos-root - xfs 用
xfs_growfs /
- ext4 用
这些命令在多数 Linux 发行版上都能直接执行,不需要额外安装付费工具,请放心操作。
如果分区没有使用 LVM,而是直接挂载分区,
/dev/sda2挂在/home,第 5、6 步改成这样:resize2fs /dev/sda2
整个过程不卸载数据、不重启虚拟机,业务照常运行。
扩容前必须做的 3 项检查
- 快照清理:扩容前删除旧快照,否则新空间可能落在快照层外,导致数据不一致。
- 磁盘类型:精简置备磁盘扩容后仍是精简模式,厚置备磁盘扩容后占用的真实存储空间也会变大,注意宿主机存储余量。
- 文件系统支持:老旧的 ext3 最大支持 16TB,ext4 和 xfs 单文件系统上限远超虚拟机磁盘常见规格,基本不用操心。
虚拟机扩容C盘空间不够怎么办?Windows版的解法
Windows 虚拟机的 C 盘空间告急,系统会频繁提示“磁盘空间不足”,此时不需要在服务器市场买新盘,也不需要重新做镜像,只需几步就能把未分配空间并入 C 盘。
先在虚拟化平台改磁盘大小
在 VMware vCenter 或 VMware Workstation 的虚拟机设置里,把硬盘大小从 80GB 改到 120GB,点“确定”,这一步虚拟化平台会直接处理,改大不涉及数据搬移,放心操作。
在 Windows 磁盘管理里合并分区
右键“此电脑”,进入“管理”>“磁盘管理”,看到 C 盘后面多了一块 40GB 的未分配空间,但 C 盘和未分配区域之间有 EFI 系统分区或恢复分区时,系统自带的“扩展卷”选项可能是灰色,这是新手最容易卡住的地方,别急着用第三方工具。
以下办法可以绕过这个限制:
- 关闭虚拟机的“页面文件”和“休眠文件”,这两个文件占在 C 盘末尾,会挡住扩展分区的路径。
- 删除 C 盘和未分配空间之间的恢复分区(用 diskpart 的
remove命令,或者磁盘管理的“删除卷”功能)。 - 再尝试右键 C 盘,点击“扩展卷”。
如果恢复分区和 EFI 分区绑得太死,用第三方分区工具会更省心,这里提醒一点:Windows 下的分区工具必须选择与虚拟化平台兼容的版本,否则分区表格式异常会导致虚拟机无法启动。
比较常见的免费方案有:
- DiskGenius 免费版:支持移动分区位置和合并未分配空间,操作可视化,适合新手。
- 傲梅分区助手:能直接把未分配空间并入 C 盘,也支持调整系统保留分区大小。
处理完成后重启一次虚拟机,C 盘空间就正常了,数据不会损坏,但强烈建议先做快照再操作,万一断电或误操作还能回滚。
真正的高性价比扩容法:先压缩,再扩容
这个技巧大多数人没意识到:很多虚拟机空间不够用,根本不是磁盘上限到了,而是虚拟磁盘文件里塞满了垃圾数据,有一个常见场景很有代表性:一台 Windows 文件服务器,删除大量文档后,虚拟磁盘文件的体积并没有变小,宿主机存储空间仍然被占得满满的。
虚拟磁盘瘦身的原理
虚拟磁盘(特别是精简置备的 vmdk 和 qcow2 格式)创建时只占用很小空间,随着数据写入逐渐增长,但删除文件时,客户机没有主动告诉虚拟化平台“这些块没用了”,所以底层文件依然占据真实存储空间。
解决办法是两步走:
- 在虚拟机内执行清理和整理,让空白区域变成零。
- Linux 用
fstrim -av或挂载参数discard。 - Windows 用
Optimize-Volume -DriveLetter C -ReTrim -Verbose(PowerShell 管理员运行)。
- Linux 用
- 在宿主机上压实虚拟磁盘。
VMware 环境:
- 若虚拟机已整合快照,执行
vmkfstools -K xxx.vmdk收缩精简盘。 - 若是厚置备,用
vmkfstools -d thin转为精简盘,再执行-K。
KVM/QEMU 环境:
- 先带
qcow2格式执行qemu-img check -r all disk.img。 - 再用
qemu-img convert -O qcow2 -c disk.img compact.img生成压缩副本,替换原文件。
完成之后,宿主机存储空间瞬间多出很大余量,然后再去考虑升级容量,你会发现很多时候根本不需要扩容。
一个表格看清“瘦身”的收益
| 场景 | 扩容前处理方式 | 实际效果 |
|---|---|---|
| 日志服务器,已删 70% 旧日志 | 直接加 200GB 虚拟磁盘 | 真实占用的存储只增加几十 GB |
| 文件共享虚拟机,员工频繁增删文件 | 先瘦身再决定 | 宿主机腾出较大空间的可用容量,减少存储采购 |
| 测试环境虚拟机,系统频繁重装 | 快照+克隆模板 | 不必每台都做大容量虚拟盘 |
从这个表格能看到,先瘦身再扩容的顺序比直接扩容更经济,尤其在存储成本较高的企业级环境里,省下来的空间直接对应预算。
终极无损方案:热迁移,连磁盘扩容的功夫都省了
部分虚拟化环境里,宿主机的物理存储确实不够了,比如本地盘只剩 50GB,怎么瘦身都救不了,此时再给虚拟机加虚拟磁盘也只是把问题往后拖延,最理智的做法是把虚拟机存储迁移到更大的共享存储池。
VMware Storage vMotion 操作步骤
- 在 vCenter 中右键目标虚拟机,选择“迁移”。
- 选择“仅更改存储”。
- 目标位置选一个新的数据存储,比如新的 iSCSI LUN 或 NFS 共享。
- 勾选“Formatted as thin”或保持原有格式。
- 点击“计划”,等待迁移完成。
整个过程虚拟机不断电,业务无感知,vCenter 会负责把虚拟磁盘文件从一个数据存储搬到另一个数据存储,常用场景是“虚拟机硬盘扩容 vmdk 还是 vhdx 选哪个更好”这类困惑出现之前,就用迁移换个大池子,从根上解决空间瓶颈。
KVM 环境没有 Storage vMotion 的图形界面,但可以用 virsh blockcopy 在线搬移磁盘镜像:
virsh blockcopy --domain myvm vda /mnt/newpool/myvm.qcow2 --wait --pivot
这相当于做了一次“磁盘文件级”的换血,全程不需要关闭虚拟机。
三种扩容方案如何选
| 需求场景 | 推荐方案 | 耗时 |
|---|---|---|
| Linux 虚拟机,数据分区逻辑卷上 | growpart + lvextend 在线扩容 | 10 分钟 |
| Windows 虚拟机,C 盘满但虚拟磁盘文件较大 | 分区工具合并 + 精简瘦身 | 20 分钟 |
| 宿主机存储整体不足,需要换存储设备 | Storage vMotion / blockcopy | 视数据量而定 |
“虚拟机扩容工具免费吗”上面提到的 fstrim、growpart、qemu-img 全是开源免费工具;遇到极端情况,再考虑 DataDeploy 和 NMKV 这类企业版付费工具,免费方案覆盖多数场景。
虚拟机储存扩容Q&A:你关心的三个细节
问:扩容后虚拟机无法开机,是不是数据没了?
多半是分区表没同步,Linux 下手动执行 partprobe 哪个分区忘了同步,Windows 下可能动了 EFI 引导分区,应对方式是进入恢复模式,用 lsblk -f 确认文件系统识别状态,必要时从 grub 修复引导,数据通常没有丢。
问:growpart 和 fdisk 删分区重建有什么区别?
growpart 是专门为无损调整设计的,直接修改分区表末尾位置,不动分区起始扇区;fdisk 删分区重建会把分区起始位置改到不对的地方,导致文件系统损坏,行业共识是,能不用 fdisk 调整在线分区就不用手动删建分区。
问:精简置备磁盘一直膨胀,删除文件也不收缩,怎么回事?
客户机的 TRIM 指令没有传到虚拟磁盘层,开启磁盘“丢弃”支持后,执行一次再瘦身操作,虚拟磁盘文件就能恢复“弹性”,真实占用空间与虚拟机内实际数据大小基本一致。
无论走哪条路,核心结论很明确:扩容不必重装系统,重点在于搞清楚“缺空间的是虚拟机内的文件系统,还是宿主机上的存储池”,前者原地扩分区,后者做瘦身和迁移,这些方法均免费且无损,按自己的虚拟化平台对照操作即可。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/626149.html




