全站最完整的关于VMDK快照原理、备份和恢复(包括手动恢复)教程

        我们很多人都在使用虚拟机,最常用的虚拟机软件当然是VMWARE公司的Vmware Workstation Pro,当然VMWARE公司还有很多虚拟机软件如ESXI之类的,今天我们就来讲讲VMDK虚拟磁盘镜像文件,我们在使用Vmware Workstation Pro创建新的虚拟机时,都会创建一个VMDK的磁盘镜像文件,我们可以把它称作母镜像文件,当我们需要保存一个系统状态,以便快速恢复到这个系统状态时,我们可以建立一个快照文件,它是从之前的母镜像文件中分割出的新的子镜像文件,而之前的母镜像可以理解为已只读化了,从建立快照后,系统所有的更改都会写入到子镜像文件。同理,我们再次建立的孙镜像后,这个子镜像也锁定住,不再写入更改,直到我们重新恢复到子镜像快照时为止。

        至于VM虚拟机快照中的另一个功能,就是克隆,它可以把当前系统所在的镜像打包成一个单独的镜像,它与快照最大的区别在于,克隆生成的镜像,可以当成一个母镜像直接使用,是脱离开之前的所有快照镜像的。而我们建立的所有快照镜像是一个也不能删除的,不能单独使用。我们在重装物理机系统后,在安装好VM软件后,有时可能VMX配置文件坏了,或者因为硬盘的盘符和重装系统前不一样了,可能会碰到读取不了VMDK镜像文件的问题,其实就是系统找不到之前的VMDK路径了,因为每个VMDK文件头都有一些对每个镜像的描述信息,如它自己的磁盘ID,它的父磁盘对象ID,它的路径信息,我们可以把VMDK快照想象成一个链表,每次创建快照都会建立下一个子链表,而有时我们会删除不需要的VMDK快照,这些都会写入相关的VMDK文件头,甚至因为删除,导致VMDK名称后缀的0001,0002之类的序列也会打乱,比如有vm.vmdk(母镜像-起始点),vm-0001.vmdk(快照1),vm-0002.vmdk(快照2),vm-0003.vmdk(快照3),vm-0004.vmdk(当前点),当删除了快照2后,也就是把vm-0002.vmdk删除了,也就剩下了vm.vmdk(母镜像-起始点),vm-0001.vmdk(快照1),vm-0003.vmdk(快照3),vm-0004.vmdk(当前点),如果这时把当前点转到快照1,其实当前点并不会变成vm-0001.vmdk(快照1),而是可能会变成vm-0002.vmdk(当前点),再新建一个新的快照反而会移动到序号的空白处,也就是vm.vmdk(母镜像-起始点),vm-0001.vmdk(快照1),vm-0002.vmdk(当前点),vm-0003.vmdk(快照3),vm-0004.vmdk(最后建立的快照),以上我只是打个比方,实际快照建立多了会更复杂,而且时间长了只能通过系统的快照对话框或vmware-vmx.exe读取vmx来读取快照的关系,甚至更严重情况是vmx文件损坏时,所建立的快照关系都不能看到了,有人这种机会很少,但是我自己就经历过这种事,因为硬盘出问题导致正好vmx文件损坏,虚拟机配置都打不开了,这时怎么解决问题?

        当时参考了很多网站的教程,甚至是VM官网的论坛和教程,关键点有几个,在这告诉大家下:

1.建立快照一定要在关机模式下,而不是开着虚拟机建立快照,这点很关键,挂起快照只是把系统的更改放到vmem或者vmss这样的文件中去,并不是保存到vmdk中,所以要建立快照一定要关机,你会发现关机后建立快照是一瞬间就完成了,因为关机后vmdk才能得到保存(虚拟机文件目录,在虚拟机开机时会出现win7.lck、win7-0001.lck这样的结尾文件夹,我估计就是虚拟机开机在读取写入vmdk分卷信息的临时文件夹,这些文件夹,在下面的恢复工具手动恢复也会出现,除了ghost这个工具),建立快照的操作只是分出一个新的空白卷而已。

