在思考是否能够使用快照来恢复受损的VMDK文件之前,我们首先需要了解VMDK文件和快照在vSphere环境当中的工作原理。
快照工作原理
当创建VMware快照时,实际上我们并没有复制原始磁盘当中的任何数据。而是将原始磁盘设置为只读状态,并且创建一个回滚日志——有时也称之为增量磁盘,这种增量磁盘其实就是在快照创建之后,针对任何虚拟机写入操作所产生的占位符。
图1.增量文件当中包含的仅仅是快照创建之后的虚拟机变化部分
图一展示了快照的工作流程。假设磁盘当中包含了一个单词“SNAPSHOT”,并且每个字母都位于自己的磁盘块当中。当我们创建磁盘快照的时候,原始磁盘变为只读状态,一个新的增量VMDK文件被创建。这时第二个块变为“L”,并且“S”被加入到第九个块当中,这样就产生了新的单词“SLAPSHOTS”。
为了保证所有文件都是安全的,我们需要进行一系列操作。我们可以删除快照,这样将会简单地将新的块合并到原始的VMDK文件当中,并且将“SLAPSHOTS”提交给虚拟机——或者我们可以回滚到另外一个时间点,比如磁盘刚刚读入“SNAPSHOT”的时候。每次创建快照的时候,都会创建一个新的增量磁盘,保证我们能够回滚到快照链当中的任何时间点。
能否修复VMDK文件?
如果原始VMDK文件遭到破坏或者被删除,那么管理员就会面临很多棘手问题。正如图二所示,包含“SNAPSHOT”的原始磁盘已经消失。现在我们手中只剩下了包含字母“L”和“S”的增量磁盘,而指向磁盘的元数据(metadta)已经消失。
图2.如果只使用损坏或者丢失VMDK文件的快照,那么无法重建原始文件。
也许你已经得出了结论:如果包含“SNAPSHOT”的原始磁盘或者原始块丢失,那么使用增量磁盘当中的部分数据无法重建任何东西。
缺失文件种类决定能否进行恢复
仅仅使用快照文件来恢复丢失的VMDK文件是不可能的,但是根据丢失VMDK文件的不同,我们可能拥有几种解决方案。一个虚拟机磁盘由两个不同的文件组成:VMDK文件——虚拟磁盘的最重要组成部分——保存了所有数据,以及描述符文件——VMX文件——为虚拟机配置文件提供相关磁盘信息。
如果VMDK文件丢失,那么只能寄希望于保存了备份文件,而如果描述符文件丢失,那么可以使用ESXi命令行进行恢复。可以参考VMware knowledge base当中的文章1002511进行恢复。