虚拟机省事,也容易省心过头。有人清磁盘时看到一堆几十 G 的文件,以为是垃圾直接删了,回头发现整台虚拟电脑没了。
一台虚拟机在宿主机上就是几个文件。配置文件管硬件设置,虚拟磁盘文件存整个系统,日志和快照各占一部分。
VMware 的磁盘文件扩展名是 vmdk,拆分存储时是一堆 s001、s002 结尾的小文件,单个存储时就一个大文件。

一台虚拟机就是几个文件
Hyper-V 用 vhdx,通常是一个文件。VirtualBox 用 vdi。删了磁盘文件,等于把整台电脑扔了,剩下的配置只能算一张说明书。
拆分的磁盘文件每个几 G,删掉之后被覆盖的范围有限,扫出来的成功率相对高一些,至少能捞回一份不完整的系统盘。
单个文件几十 G 到几百 G,删了之后空间成片空出来,宿主机往上一写就是成片覆盖,恢复出完整虚拟磁盘的机会很低。

拆分和单个,两种命
还有一种情况是快照。有快照时磁盘文件里存的是增量,基础盘是另一个文件。只删增量,基础盘还在,能退回到做快照那一刻。
| 情况 | 还能不能救 | 怎么办 |
|---|---|---|
| 只删了配置文件 | 能 | 重建配置指向磁盘 |
| 删了拆分的部分文件 | 有机会 | 整目录做镜像 |
| 删了单个大文件 | 机会小 | 立刻停写做镜像 |
| 有快照,删了增量 | 能 | 退回到快照 |
| 虚拟机里删了文件 | 能 | 在虚拟机里扫 |
判断标准是这台虚拟机的磁盘拆成了几个文件,拆得越碎,救回来的机会越大。
第一行最轻松,磁盘文件还在,重建一个配置指向它就完事,几分钟的事。
第三行要抢时间。宿主机上的下载、系统更新、软件安装,全在往那块空间里写,停得越晚越没戏。
关掉虚拟机
别挂起-挂起状态下磁盘文件还在被写
整个虚拟机目录做镜像-配置和磁盘一起
别只拷磁盘
在镜像上挂载-把vmdk当普通硬盘读
从虚拟磁盘里取文件-用能读文件系统的工具
第二条容易漏。只拷磁盘文件,恢复出来之后配置对不上,还得重新建一台机器再把盘挂上去,多花一倍时间。

四步,先停再镜像
虚拟磁盘本身带分区表,挂载之后就是一块完整硬盘的样子,能直接浏览里面的文件。能挂载就别急着整盘恢复。
这种情况反而好办。虚拟磁盘是一个文件,里面的删除只影响虚拟文件系统,在宿主机上根本看不出来。
在虚拟机里装恢复软件,扫虚拟硬盘,跟在一台真电脑上操作完全一样,快照也能帮上忙。

虚拟机里删,好办得多
注意别往虚拟磁盘里写东西。虚拟磁盘文件会跟着写入慢慢变大,占掉本来能恢复的空间。先给虚拟机做个快照再动手,出问题能退回来。
删了vmdk之后又新建了一台虚拟机
新建本身不怎么写数据,但如果装了系统、下了东西,覆盖就发生了。机会取决于新写了多少,写得越多越难。
快照文件和磁盘文件哪个更要紧
两个都要。快照是增量,基础盘是底座,缺一个都拼不完整。看到vmdk和vmsn这一堆,整个目录一起保住。
先确认虚拟磁盘是单个文件还是拆成多个,再关掉虚拟机做整目录镜像。单个大文件被删,恢复机会明显更低。