虚拟机镜像文件通常存储在宿主机或共享存储的特定目录中,例如VMware的“datastore”、KVM的“/var/lib/libvirt/images/”以及Hyper-V的“Virtual Hard Disks”文件夹,清理和管理主要靠定期删除快照、压缩镜像和归档冷数据。
虚拟机镜像存储目录在哪里
很多朋友第一次接触虚拟机时,最困惑的问题就是镜像文件到底存到了哪里,这个问题没有统一答案,因为不同的虚拟化平台有各自的默认存放规则,搞清楚这一点,后续管理磁盘空间才有下手的地方。
不同虚拟化平台的默认镜像目录
以大家最常接触的几个平台为例,镜像目录的差异非常明显,VMware Workstation在Windows系统上,默认把虚拟机放在“文档\Virtual Machines”目录下,装完系统后你会看到.vmx配置文件和.vmdk虚拟磁盘文件,而VMware ESXi则完全不同,它把镜像放在“/vmfs/volumes/datastore1/”这个路径中,datastore1是安装ESXi时默认创建的存储空间,你可以通过vSphere客户端查看具体占用情况。
KVM和libvirt的组合是Linux环境下最常见的虚拟化方案,默认镜像目录位于“/var/lib/libvirt/images/”,如果你用Proxmox VE这类基于KVM的国产或开源管理平台,存储路径通常是“/var/lib/vz/images/”,按虚拟机ID分开存放,每个虚拟机一个子目录。
Hyper-V作为Windows Server的招牌功能,默认把虚拟硬盘放在“C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Hard Disks”目录中,Windows 10/11自带的Hyper-V也沿用这个路径。
如何确认当前系统的镜像存放位置
多数情况下,你不必跑到文件管理器里翻找,通过命令行或管理面板就能确认,在KVM宿主机上执行virsh vol-list --pool default命令,系统会列出所有磁盘卷及其完整路径,ESXi用户登录管理界面后,在“存储”选项卡里能看到所有注册的虚拟机镜像位置,Hyper-V则在“虚拟机设置”的“硬盘”选项里直接显示VHDX文件路径。
如果你需要修改默认目录,操作也不复杂,KVM可以通过编辑“/etc/libvirt/storage/default.xml”文件,将“path”字段指向新分区,Hyper-V则在“Hyper-V设置”中修改“虚拟硬盘”默认存储位置,修改后记得重启相关服务或重新扫描存储池。
虚拟机镜像文件怎么清理
镜像文件越用越大,这是所有人都绕不开的坑,清理镜像并不是简单删除文件,而是要区分哪些空间该回收,哪些数据要保留,这里分享一套从查看到清理的完整思路。
空间占用大的四大来源
- 快照文件:这是最容易被忽略的存储杀手,创建快照后,后续所有写入都会累计到快照增量文件中,快照越久,文件越大,甚至可能超过基础磁盘容量。相当一部分虚拟机空间膨胀问题源于未及时合并快照。
- 系统垃圾与日志:虚拟机内部的临时文件、系统日志、软件缓存同样占用镜像空间,很多管理员只关注宿主机存储,忽略了虚拟机内部的垃圾堆积。
- 未使用或孤立的镜像文件:删除虚拟机时,如果勾选了“从磁盘删除”选项,文件会被清理,但手动删除虚拟机时,很容易留下仍占用空间的孤立镜像。
- 预分配磁盘的浪费:创建虚拟机时选了“厚置备延迟置零”或“厚置备快速置零”,磁盘会一次性分配全部空间,即使虚拟机实际只用了一小部分,文件依然占满整个分配容量。
清理镜像的实操步骤
第一步,删除多余的快照,在VMware中右键虚拟机选择“快照管理器”,删除不再需要的快照,删除后增量数据会合并到基础磁盘中,这个过程可能耗时较长,期间不建议关闭虚拟机电源。
第二步,整理虚拟机内部数据,进入虚拟机操作系统,运行磁盘清理工具删除临时文件,清理浏览器缓存,清空回收站,Windows虚拟机用系统自带的“磁盘清理”,Linux虚拟机用apt autoremove或yum autoremove清理无用软件包。
第三步,压缩和收缩镜像本身,VMware Workstation下执行vmware-vdiskmanager -k "虚拟机磁盘路径.vmdk"命令收缩磁盘,KVM的qcow2格式镜像可以用qemu-img convert -O qcow2 源镜像 新镜像命令重新转换,转换过程中会自动释放未使用的空间,记得先关闭虚拟机再操作,转换完成后用新镜像替换旧文件。
第四步,清理宿主机的备份和ISO文件,打开你的存储目录,检查是否存在几个月前的备份文件、已安装完系统的ISO安装光盘镜像,这些文件完全可以删除或移到其他非虚拟化存储中。
恢复已删除虚拟机的磁盘空间
很多朋友遇到的问题是:我在管理面板里删除了虚拟机,但宿主机磁盘空间没有任何变化,原因多半是删除不彻底,如果确认虚拟机已彻底废弃,可以直接手工删除对应镜像文件。
- VMware Workstation删除虚拟机的对话框里,一定要勾选“同时删除磁盘文件”。
- KVM用
virsh undefine --remove-all-storage 虚拟机名称命令,这条命令会同时删除配置和磁盘文件。 - Proxmox VE删除虚拟机时,勾选“清除”选项中的“磁盘”才会真正释放空间。
Hyper-V用户注意:删除虚拟机后,VHDX文件默认保留在目录中,需要手动进入“Virtual Hard Disks”文件夹删除残留文件。
管理目录结构最省心的几招
存储空间清理只是事后补救,日常维护靠合理的规划,这里说的目录管理,目的是让镜像文件有章可循,尽量少走弯路。
按业务场景分配独立存储池
行业共识认为,镜像目录不应和操作系统放在同一个分区,把存储分成系统盘、镜像盘、备份盘三个独立区域是最稳妥的做法,KVM下可以创建多个存储池,data”单独挂载大容量分区,专门存放高频使用的业务虚拟机;“archive”池放低频访问的旧系统,这样既方便备份,也避免系统盘被撑爆。
如果使用的是ESXi,建议把不同性能要求的虚拟机分配到不同级别的datastore,核心数据库虚拟机放SSF存储,普通办公虚拟机放机械硬盘存储,互不干扰,具体做法是在“存储”中添加数据存储,创建虚拟机时选择对应的存储位置。
给镜像文件建立命名规范
命名规范直接影响排查效率,创建新虚拟机时,按照“业务名称-环境-系统类型-日期”的格式命名,erp-prod-centos7-20260612”代表生产环境的ERP系统,规划好命名之后,存储目录一看就懂,清理和维护时也能快速识别该虚拟机是否还具备价值。
冷数据迁移释放热存储空间
存放超过半年未启动的虚拟机,建议迁移到独立低性能存储,这类冷虚拟机虽然不运行,但镜像文件占用的空间实打实存在,Proxmox VE支持在线迁移虚拟机到其他存储节点,ESXi同样支持存储vMotion,迁移过程中虚拟机不停机,选在业务低峰期操作基本无感知。
每月固定抽查一次存储占用情况,这套做法足以让镜像目录在一年内保持清晰条理。
Q&A:虚拟机镜像目录常见问题
问:我把镜像文件从C盘直接复制到D盘,虚拟机还能正常启动吗?
答:对于VMware Workstation,直接复制文件夹到新位置后,用“打开虚拟机”功能选择新路径下的.vmx文件即可运行,但Hyper-V和ESXi下,镜像文件关联了虚拟机配置和快照链,不建议直接用文件管理器拷贝,用平台自带的“导出”和“导入”功能迁移才稳妥。
问:离线快照和在线快照在合并时有什么区别?
答:在线快照合并发生在虚拟机运行期间,数据一致性由虚拟化平台保证,风险较低,离线快照合并时虚拟机处于关机状态,合并完成后旧快照文件自动删除,但整个过程需要等待磁盘操作完成。
问:为什么虚拟机内部删除了大文件,镜像占用的空间几乎没减少?
答:删除操作仅释放虚拟磁盘内部的逻辑空间,文件本身仍保留在镜像中。要真正缩小镜像文件尺寸,需要执行收缩操作,VMware使用vmware-vdiskmanager -k,qcow2格式使用qemu-img convert重新压缩。
问:如何防止镜像目录被写满?
答:先规划容量再创建虚拟机,单台虚拟机分配的空间不宜超过存储池总容量的三分之一,日常运维中打开存储告警阈值通知功能,在空间使用率达到85%时提前介入处理,比等到写满后再清理要轻松得多。从根源上讲,给每台虚拟机设置合理的磁盘上限,并且配合定时清理脚本和巡检计划,才是最终的解决方案。