您现在的位置是: 网站首页 >系统软件 系统软件
Win10系统从sata转移到nvme无法启动问题处理
admin2020年1月18日 18:48 【Windows 】 10310人已围观
# 系统硬件信息及场景 ``` Operating System: Windows 10 专业版 64-bit (10.0, Build 18363) (18362.19h1_release.190318-1202) Language: Chinese (Simplified) (Regional Setting: Chinese (Simplified)) System Manufacturer: System manufacturer System Model: System Product Name BIOS: 0809 (type: UEFI) Processor: Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz (4 CPUs), ~3.4GHz ``` 完成`m.2 sata`固态上的系统转移到`m.2 nvme`固态。 # 系统从sata迁移到nvme步骤 需要支持nvme固态的PE,推荐使用 `WePE2.0` ## 系统转移 ![BLOG_20200118_185117_75](/media/blog/images/2020/01/BLOG_20200118_185117_75.png "博客图集BLOG_20200118_185117_75.png") 使用CGI工具进行硬盘对拷,选择源硬盘和目标硬盘,点击执行即可,这时会启用Ghost工具进行硬盘文件转移。 ## 挂载EFI分区修复 使用UEFI引导修复工具,加载EFI分区 ![BLOG_20200118_185111_22](/media/blog/images/2020/01/BLOG_20200118_185111_22.png "博客图集BLOG_20200118_185111_22.png") 点击**挂载**,然后点击**开始修复** ![BLOG_20200118_185105_27](/media/blog/images/2020/01/BLOG_20200118_185105_27.png "博客图集BLOG_20200118_185105_27.png") 这时候会在电脑中显示出该分区,里面的内容如下 ![BLOG_20200118_185059_46](/media/blog/images/2020/01/BLOG_20200118_185059_46.png "博客图集BLOG_20200118_185059_46.png") ## 确认引导修复 打开扇区小工具BOOTICE ![BLOG_20200118_185053_86](/media/blog/images/2020/01/BLOG_20200118_185053_86.png "博客图集BLOG_20200118_185053_86.png") 切换到BCD编辑,选择其他BCD文件:即找到目前硬盘ESP分区下的`EFI\Microsoft\Boot\BCD` ![BLOG_20200118_185048_46](/media/blog/images/2020/01/BLOG_20200118_185048_46.png "博客图集BLOG_20200118_185048_46.png") 点击BCD,然后点击**智能编辑模式**,可以看到如下显示,如果修改有问题,可以通过这儿修改 ![BLOG_20200118_185040_64](/media/blog/images/2020/01/BLOG_20200118_185040_64.png "博客图集BLOG_20200118_185040_64.png") 切换到UEFI ![BLOG_20200118_185032_89](/media/blog/images/2020/01/BLOG_20200118_185032_89.png "博客图集BLOG_20200118_185032_89.png") 查看UEFI启动序列信息 ![BLOG_20200118_185025_32](/media/blog/images/2020/01/BLOG_20200118_185025_32.png "博客图集BLOG_20200118_185025_32.png") 一般情况下,完成以上步骤,关机,拔掉源硬盘,再开机,目标硬盘上的系统应该就可以正常启动了。 但是在Win10转圈页面转很久,且过一会就蓝屏,还会提示一些错误。 # 解决迁移到nvme无法启动问题 ## 原因分析 使用不同类型的硬盘的系统,stornvme驱动请况 ```bat >sc qc stornvme [SC] QueryServiceConfig 成功 SERVICE_NAME: stornvme TYPE : 1 KERNEL_DRIVER START_TYPE : 0 BOOT_START ERROR_CONTROL : 3 CRITICAL BINARY_PATH_NAME : \SystemRoot\System32\drivers\stornvme.sys LOAD_ORDER_GROUP : SCSI Miniport TAG : 32 DISPLAY_NAME : Microsoft Standard NVM Express Driver DEPENDENCIES : SERVICE_START_NAME : ``` 使用nvme硬盘启动的电脑,在`START_TYPE`的值为`BOOT_START`,即storenvme驱动是启动即加载的,而sata硬盘的系统,值为`DEMAND_START`,即需要时启动。 ```bat >sc qc stornvme [SC] QueryServiceConfig 成功 SERVICE_NAME: stornvme TYPE : 1 KERNEL_DRIVER START_TYPE : 3 DEMAND_START ERROR_CONTROL : 3 CRITICAL BINARY_PATH_NAME : \SystemRoot\System32\drivers\stornvme.sys LOAD_ORDER_GROUP : SCSI Miniport TAG : 32 DISPLAY_NAME : Microsoft Standard NVM Express Driver DEPENDENCIES : SERVICE_START_NAME : ``` 也就是说,使用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`值,让其延迟启动,这其实是一种自学习和优化的功能,可以优化开机速度。不过这里对迁移系统造成麻烦。那怎么解决这个问题呢? - 方法一:先删除 stornvme键值下面的`StartOverride`目录,然后重新启动进PE系统去备份整个系统盘,然后再从nvme硬盘启动,当然这样就对操作顺序有一定要求了,就是修改过该键值以后,就不能再次进入原硬盘系统,否则又会被系统改回去。 - 方法二:先不改,先迁移磁盘,然后在PE里面修改迁移后硬盘上的注册表。 ## PE下修改nvme系统下的注册表 删除stornvme键下面的 `StartOverride`目录。这一步需要一点点技巧,因为现在刚迁移了旧系统,没法直接启动新系统去改,所以需要用一下regedit的一个“加载配置单元”功能,详细做法如下: 1. 在PE里面打开运行,输入`regedit`,这一步会打开PE里系统的注册表编辑器,当然这里并不是要改PE里的注册表,而是只是使用`regedit`的编辑功能,用来编辑的是nvme硬盘上系统盘的注册表。 ![BLOG_20200118_185010_68](/media/blog/images/2020/01/BLOG_20200118_185010_68.png "博客图集BLOG_20200118_185010_68.png") 2. 注册表的位置一般是在`C:\windows\system32\config`目录下(这里的C是nvme里刚迁移过来的系统盘在PE中显示的盘符),单击一下`HKEY_LOCAL_MACHINE`分支将其选中,然后点 文件 -> 加载配置单元。 3. 找到 `C:\windows\system32\config\system`文件,加载后会让你输入一个加载项的名称,这里随便写就行,不要和现有的名称相同。 ![BLOG_20200118_185002_30](/media/blog/images/2020/01/BLOG_20200118_185002_30.png "博客图集BLOG_20200118_185002_30.png") ![BLOG_20200118_184956_48](/media/blog/images/2020/01/BLOG_20200118_184956_48.png "博客图集BLOG_20200118_184956_48.png") 4. 注册表编辑器就会把SYSTEM这个分支加载到`HKEY_LOCAL_MACHINE\sys`下面,这时候展开这个目录,能看到这个分支和PE里的 `HKEY_LOCAL_MACHINE\SYSTEM`的结构类似,这个就是nvme硬盘上的注册表内容了 5. 这里有一点区别,那就是由于并没有启动nvme硬盘上的系统,所以`CurrentControlSet`这个目录是没有的,其实这个目录原本只是一个链接而已,指向的是当前加载的配置`ControlSetxxx`目录。这里只有一个`ControlSet001`,所以直接展开`ControlSet001\Services\stornvme`即可,然后删除 `StartOverride`目录 ![BLOG_20200118_184947_21](/media/blog/images/2020/01/BLOG_20200118_184947_21.png "博客图集BLOG_20200118_184947_21.png") ![BLOG_20200118_184941_71](/media/blog/images/2020/01/BLOG_20200118_184941_71.png "博客图集BLOG_20200118_184941_71.png") 6. 最后选中sys分支,再使用 文件 -> 卸载配置单元 ,卸载分支即可。 ![BLOG_20200118_184935_58](/media/blog/images/2020/01/BLOG_20200118_184935_58.png "博客图集BLOG_20200118_184935_58.png") ## 重启检查 以上步骤操作完了,关机,拔掉PE的U盘,这时候已经没有源硬盘,只有一个nvme的目标硬盘,直接开机,一般情况下就可以直接进入系统不会蓝屏了。 > 参考 https://www.jarviswang.me/?p=1078 解决问题并记录
很赞哦! (60)