2.如果你现在有很多快照,但是都是没有关机时建立的,那么还有解决方法,就是先转到这些快照,然后开启虚拟机,然后再老老实实的关机,然后在快照下的当前点直接建立一个新快照,然后把老的没关机的快照删除,保留新快照即可。

3.如果你做对了上面两步,那么把当前虚拟机目录里的所有vmdk文件都复制出到一个新文件夹,因为我们要恢复数据,所以所有的操作都不能影响到原数据,这是恢复计算机数据的基本常识。

4.在恢复vmdk之前,我们需要搞懂他们之前的对应关系,我没有找到现成的读取vmdk分卷之间关系的工具,就自己做了个轮子(csdn链接:https://download.csdn.net/download/donglxd/87887769)(github链接:https://github.com/donglxd/ReadVmdkFile/tree/main)

全站最完整的关于VMDK快照原理、备份和恢复(包括手动恢复)教程_第1张图片

全站最完整的关于VMDK快照原理、备份和恢复(包括手动恢复)教程_第2张图片  

5.因为要恢复数据,最简单的就是使用一些打包工具把这些vmdk分卷都压到一起,也就是之前提到的克隆,首先要确定需要恢复到那个VMDK分卷快照节点,这可以用上面我编写的程序,然后可以使用下面3种方法:

a.  vmware-vdiskmanager.exe工具:为vm自带的处理分卷的工具,功能相当强大,甚至可以通过读取vmx文件来读取vmdk分卷间的关系,可以参看它的命令行帮助,在Vmware Workstation Pro的安装目录里能找到,直接在cmd命令提示符中输入命令使用,可以使用如下代码克隆分卷:

#进入VM软件的安装路径
cd E:\Program Files\VMware Workstation
#克隆需要的快照分卷(win7_00001.vmdk)为新的母镜像(win7_out_new.vmdk)
vmware-vdiskmanager.exe -r "D:/Vdisk/win7_00001.vmdk" -t 0 "D:/win7_out_new.vmdk"

b.  著名的备份软件ghost也可以克隆分卷:

#先把C:\VMDK\WIN7-0001.vmdk的VMDK分卷转换成GHO的ghost文件.
ghost32 -clone,mode=create,src="C:\VMDK\WIN7-0001.vmdk",dst="C:\myimage.gho" -batch -sure
#把克隆好的ghost文件(myimage.gho)转换成WIN7_out.vmdk(母镜像)
ghost32 -clone,mode=restore,src="C:\myimage.gho",dst="C:\VMDK\WIN7_out.vmdk" -batch –sure

c. Linux上有qemu-utils,命令如下:

#安装qemu-utils
sudo apt-get update
sudo apt-get install qemu-utils

#克隆VMDK分卷(/home/kali/Downloads/Windows 7.vmdk为需要克隆的快照VMDK文件,/home/kali/Downloads/out_old.vmdk为输出母镜像)
qemu-img convert -f vmdk -O vmdk "/home/kali/Downloads/Windows 7.vmdk" "/home/kali/Downloads/out_old.vmdk"


关于虚拟机文件的压缩技巧,当你只有一个母镜像时,你点击虚拟机设置中的清理虚拟磁盘,可以很方便的清理完成,但是如果你有很多vmdk快照那,就不好用了,你会发现,不管你怎么清理,甚至转到之前的快照再清理都不行,原来快照里占用的大量空间并不能删除掉,这是因为之前说的打了新快照,之前的所有数据都会封存在上一个当前点快照里,这个问题暂时我也没什么好办法,除了用上面的方法克隆你想要的快照。一个重要点,请大家在关机快照前,先清理当前的虚拟磁盘,然后再打快照。

        

 

 

你可能感兴趣的:(电脑问题解决,java,开发语言)