虚拟机查看存储分配与使用情况,核心结论是:必须分双层看,先在虚拟化平台看磁盘文件的配置大小与真实占用,再进虚拟机系统内部看分区挂载与文件实际使用量,两层数据对不上才说明存储规划出了问题。
很多管理员在排查虚拟机磁盘空间告警时,习惯性直接登录系统执行df -h,结果发现系统内根分区已用90%,可虚拟化平台里那个虚拟磁盘文件却远没到分配上限,这种“系统里满了,平台里没满”的现象,根源在于虚拟磁盘的分配机制与格式差异,要彻底搞清楚存储分配与使用情况,得从平台层和系统层分别入手。
VMware vSphere环境:如何查看虚拟机存储分配与使用
VMware是当前服务器虚拟化市场占有率很高的平台,查看存储分配主要依赖vSphere Client和esxcli命令,业内专家指出,vSphere的存储视图分两种维度:数据存储视角和虚拟机视角。
在vSphere Client中查虚拟磁盘配置
选中目标虚拟机,点击“编辑设置”,展开“硬盘”列表,这里能看到每个虚拟磁盘的容量(即分配大小)、置备类型(厚置备延迟置零/厚置备快速清零/精简置备)以及数据存储位置,置备类型直接决定了物理存储的消耗方式:
- 厚置备快速清零:创建时一次性分配全部空间并清空,物理存储立即被占满,性能好但浪费空间。
- 精简置备:按需增长,虚拟磁盘文件初始只有几十MB,随着写入逐渐膨胀,这种模式下“分配大小”和“实际占用”往往差距悬殊。
要查看虚拟机已用的物理存储,切到“监控”选项卡,找到“存储”指标,这里会显示已使用存储和未使用存储两个数值,已使用存储就是虚拟磁盘文件在数据存储上的真实落盘大小。
用命令行精确统计每块磁盘占用
vSphere Client界面在虚拟机数量多的时候效率很低,SSH登录ESXi宿主机,用du -sh /vmfs/volumes/datastore1/虚拟机名/可以快速看到该虚拟机所有文件(vmdk磁盘文件、vswp交换文件、vmx配置)占用的总物理空间,其中.vmdk文件的-flat.vmdk后缀部分就是实际数据大小,-delta.vmdk后缀说明存在快照,快照会额外占用大量存储。
判断存储分配是否合理的技巧:对比“虚拟机配置容量总和”与“数据存储上文件实际占用”,如果精简置备的虚拟机配置了10TB,实际占用才1.2TB,而数据存储总容量只有5TB,那么一旦所有虚拟机都写满,存储必然爆掉,这种情况必须提前规划。
Hyper-V与KVM场景:虚拟磁盘怎么看
Hyper-V和KVM的存储查看逻辑与VMware类似,但工具链完全不同。
Hyper-V的VHDX文件与占用计算
Hyper-V的虚拟磁盘格式为VHD/VHDX,支持动态扩展和固定大小两种类型,动态扩展VHDX初始只有约2MB,写多少长多大;固定大小VHDX创建时就占满目标容量。
在Hyper-V管理器中,右键虚拟机选“设置”,点“硬盘驱动器”可以查看磁盘类型和大小,更精确的占用数据要通过资源管理器直接看.vhdx文件的属性,或者在PowerShell中执行:
Get-VHD -Path C:VMTest.vhdx
输出结果会明确显示FileSize(当前物理占用)和Size(分配大小),当FileSize持续逼近Size时,说明动态磁盘即将达到上限,需要扩容或清理。
KVM/libvirt环境的存储池与qcow2镜像
KVM虚拟机常用的qcow2格式镜像支持稀疏文件特性,意味着镜像文件大小和分配大小差别可能非常大,用qemu-img info /var/lib/libvirt/images/虚拟机.qcow2查看镜像信息,重点关注disk size(实际占用物理空间)和virtual size(虚拟磁盘分配容量),如果发现disk size远小于virtual size,说明虚拟磁盘内部尚未写入大量数据。
宿主机层面可以用virsh vol-list --pool default列出存储池中的卷,配合du -sh统计各镜像实际落盘大小,KVM环境下最容易出现的存储问题是删除了虚拟机里的文件但镜像不缩小这是qcow2的固有特性,需要运行qemu-img convert手动压缩回收空间。
虚拟机磁盘空间满了怎么办?先分清“虚拟磁盘膨胀”与“系统分区增长”
这是运维人员日常处理最多的问题,虚拟机磁盘空间满了,很多情况下不是虚拟磁盘真的占满了宿主机的存储,而是系统内的分区满了。虚拟磁盘膨胀指VMDK/VHDX/qcow2文件在宿主机上的落盘大小不断增加,
系统分区增长指虚拟机内看到的或C:盘使用率攀升。
Linux虚拟机:df与du的配合使用
登录Linux虚拟机,先执行df -h查看分区挂载点、总容量、已用、可用空间,这个命令显示的是文件系统视角,反映的是格式化后的容量,接着用du -sh /逐级排查哪个目录占用了大量空间,优先检查/var/log(日志文件)、/tmp(临时文件)、/home(用户数据)。
一个容易被忽略的操作是:如果虚拟机磁盘有LVM逻辑卷管理,df -h显示的分区容量可能只占用了虚拟磁盘的一部分,用lsblk查看块设备的层级关系,确认sda磁盘大小、分区大小、PV/VG/LV的逻辑大小三者是否匹配,很多场景下,LV没有扩展到PV的全部空间,导致虚拟机内看到的分区容量小于实际虚拟磁盘容量。
Windows虚拟机:磁盘管理与资源监视器
Windows虚拟机右键“此电脑”选“管理”,进入“磁盘管理”可以查看各分区容量与文件系统使用率,要排查文件占用细节,使用Settings > System > Storage界面更直观,或者用资源监视器的“磁盘”选项卡查看各文件的读写占用。
Windows Server虚拟机中,C盘空间被Windows更新缓存(C:WindowsSoftwareDistributionDownload)和休眠文件(hiberfil.sys)大量占用是常见现象,清理这两个目录往往能回收明显空间。
虚拟机存储分配与实际占用的常见数据差异
数据存储上显示的虚拟机文件大小,与虚拟机内看到的已用空间,经常出现不一致,理解这些差异背后的机制,比盲目扩容更重要。
| 对比维度 | 平台层数据(数据存储/物理文件) | 系统层数据(df/fdisk) |
|---|---|---|
| 计算对象 | 虚拟磁盘文件整体(含元数据、快照、空白块) | 分区内的实际文件数据 |
| 删除文件表现 | 不回收空间(精简置备文件不会缩小) | 立即释放文件系统空间 |
| 跨平台差异 | VMDK的descriptor文件记录配置,VHDX有日志开销 | Linux的ext4会预分配,Windows的NTFS有MFT占用 |
| 快照影响 | 快照增量文件持续增长,使平台层占用远超分配容量 | 系统内看不到任何快照相关变化 |
快照是存储占用的隐形杀手,虚拟机做快照后,所有新写入的数据都追加到delta文件中,即使系统内删除了大量文件,delta文件也只会越来越大,不会收缩,当快照运行时间过长,delta文件可能膨胀到原虚拟磁盘的几倍大小,直接写满数据存储,定期清理整合快照,是存储管理的基本功。
据统计,相当一部分虚拟化环境的存储空间浪费,来自未及时清理的快照和过度分配的精简置备磁盘,行业共识认为,虚拟机的存储分配策略应该在部署前就明确,而不是等告警了再临时调整。
常见疑问快速解答
为什么虚拟机内删除了大量文件,数据存储的剩余空间却没有增加?
这是虚拟磁盘的固有机制,精简置备的VMDK或动态扩展的VHDX在写入时增长,但删除操作只会标记文件系统内的数据块为可重用,不会向宿主机返还已占用的物理空间,要真正回收空间,需要在虚拟机内执行清零操作(Windows用sdelete -z,Linux用fstrim或dd if=/dev/zero填充后删除),再在平台层面执行收缩操作(VMware的vmkfstools -K或存储迁移)。
虚拟机的存储分配怎么看才算合理规划?
建议按三层逻辑审查:物理宿主机存储总量、所有虚拟机配置容量总和(Overcommit比例)、虚拟机实际落盘占用,比例控制在2:1到3:1之间比较安全,同时要监控数据存储的剩余空间,一旦数据存储可用空间低于总容量的10%,立即排查是否有快照未清理或虚拟磁盘异常膨胀。
动态扩展磁盘与固定大小磁盘,哪个更适合承载数据库虚拟机?
固定大小磁盘更稳,数据库的随机写入频繁,固定大小磁盘避免了动态扩展时反复分配空间的性能开销,同时降低了磁盘碎片化程度,动态扩展磁盘适合开发测试环境、桌面虚拟化等写入密度低的场景,能有效节约物理存储。
存储管理的本质是持续观察和及时响应,定期查看平台层的磁盘文件变化趋势,对比系统层的分区使用率,两个数据结合分析,才能准确判断虚拟机的存储健康状况,当发现分配与使用存在明显断层时,优先检查快照和置备类型,通常能比盲目扩容解决更多问题。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/631905.html





