误删除虚拟机vmdk文件后如何处理?

近日在进行vSphere 5虚拟化平台的日常维护过程中,误删除了某台正在运行中的虚拟机的磁盘描述符文件(扩展名为.vmdk)及配置文件(.vmx)。庆幸的是虚拟机处于运行状态,磁盘数据文件(-flat.vmdk)幸免于难。由于磁盘描述符文件及配置文件被删除,在尝试对虚拟机执行克隆操作时出现错误提示,执行重启操作后虚拟机无法启动。

虚拟机文件间的关系

虚拟机的所有文件都保存在一个目录下,主要包括配置文件、交换文件、BIOS文件、日志文件、磁盘描述符文件、与磁盘数据文件。在虚拟机配置文件的磁盘参数中会指定磁盘描述符文件的名称,而磁盘描述符文件与磁盘数据文件相关联,真正的数据都存储在磁盘数据文件中。如果虚拟机包含了两块磁盘,则虚拟机配置文件指定磁盘描述符文件的配置如下所示:scsi0:0.present = "true"

scsi0:0.fileName = "data.vmdk"

scsi0:0.deviceType = "scsi-hardDisk"

sched.scsi0:0.shares = "normal"

sched.scsi0:0.throughputCap = "off"

scsi0:1.present = "true"

scsi0:1.fileName = "data_1.vmdk"

scsi0:1.deviceType = "scsi-hardDisk"

sched.scsi0:1.shares = "normal"

sched.scsi0:1.throughputCap = "off"

重建磁盘描述符文件

由于磁盘描述符文件及配置文件被删除,为使虚拟机能够正常启动,需要重建配置文件、磁盘描述符文件。我们先介绍如何创建磁盘描述符文件。vSphere 5中提供了vmkfstools命

令行工具可用于创建vmdk文件,命令如下:

vmkfstools -c -a [buslogic|lsilogic|ide] -d [zeroedthick|eagerzeroedthick|thin] xxx.vmdk

其中:

-c:指定磁盘块大小

-a:指定磁盘类型

-d:指定磁盘格式

通过SSH远程登录到虚拟机所在的ESXi主机,进入虚拟机所在数据存储目录,执行“ls -l”命令查看磁盘数据文件的大小为53687091200。

图1. 查看磁盘数据文件大小

确定磁盘格式采用精简配置后,然后执行如下命令创建vmdk文件:

vmkfstools -c 53687091200 -a lsilogic -d thin temp.vmdk。

将temp.vmdk文件重命名为suse_11_x86.vmdk文件并修改其对应的-flat.vmdk文件:mv temp.vmdk suse_11_x86.vmdk #重命名

vi suse_11_x86.vmdk #编辑vmdk文件

# Extent description

RW 104857600 VMFS "suse_11_x86-flat.vmdk"。

按照类似的方式创建第二块磁盘数据文件的磁盘描述符文件suse_11_x86_2.vmdk,至此虚拟机的磁盘描述符文件就创建完成了。

加载虚拟机磁盘

我们可以手动修改虚拟机的配置文件,也可以通过新建虚拟机并添加磁盘,将虚拟磁盘添加到新虚拟机中,vSphere会对虚拟机的配置文件进行相应的修改,不再需要手动修改。为避免手动修改配置文件可能会出现的错误,我们先利用虚拟机模板创建一个虚拟机,然后删除该虚拟机所有的磁盘,然后将我们刚刚创建的磁盘文件suse_11_x86.vmdk、suse_11_x86_2.vmdk添加到新创建的虚拟机中。如下图2所示在添加虚拟机磁盘时需要选择“使用现有虚拟磁盘”选项。

图2. 添加现有虚拟磁盘

选择磁盘路径文件时点击右侧的“浏览”按钮,选定suse_11_x86.vmdk磁盘文件,最后点击确定即可。按照相同的方式添加第二块磁盘后,与虚拟机相关的磁盘就都添加完成了。修改虚拟机网卡地址

由于是新创建的虚拟机,其网卡的MAC地址与原有虚拟机网卡的MAC地址不同,而该虚拟机之上相关软件的注册信息与网卡的MAC地址相关,故需要手动修改虚拟机网卡的MAC 地址。

如下图3所示,在虚拟机属性对话框中将网卡的MAC地址设置为手动,然后输入后24位地址。

图3. 修改虚拟机网卡MAC地址

至此,我们完成了虚拟机磁盘描述符文件的创建、加载,并修改了虚拟机的MAC地址。再次启动虚拟机,虚拟机启动正常,系统能够正常使用。

由于虚拟机标签可以任意修改,所以在vSphere控制台下删除数据存储下的文件时一定要确保相关文件已经无效而且与虚拟机不存在关联关系,否则发生数据误删除后造成的影响难以预计。

相关主题
相关文档
最新文档