更多内容请点击 我的博客 查看,欢迎来访。
系统硬件信息及场景
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
系统转移
使用CGI工具进行硬盘对拷,选择源硬盘和目标硬盘,点击执行即可,这时会启用Ghost工具进行硬盘文件转移。
挂载EFI分区修复
使用UEFI引导修复工具,加载EFI分区
点击挂载,然后点击开始修复
这时候会在电脑中显示出该分区,里面的内容如下
确认引导修复
打开扇区小工具BOOTICE
切换到BCD编辑,选择其他BCD文件:即找到目前硬盘ESP分区下的EFI\Microsoft\Boot\BCD
点击BCD,然后点击智能编辑模式,可以看到如下显示,如果修改有问题,可以通过这儿修改
切换到UEFI
查看UEFI启动序列信息
一般情况下,完成以上步骤,关机,拔掉源硬盘,再开机,目标硬盘上的系统应该就可以正常启动了。
但是在Win10转圈页面转很久,且过一会就蓝屏,还会提示一些错误。
解决迁移到nvme无法启动问题
原因分析
使用不同类型的硬盘的系统,stornvme驱动请况
>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
,即需要时启动。
>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的一个“加载配置单元”功能,详细做法如下:
- 在PE里面打开运行,输入
regedit
,这一步会打开PE里系统的注册表编辑器,当然这里并不是要改PE里的注册表,而是只是使用regedit
的编辑功能,用来编辑的是nvme硬盘上系统盘的注册表。
注册表的位置一般是在
C:\windows\system32\config
目录下(这里的C是nvme里刚迁移过来的系统盘在PE中显示的盘符),单击一下HKEY_LOCAL_MACHINE
分支将其选中,然后点 文件 -> 加载配置单元。找到
C:\windows\system32\config\system
文件,加载后会让你输入一个加载项的名称,这里随便写就行,不要和现有的名称相同。
注册表编辑器就会把SYSTEM这个分支加载到
HKEY_LOCAL_MACHINE\sys
下面,这时候展开这个目录,能看到这个分支和PE里的HKEY_LOCAL_MACHINE\SYSTEM
的结构类似,这个就是nvme硬盘上的注册表内容了这里有一点区别,那就是由于并没有启动nvme硬盘上的系统,所以
CurrentControlSet
这个目录是没有的,其实这个目录原本只是一个链接而已,指向的是当前加载的配置ControlSetxxx
目录。这里只有一个ControlSet001
,所以直接展开ControlSet001\Services\stornvme
即可,然后删除StartOverride
目录
- 最后选中sys分支,再使用 文件 -> 卸载配置单元 ,卸载分支即可。
重启检查
以上步骤操作完了,关机,拔掉PE的U盘,这时候已经没有源硬盘,只有一个nvme的目标硬盘,直接开机,一般情况下就可以直接进入系统不会蓝屏了。
参考 https://www.jarviswang.me/?p=1078 解决问题并记录