VHD系统备份及问题深入探究
最近有网友提问有关VHD系统使用的后续问题,包括子VHD备份,父VHD替换等.笔者认为有必要进行统一的说明.
声明:本文所有的方法都是笔者自己想的,或许会有考虑不周,但是笔者已经尽了最大努力.如果你能想到更好的解决方案,欢迎在评论区里留言.
我们的系统初始配置如下:
C盘:25GB
D盘:35GB
D盘内:一个父VHD文件:win10.vhdx;两个子VHD文件:win10son1.vhdx,win10son2.vhdx.
C盘内:一个子VHD文件:win10son3.vhdx
BCD配置无误,BCD文件内容列表包括:
win10father
win10son1
win10son2
win10son3
问题如下:
1.在使用了一段时间的差分子VHD系统后,担心有一天子VHD报废了,里面的文件全部丢失.希望能有一些可靠的备份方法.
2.子VHD和父VHD是否可以在两个盘里?
3.我的VHD父子链断裂了,怎么办?
可能的解决方案:
1.在使用了一段时间的差分子VHD系统后,担心有一天子VHD报废了,里面的文件全部丢失.希望能有一些可靠的备份方法.
(1)首先,传统的系统备份方法可以达到这一目的.在VHD子系统里,使用Dism++进行系统备份,即可把当前的整个系统环境备份下来.
此外,如果父VHD在此前有过wim备份的话,在备份子VHD的时候,可以在wim文件的保存路径里面选择父VHD的wim包,创建增量备份.增量备份仅仅会备份两次系统备份之间的差异文件,并不进行重复文件备份.在系统还原的时候,可以使用winntsetup或Dism++在这个wim包里选择需要还原的那个系统版本.
(2)第二种方法,即父子VHD合并.我们需要在PE系统里进行操作.父子文件合并后,可以达到父VHD和与其合并的子VHD两个系统里面文件都相同的效果.在用户层面看,也就是父VHD变成了子VHD,父子融合.
操作方法:
1)打开bootice.exe
2)点击 磁盘镜像
3)点击 差分VHD
4)选择 父文件位置,第二个子文件位置不用选,最下面的 子文件位置 选择你想要合并的子文件.
5)选择合并深度.合并深度是指子VHD与父VHD的层级关系.通俗的说,如果子VHD是父亲的亲儿子,那么合并深度就是1.如果是爷爷和孙子的关系,合并深度是2.爷爷和曾孙子,合并深度是3.
合并深度并不能无限增大,合并深度越大,两个系统之间的差异越大,可能会导致合并后的系统不稳定或者无法运行.所以,bootice这个软件仅支持最大合并深度为3.
合并父子VHD文件后,父VHD在保持自身数据不变的情况下,就拥有了子VHD的所有数据.
看似这是一种备份子VHD系统的好方法.然而,这种备份方法有着一些潜在的问题.
首先,我们需要保证操作任何VHD文件的时候,VHD文件没有被挂载.也就是说,文件资源管理器里不能有这个VHD虚拟出来的磁盘.如果有,一定提前把他们弹出.否则,极有可能导致一系列问题,比如差分失败,父子链断裂,合并失败,差分链修复失败.
其次,也是很重要的一点,上面所介绍的那种方法会导致除了合并的两个父子VHD以外的所有子VHD失效.笔者认为,这也是不推荐合并父子VHD的一个重要原因.具体的情境理解,就是如果我把win10.vhdx和win10son1.vhdx合并了,会导致win10son2这个子系统与他的父VHD链断裂,导致win10son2无法启动.
这也是能够接受的,毕竟父VHD被修改了.我曾经说过,一旦创建了父VHD的差分子系统,父VHD是连开机运行都不可以的.一点点微小的父VHD变化都会导致差分链断裂.
所以,我们有没有什么方法能够避免差分链断裂问题呢?
我们分析可以发现,一个爸爸的改变会导致一群儿子无法启动.那么,如果是一群爸爸和一群儿子呢?
仍然使用我们的系统初始环境配置讨论.
一个爸爸:win10.vhdx,两个儿子:win10son1,win10son2.
现在爸爸和win10son1合并了,然后win10son2失效了.
我们能不能在win10son2失效之前做些什么呢?
答案呼之欲出.
我们在合并爸爸和win10son1之前,复制粘贴一个爸爸的副本,起名为win10a.vhdx,然后再把爸爸和win10son1合并.
然后把这个复制的爸爸名字改回去,把win10a.vhdx的名字改为win10.vhdx.
如此操作,win10son2与父VHD的差分链并没有断裂.
然而,这个方法有两个问题:
1)由于复制粘贴操作,我们产生了两个大体积父VHD.占用了两份磁盘空间.这与我们安装VHD系统的初衷背道而驰.
2)由于父VHD与子VHD必须在同一个分区里,而且他们之间的相对位置不能发生变化,所以,上面的操作势必会在同一目录下产生两个文件名相同的win10.vhdx.这显然是不行的.笔者考虑的最优方法是把合并后的那个VHD重命名,然后修改它的BCD文件来使它可启动.
对于这两个问题,笔者确实没有想到好的解决方法,只能先写在这里.希望评论区里的大佬们可以发表你们的真知灼见,帮助我们渡过难关.
(3)第三个方法是直接备份子VHD文件,把他们复制到安全的地方,或者上传至网盘.只要父VHD存在,就可以在子VHD文件损坏的时候用这个备份替换损坏的子VHD.
笔者仍然推荐使用Dism++的系统备份功能,毕竟做完一次备份后,增量备份还是很快的.
2.子VHD和父VHD是否可以在两个盘里?
不可以.
经过测试,笔者将子VHD(win10son3)和父VHD放在两个盘里,并未启动成功.在网络里并未搜索到原因.然而向chatgpt4.0提问后,chatgpt回答二者可以放在不同的分区里.询问操作时,chatgpt给出的操作与笔者的无异.
实验时,笔者向BCD菜单里添加了子VHD的启动项,然而无论如何这个启动项都不能在Windows启动管理器里显示出来.按下Esc后,弹出错误提示:引导数据配置存储中存在无效的对象.
这是BCD编辑的win10son3配置:
目前笔者并不清楚其中的机制,还望评论区的各位大佬总结科普❤ :)
3.我的VHD父子链断裂了,怎么办?
使用bootice可以修复损坏的差分链.打开bootice,点击磁盘镜像->VHD文件信息,选择失效的子VHD,然后选择父文件,即可恢复VHD父子链.
本文由博客一文多发平台 OpenWrite 发布!