最近在处理了几例Windows迁移上云的问题,问题还是比较有典型性的。分享一下具体的处理方法以及原理。
第一类问题是磁盘引起的,我们的云迁移工具支持迁移系统盘和数据盘。当我们机器上有至少两块磁盘的时候,在迁移之后,有时我们会发现系统在云上有很多奇怪的现象。如果此时我们做一些排查工作,典型现象如下:
机器有时是能够启动的,但是登录之后发现很多程序不能使用。
IE浏览器是打不开的,点击之后没有反应。
所有和MMC相关的程序都打不开,比如事件查看器,服务管理器和计算机管理等等。
打开某些业务程序时会报告文件找不到。
运行sfcscan会报如下错误:
原因其实很简单,Windows在辨认磁盘时是有自己的顺序,但是在某些情况下可能会出现迁移之后的磁盘卷顺序和迁移之前不同。这种情况可能会导致系统盘没有被辨识为C盘,比如辨识为D盘。这本身并不会导致启动问题,原因是因为Windows系统本身是从环境变量里来寻找启动时所需要的驱动的。比如如下注册表:
我们可以发现Windows是用路径%SystemRoot%来找到相应的DLL或者SYS的。而当系统盘符变为D:盘之后SystemRoot也会相应地调整为D:Windows,因此大部分系统文件都是可以被找到的。
然而有些安装在其他目录组件就不是这样了,比如如下注册表:
IE相关的文件是安装在C:Program Files下面,而很多在注册表里的路径是直接指向C:Program Files,并没有环境变量。从而导致这些程序启动失败。
解决方法非常简单,简单地来说,我们需要将系统盘符改回C:盘。但是如果我们直接修改是无法做到这一点的,因为Windows系统会阻止这一行为。因此我们可以直接修改如下注册表:
只要将键值名字的C:和D:对换即可解决该问题。注意重启依然是必须的。