自己的 HomeLab 在做虚拟机迁移,是直接通过 SCP 将虚拟机文件直接 Copy 到新服务器的。迁移之后,在新机器上启动虚拟机,提示无法打开虚拟机磁盘。马上 SSH 到服务器,查看虚拟机磁盘文件,只剩下了 -flat.vmdk 文件,回到 WebUI 上看文件是 File 格式的,并非虚拟机磁盘文件。确认 -flat.vmdk 文件所依赖的 vmdk 丢失。

故障描述

解决虚拟机磁盘文件 vmdk 丢失,只剩下 -flat.vmdk 文件的情况。通过 -flat.vmdk 恢复 vmdk 文件。

处理过程

提示
以下操作有一定的危险性,建议做好备份后再进行操作。不要直接对生产环境执行操作。

1.使用 SSH 登录到 ESXI 服务器。查找到 -flat.vmdk 文件所在位置。如图 SeafileServer-data1-flat.vmdk 即为目标-flat.vmdk 文件。
-flat.vmdk文件位置

2.创建一个新的 vmdk 文件,大小和 -flat.vmdk 文件保持一致。命令为 vmkfstools -c 磁盘文件大小 -a lsilogic 磁盘名称 根据上图的-flat.vmdk 文件大小,这里我应该执行如下的命令。

1
vmkfstools -c 3298534883328 -a lsilogic SeafileServer_data.vmdk

如下图创建完毕,重新查看虚拟机磁盘文件可以看到新建的 vmdk 和 -flat.vmdk 文件了。
创建完毕

3.偷梁换柱。将原来有数据的 -flat.vmdk 替换新建虚拟机磁盘文件的 -flat.vmdk 文件。(注意一定要使用 mv,且替换的应该是 -flat.vmdk 文件。)

1
mv SeafileServer-data1-flat.vmdk SeafileServer_data-flat.vmdk

4.将虚拟机磁盘文件挂载回原虚拟机,重新开机即可。
虚拟机已恢复