将 Windows 系统从机械硬盘迁移到固态硬盘基本上属于月经帖,其实用什么工具都无所谓,但有时候遇到问题不知道从哪里下手解决,主要原因就是没有搞清楚迁移原理。
系统迁移原理
迁移系统这个操作看着复杂,其实搞清楚了原理,操作非常简单。Windows 7 及以上系统的迁移原理:就是两个步骤,一是系统分区的迁移(随便一个克隆软件都可以搞定),二是引导修复及 BCD 启动配置文件的修复。
1. 系统分区的迁移。
随便一个克隆软件都可以搞定:Drive Snapshot、 GHOST、ATI、DiskGenius、分区助手、再生龙、dism++、imagex 等等,凡是能给系统分区做克隆或者复制操作的都可以,需要注意的就是系统分区含有大量的硬链接,所以不能用直接复制的方法(如果有支持硬链接复制功能的软件,直接复制也可以)。如果源盘和目标盘能够同时访问到,那么直接用分区复制功能(ghost、Diskgenius、分区助手都可以);如果不能同时访问,就用上述软件给系统分区做一个克隆,通过移动硬盘中转一下。建议这些操作都在 PE 下进行。在将系统分区恢复到目标硬盘后,注意删除目标分区 SYSTEM 注册表:*\HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices * 下的 “\DosDevices\C:” 这一项。 注意:如果你的目标硬盘使用了当前系统不支持的硬盘控制器,例如从 SATA 接口的硬盘(一般使用 AHCI)迁移到 M.2 nvme,那么你需要先在原来的系统里安装好新硬盘控制器的驱动,这个驱动一般可以从主板厂商或者硬盘厂商处获取,安装或者用 dism++ 添加到当前系统中。如果你的系统已经复制到了目标分区,也可以使用 Dism++ 添加驱动。
2. 引导及 BCD 修复。
无论硬盘是 MBR 或者 GPT 格式,用 Windows 的 bcdboot 命令行都可以修复,好多 PE 下也都提供了引导修复功能。无论哪种硬盘格式,都建议你在 PE 下事先规划好硬盘的分区,对于 mbr 就是规划系统分区和数据分区,而对于 GPT,则要事先建好 ESP (FAT32)、MSR(可选)、系统分区、数据分区。mbr 有引导扇区,GPT 则只有引导分区(也就是 ESP 分区,没有引导扇区这个概念)。由于 Windows 的系统分区是绑定硬盘 GUID 的,所以换硬盘或者换分区都需要更新 BCD 文件(BCDBOOT 都可以自动处理)。BCDBOOT 会自动复制 Windows 系统引导文件到启动分区,这些文件默认来源于目标系统: \windows\boot 这个目录,这个目录下的 PCAT 目录对应 BIOS+MBR 启动方式,EFI 目录则对应 UEFI+GPT 启动方式。
系统迁移详细步骤
了解了上述原理,那么正常情况下迁移系统,例如,将原来运行在机械硬盘上的系统和数据迁移到新换的固态硬盘上,假设源硬盘和目标硬盘不能同时访问,那么你需要准备一个移动硬盘作为中转。操作步骤如下:
1. 备份原来硬盘上的各分区。
备份原来硬盘上的系统分区(注意下原硬盘上各分区的大小及各分区上已经占用的空间大小,尤其是系统分区的大小),如果是 GPT 硬盘,建议也备份一下 ESP 分区。这个我推荐用 Drive Snapshot,在当前系统下就可以操作,直接备份到移动硬盘上即可。如果你原来的硬盘还有数据分区,同时备份到移动硬盘(可以用直接复制的办法,没必要用克隆软件)。这里需要注意一点:如果你原来的系统是在机械硬盘上,而新硬盘是 nvme 的 ssd(或者使用了不同的硬盘控制器),你在备份系统之前,需要先在原系统里安装好相应硬盘控制器的驱动(nvme 的驱动),驱动安装成功的标志就是你在老系统下能够看到新硬盘,否则迁移后的系统启动时有可能会遇到 0x7B 蓝屏错误,如果迁移后你才发现这个问题,就需要在 PE 下使用 Dism++ 注入新的硬盘控制器的驱动。
2. 给新硬盘分区。
接上新硬盘,进入 PE,给新硬盘分区(如果是 GPT 格式,要注意先建立 ESP 和 MSR 分区),新硬盘的系统分区不要小于原硬盘的系统分区。分区软件推荐 Aomei 分区助手、或者 DiskGenius,固态硬盘注意 4K 对齐。
3. 将备份恢复到新硬盘。
将备份到移动硬盘上的系统分区和数据恢复到新硬盘的对应分区上,如果是 GPT,建议同时恢复一下备份的 ESP 分区。假设新的系统分区盘符是 F:,ESP 分区盘符是 Z:,那么在 PE 的 cmd 命令行下用 (这是 UEFI+GPT 格式硬盘):
bcdboot F:\windows /s Z: /f UEFI
如果是普通 mbr 硬盘,则是:
bcdboot F:\windows /s F:
这样就同时修复了硬盘的引导及 BCD 启动配置文件。
然后注意将目标系统 system 注册表(F:\Windows\System32\config\SYSTEM)删除一下 \HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices 下的 \DosDevices\C:。
用这个命令加载目标系统注册表:
reg load hklm\sys f:\windows\system32\config\system
然后在注册表编辑器中修改 hklm\sys 对应的注册表项即可。
编辑完成后,关闭注册表编辑器,然后:
reg unload hklm\sys
4. 重启测试是否正常。
重启时选择从新硬盘启动,测试迁移后的系统是否运行正常。一般来说,不会遇到什么问题。大功告成!
后记
如果你熟悉使用 grub4dos、grub4dos_UEFI、grub2、XorBOOT 这一类的第三方启动管理软件,配合 NTBOOT 这一类的启动插件,上述很多操作都可以简化,不用过多考虑引导修复,当然,我觉得这都属于高手级别的操作了,这级别的高手不需要参考上面这种小白文档。