Hyper-v手动合并AVHD快照文件至VHD
今天公司有台 Hyper-V 主机无预警的挂了,就这个刚好公司开发用的数据库正好安装在那壹台,为了让大家能够继续工作,必须尽速将 VM 移至另一台 Hyper-V 服务器,但是 VM 的设定都没有汇出,所以无法完整的汇入另一台 Hyper-V,因为原本的 VM 建立了许多快照(Snapshots),所以光是将 VHD 档复制过去是没用的,这跟 Hyper-V 的 Snapshots 的运作机制有关。
首先,我尝试了好几个小时把 VHD 档复制到另一台 Hyper-V 服务器,并手动新增虚拟机上去,这才发现所有数据库是三个月前的版本,这怎么能接受,所以花了好些时间研究到底要如何才能复原虚拟机制到最新版,有时后人太铁齿就会浪费许多宝贵的时间,我也不例外,尝试了好久之后才愿意认真去学 Hyper-V 的 Snapshots 运作机制,这才发现一个非常宝贵的知识:Hyper-V 的 Snapshots 的运作完全跟差异磁盘的运作机制一模一样!
假设我们的虚拟机有一颗虚拟硬盘(VHD),当你建立了第一个快照后,这个快照就会自动变成一颗差异磁盘,并且扩展名为 *.avhd,事实上 *.avhd 就是 VHD 格式的硬盘。而且原本的 *.vhd 硬盘就会变成这颗 *.avhd 快照磁盘的父磁盘(parent disk)。
了解差异磁盘原理的人就知道,当你产生差异磁盘并使用过后,父磁盘是不能被变更的,只要一变动父磁盘的内容,所有继承于这颗父磁盘的差异磁盘将完全失效!
目前为止,我并不知道如何完整复原 Snapshots 的状态回 Hyper-V,但是我学会了如何手动将虚拟机的虚拟硬盘回复到最新的一份快照 (或任何一份快照的版本),以下是我的还原计划与策略:
环境说明
壹台虚拟机(需重建)
壹个原始的虚拟硬盘 (*.vhd)
已有两个快照集 (Snapshots)
还原目标
复原虚拟硬盘至最近、最新的版本
还原策略 (1):透过合并磁盘功能将多个磁盘合并成壹个唯一磁盘 (较耗时的方法)
1. 先选取最新的快照磁盘文件 (*.avhd),并透过
编辑磁盘
工具进行合并磁盘动作,合并至父磁盘
修改原本 *.avhd 的扩展名为 *.vhd
从 Hyper-V 管理员点选 [编辑磁盘] / [Edit Disk] 动作
选取刚刚更名的快照磁盘
选择 [Merge] 选项
合并变更至父磁盘
2. 再选取刚刚被合并的父磁盘 (*.avhd),并透过编辑磁盘工具进行合并磁盘动作再合并至它的父磁盘,此时这个快照磁盘的父磁盘就是当初建立虚拟机原本的虚拟磁盘
3. 重新建立新的虚拟机,并指派最后被合并的那个虚拟磁盘,大功告成!
https://bbs.51cto.com/thread-1494182-1.html