首页 > 其他分享 >关于VMDK快照原理、备份和恢复(包括手动恢复)教程 转载

关于VMDK快照原理、备份和恢复(包括手动恢复)教程 转载

时间:2025-01-06 12:12:48浏览次数:7  
标签:快照 恢复 虚拟机 vm vmdk 镜像 VMDK

原文地址  VMware系列:全站最完整的关于VMDK快照原理、备份和恢复(包括手动恢复)教程以及【win7-win11多系统VHD和VHDX安装简单攻略】

 

 

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



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

1. 简介

我们很多人都在使用虚拟机,最常用的虚拟机软件当然是VMWARE公司的Vmware Workstation Pro,当然VMWARE公司还有很多虚拟机软件如ESXI之类的。

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

至于VM虚拟机快照中的另一个功能,就是克隆,它可以把当前系统所在的镜像打包成一个单独的镜像,它与快照最大的区别在于,克隆生成的镜像,可以当成一个母镜像直接使用,是脱离开之前的所有快照镜像的。

2. 问题

而我们建立的所有快照镜像是一个也不能删除的,不能单独使用。

我们在重装物理机系统后,在安装好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文件损坏,虚拟机配置都打不开了,这时怎么解决问题?

3. 解决方法

当时参考了很多网站的教程,甚至是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/weixin_54626591/88609697)(github链接:https://github.com/donglxd/ReadVmdkFile/tree/main)

在这里插入图片描述

在这里插入图片描述

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"

4. 总结

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

 



标签:快照,恢复,虚拟机,vm,vmdk,镜像,VMDK
From: https://www.cnblogs.com/TImeroot/p/18655014

相关文章

  • 为什么网站修改代码后恢复了原样?
    网站修改代码后恢复原样可能是由于多种原因造成的。以下是一些常见的原因及其解决方法:缓存问题:浏览器缓存可能导致您看到的是旧的页面内容。解决方法:清除浏览器缓存。使用无痕模式或隐身模式访问网站。在浏览器中按Ctrl+F5强制刷新页面。服务器缓存:服务器端缓......
  • 读数据保护:工作负载的可恢复性27传统的数据保护方案
    1. 传统的数据保护方案1.1. 备份行业有一个比较特殊的地方在于,10年或20年前设计的一些产品至今仍然有许多人在用1.2. 在20年前,市面上的所有备份方案都是我们现在称之为传统备份产品的那种方案1.2.1. 必须自己动手把上百个UNIX系统里的数据各自备份到单独的磁带机中1.3.......
  • 一键隐藏和恢复VBA代码模块,适用于SolidWorks和Excel宏
    自从上次发表了微文《一种隐藏VBA代码模块以及恢复可见的方法》之后,有许多粉丝朋友纷纷表示这种方法很有用,可以更好地保护自己写的代码,并想要更深入探究和学习。经过小编这段时间的潜心研究,终于把这个方法写成了exe格式的可执行程序,下面来看看具体怎样对VBA代码模块进行隐藏和恢......
  • 6.6 Error recovery with a custom lexer 使用自定义词法分析器进行错误恢复
    https://lalrpop.github.io/lalrpop/lexer_tutorial/006_error_recovery_custom_lexer.htmlFeaturesdescribedinErrorrecoveryworkwellwiththecustomlexer,howevererrorrecoveryonlysupportsrecoveringfromparsererrors-notlexererrors.Thispagesh......
  • 5.8 Error recovery 错误恢复
    Bydefault,theparserwillstopassoonasitencountersanerror.Sometimesthoughwewouldliketotryandrecoverandkeepgoing.LALRPOPcansupportthis,butyouhavetohelpitbydefiningvarious"errorrecovery"pointsinyourgrammar.......
  • 读数据保护:工作负载的可恢复性26商用数据备份方案
    1. 备份简史1.1. 20世纪80年代中期大家都还没有意识到,运行着商用UNIX操作系统的大型工作环境里,应该配备一款商用的备份软件或某种自动的磁带系统1.2. 1993年备份工作全都是通过shell脚本与cronjob形式的计划任务来实现的1.2.1. 脚本总是假定服务器中需要备份的数据肯定......
  • GitLab的备份与恢复.241126
    一、备份1.docker执行备份dockerexecgitlabgitlab-rakegitlab:backup:create默认将备份文件保存至docker的/var/opt/gitlab/backups/目录这条命令是在Docker容器内部执行GitLab的备份操作。让我来解释一下这个命令的各个部分:dockerexec:这是Docker命令,用于在正在......
  • Gitlab的备份与恢复,异机转移.240109
    ​注意:异机转移的时候,gitlab的版本必须一致。一、备份GitLab数据停止GitLab服务gitlab-ctlstopunicorngitlab-ctlstopsidekiq创建GitLab备份mkdirgitlabBackgitlab-rakegitlab:backup:createBACKUP=gitlabBak230815cd/var/opt/gitlab/backups/mvgitlabBak......
  • 读数据保护:工作负载的可恢复性25公用云存储
    1. 对象存储1.1. 对象存储可能是未来比较适合长期保存备份与档案的一种技术1.2. 它的核心功能本身就已经含有保护数据所需的一些特性1.3. 对象存储系统里的所有数据都能自动复制到多个地点,这意味着它天生就符合3-2-1原则1.4. 对象存储还可以应对磁退化的问题,这是我们在......
  • 希捷移动硬盘开盘数据恢复之台州客户8T硬盘磁头突发损坏无法识别
    这是一块8T的希捷3.5寸移动硬盘,浙江台州的老客户寄过来的,描述说是在公司正常使用的时候突然有异响,然后就不识别了,自己进行换数据线、换电脑等操作简单的排除了一下,确定是硬盘的故障,然后就联系我们中心邮寄过来进行数据恢复。 收到硬盘后打开外壳,里面是一块型号为ST8000DM004的S......