硬盘对拷后蓝屏的处理(网络复制)

平台:AMD Ryzen 5 4500+A520+Win10

问题:从SATA硬盘拷贝系统到M2·NVME硬盘后蓝屏。

解决:(转载自SATA硬盘win10不重装迁移到nvme ssd的方法 - 电脑知识 - 零一的世界 (vtzw.com)) 

最近和几个小伙伴就这个问题进行了讨论,得出的结论是,该方法适用于intel七代酷睿以前,以及amd的锐龙之前的系统。也就是说,intel从七代酷睿开始,cpu控制器原生支持nvme,不再需要额外安装驱动,amd从锐龙一代开始也是原生支持nvme驱动的,而我用的是z170芯片组,属于六代酷睿,nvme需要操作系统安装驱动才能正常使用,所以会出现蓝屏问题,如果你属于七代酷睿之后或者锐龙平台的机器,可以略过本文。

  最近618买了一个intel 760p ssd,打算把丢在公司那台电脑的垃圾西数绿盘给升级一下,由于不想重装系统,所以想当然的觉得只要把原来绿盘的数据和ESP分区的内容直接拷贝到新盘就好了。然后用bootice修复引导设置以后,尝试从新ssd启动系统,结果启动的时候在风火轮转圈圈的地方卡了很久一直下不去,最后直接自动重启了,第二次重启直接蓝屏,提示由于关键系统驱动程序丢失或损坏之类的错误,错误码是一个0xc0000之类的错误码,每次启动还不一样,真的是太奇怪了。

  后来经过分析,猜测这个蓝屏问题有点类似于n年前win7时代把bios里面硬盘模式从IDE和AHCI之间切换引起的蓝屏问题,记得那时候还在本科的时候碰到这种问题估计就直接重装了。不过其实就现在的认识来说的话,其实并不需要重装,造成蓝屏的主要原因是storahci内核驱动没有在系统启动的时候加载引起的,只要修改注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\storahci\StartOverride里面有个名字是0的DWORD值,内容默认是3(DEMAND_START),改成0(BOOT_START)就可以,然后再去BIOS里把IDE切换成AHCI启动就不会蓝屏了。所以效仿这一点,我猜想应该是内核里的nvme驱动没有启动时就加载引起的。说到这里,那么先来验证一下。

  首先找一台使用nvme硬盘的电脑启动,看一下stornvme驱动的情况:

 

 

 

  默认使用nvme启动系统的机器,storenvme驱动是启动即加载的,而我这台本来是SATA的机器呢,看了一下,是DEMAND_START,意思是需要时启动。

 

 

  也就是说,使用nvme硬盘的机器,一定要在系统启动时就加载stornvme驱动才行,否则会因为驱动没加载而造成系统没法正常读写磁盘数据而蓝屏。至此,解决方案就很简单了,只要把这个项改成BOOT_START就可以了。但是实际修改过程中发现,修改了没效果,看来还是有点问题,最后查看了注册表才看出了端倪,我这台修改了没有效果的机器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stornvme项下面还有一个StartOverride,而正常使用nvme硬盘的机器没有这个键。

查阅了一些资料才发现,控制这个驱动启动类型的,是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stornvme根目录下有一个叫Start的DWORD值,这个值等于0表示 BOOT_START,即系统启动就加载,3代表按需加载( DEMAND_START ),默认已经是0(BOOT_START)。但是因为设置了StartOverride这个键值,而这个值会由系统每次启动根据驱动的使用情况自行进行优化,也就是说,win10其实每次启动,根据驱动是否被使用的情况,会自动优化驱动的选项,把不需要启动就加载的驱动设置了StartOverride值,让其延迟启动,这其实是一种自学习和优化的功能,可以优化开机速度。不过这里就给我们造成了一些麻烦了。那怎么解决这个问题呢?

下面就详细总结一下迁移的完整方法吧:

SATA AHCI模式硬盘下的win10迁移到nvme ssd步骤:

第一步:完整拷贝原硬盘ESP分区和系统盘到新的nvme硬盘(由于要使用NVME硬盘必须是UEFI模式和GPT分区,所以在拷贝之前务必要把BIOS设置成UEFI模式以及将原硬盘转化为GPT分区表),这一步比较简单,可以直接用ghost或者DiskGenious的克隆分区功能,或者分区助手专业版都可以,只要能完整拷贝分区的软件都行,新的ssd可以不分区直接使用分区助手的复制磁盘功能,也可以自己分区,只需要把ESP分区和C盘完整拷贝的新的nvme硬盘上即可。

第二步:修改ESP分区里的BCD文件,因为BCD文件记录了引导项所在磁盘,通常是用GUID唯一标识的分区。如果不修改,还会指向原来旧硬盘的分区,所以卸掉旧硬盘之后,肯定是启动不了的。这一步可以用PE里面的BOOTICE软件完成。

 注意,这里的BCD要选新硬盘的ESP分区下面的BCD文件,不要选错了,选中之后点“智能编辑模式”,然后参照我下面的图片把启动磁盘和启动分区设置对即可。

 

   然后,检查一下UEFI启动序列设置那里是否正确,一般完成前面两步先重启一下,系统会自动识别新硬盘ESP分区上的引导器,这时候进PE里用BOOTICE软件的UEFI启动序列功能里就能看到多了一个Windows Boot Manager,我们这里为了保险起见,最好像我一样再检查一遍是否正确。

 

第四步:修改注册表,删除stornvme键下面的 StartOverride目录。这一步需要一点点技巧,因为我们现在刚迁移了旧系统,没法直接启动新系统去改,所以需要用一下regedit的一个“加载配置单元”功能,详细做法如下:

首先在PE里面打开注册表编辑器,比如regworkgroup,单击一下HKEY_LOCAL_MACHINE分支将其选中,然后点【文件】->【加载配置单元】,找到 windows\system32\config\SYSTEM文件,加载后会让你输入一个加载项的名称,随便填写TEST,注册表编辑器就会把SYSTEM这个分支加载到HKEY_LOCAL_MACHINE\TEST下面,展开这个目录,能看到这个分支和PE里的 HKEY_LOCAL_MACHINE\SYSTEM的结构类似,这个就是nvme硬盘上的注册表内容了。因为还没有启动nvme硬盘上的系统,所以CurrentControlSet这个目录是没有的,这个目录原本只是一个链接,指向的是当前加载的配置ControlSetxxx目录,由于这里只有一个ControlSet001,所以我们直接展开ControlSet001\Services\stornvme即可,然后删除 StartOverride目录,最后选中TEST分支,再使用【文件】->【卸载配置单元】,卸载分支即可。

第五步:重启,选择nvme硬盘上的Windows Boot Manager引导项(或者直接卸除原硬盘启动),这样你就会发现,可以正常进系统不会蓝屏了。

posted @ 2024-08-23 20:46  mahocon  阅读(651)  评论(0)    收藏  举报