Windows 10 + OS X 硬盘升级无损迁移记实

注:本篇是对我自己做系统迁移的整理并不是一篇教程,仅供参考

注2:仅可应用于 EFI 安装的 Windows,也就是说 Windows 7 以下绝对不是

注3:数据无价 谨慎操作 —— Disk Genius

前情提要

出于一些原因我的 mid 2014 11″ MacBook Air 用的是 128G 的硬盘,这显然不够我装 Windows + macOS 双系统并且各种 IDE 和 runtime 全部装上的. 光是 Visual Studio 和 XCode 就要占掉 30G – 40G 的空间,而 Windows 又是个吃硬盘的怪兽,随着补丁的增加留给 macOS 的空间越来越小,最终变成了 70G Windows + 40G macOS 的划分. 就这么凑合用了两年,最终省吃俭用抠下来的空间都不够 Windows 装个补丁以及 XCode 跑过升级了. 想想这台电脑除去硬盘用个五年没问题,就这么换新未免有些 overkill.

因此就有了硬盘升级的需求. 淘宝上现在有很多原厂的 mac 硬盘可以更换(甚至主板都能换,也就是连带 CPU 和内存),有些店家甚至提供了店内帮你更换的服务并回收完好的老硬盘帮你节省一点成本,免去了自行操作的风险和麻烦. 所以剩下的工作就只有系统迁移了.

基本思路

分区示意

硬盘里有几个不能动也不用动的分区,比如引导用的 EFI 分区、Windows 需要的 MSR 预留分区、macOS 的恢复分区,装了 Linux 的话还可能会有 grub 和 swap 分区. 这些分区只需要原样复制过去就行. 剩下的就是装着系统的分区了,硬盘升级后最主要的用途就是扩大系统分区的容量,所以它们都需要扩容. 每个操作系统和文件系统的扩展工具都不同.

扩容

所以 Macbook 做硬盘升级 + 系统迁移的基本思路就是:先在移动硬盘里做老硬盘的全盘备份,然后升级硬盘,再把不用动的分区原样复制(按扇区复制)到相应的位置,预留下需要扩容的分区空间,再把需要扩容的分区复制到相应的位置并扩容.

所需工具

  • 换硬盘需要的工具,包括一块新的硬盘(废话)
  • 一块能用来 EFI 引导的移动硬盘(mac 下分区的或者格式化成 GPT 的)
  • Windows PE,对应 Windows 8 以上版本的,这样可以 EFI 启动
  • Disk Genius,正常情况下不需要 Pro 版,但是捐助作者是个好习惯!(就是有点贵)很多 Widnows PE 的 iso 内置了这个软件

全盘备份

首先需要把老硬盘全盘备份到移动硬盘中. 这不仅仅是为了备份数据,也是因为 Macbook 不可能新老硬盘一起插着导数据一定需要一个中间设备.

因为需要无损迁移,而涉及到的文件系统又相当多,因而所有的分区复制都是按扇区复制,而不是按文件结构复制. 稍微打个比方的话前者是复印别人写的文章,而后者是自己再抄一遍,如果文章本身用了六国语言编写,总不见得找个懂六国语言的人(软件)来抄写吧. 但按扇区复制有个极其严苛的要求,就是被复制的来源分区和复制到的目标分区必须大小(扇区数)完全相等.

首先要先进入 Windows PE. 在某一个操作系统下备份这个操作系统本身这个行为是不明智的,所以需要进入一个临时的操作系统.

在做全盘备份之前需要新建一个虚拟硬盘. 直接备份进移动硬盘也不是不可以,但会造成很多麻烦,毕竟这块移动硬盘还有 Windows PE,还要存储自己的其他数据.

方法是在 Disk Genius 的「硬盘 -> 新建虚拟硬盘文件」中可以找到. 我认为最好的方式是建立 img 格式的虚拟硬盘文件并存储到移动硬盘的 NTFS 文件系统的分区中,因为这两者都能在 Windows 和 macOS 下被很好地读取(不需要写入). 建立好一个至少和老 SSD 一样大小的虚拟硬盘后在 Disk Genius 中打开它.

然后选中老的 SSD,进入「工具 -> 克隆硬盘」,把老硬盘全盘复制到虚拟硬盘中.

克隆硬盘

硬盘升级

略.

测试新硬盘和虚拟硬盘中的备份(可选)

新硬盘上手之后当然要先测试一下. 测试的内容当然是把老硬盘的数据原样复制回来. 原样复制回来后,应该可以正常进入每个系统,但分区的大小没有任何变化,新硬盘的后半部分会完全空白.

方法是很简单:进入 Windows PE 的 Disk Genius,用同样的方法将虚拟硬盘整盘克隆到新硬盘中.

重启测试每一个系统,包括 macOS 自带的恢复系统.

无需扩容的分区迁移

首先要规划好最终分区的位置和大小. 比较省力的方法应该是把所有无需扩容的分区都放在最前面,这样就省去了计算起始扇区数的麻烦.

接下来对于每个需要迁移的分区,都在新硬盘上划分一个一模一样的空白分区. 一模一样指的是卷标一样,文件系统一样. 对于 EFI 和 MSR 分区,GUID 也要相同(卷标不清楚). 我这个情况的话不需要扩容的分区是:EFI、MSR 和 Recovery HD. 如果做过前面一步,在新硬盘中已经有老硬盘的数据的话,可以省掉 EFI 和 MSR 分区的迁移,因为他们已经迁移好了,也不需要移动位置,但需要把除此之外全部的分区删除.

具体操作的方法是:首先记录下需要复制分区的总扇区数和文件系统,然后点击新硬盘未分配的空间(灰色部分),进入「分区 -> 建立新分区」,选择相同的文件系统,然后进入「详细参数」,填入总扇区数,改卷标名. 这样就有了一个新的空白的分区,接下来需要做的就是把数据复制回来. 选择需要复制的分区,然后进入「工具 -> 扇区复制」,将数据从虚拟硬盘里的分区复制到新硬盘的对应分区中.

新建分区

扇区复制

需要扩容的分区迁移

需要扩容的分区一般来说就是系统分区了. 我这个情况的话就是 Windows 和 macOS. 这个跟文件系统有很大的关系. Windows 的 NTFS 和 macOS 的 HFS+ 都能在各自对应的系统下进行无损扩容,只要分区后部有空闲的硬盘空间.

由于 Windows PE 也是 Windows,因此 Windows 分区可以在 Windows PE 下扩容. 用一样的办法将原来的 Windows 分区克隆回来,然后选中新硬盘里的那个分区,进入「分区 -> 调整分区大小」,在图形界面里可以把分区拖拽到自己想要的大小,注意还要留下一部分空间给 macOS.

调整NTFS

这一步有可能会失败,我遇到的原因是分区有逻辑错误. 这在断过电死过机强制关过机的电脑中很常见. 解决方法是先进入 Windows,然后在管理员权限的命令行下运行以下命令来修复:

chksdk /f /r C:

macOS 的迁移也是类似的思路. 首先还是在 Windows PE 的 Disk Genius 中把老系统原样复制进新硬盘,然后进入刚才已经迁移完毕的 macOS 恢复系统,打开磁盘工具,将 macOS 系统盘的空间拖拽到想要的大小. 这一步依然有可能失败而且我不知道原因. 好在 macOS 提供了另一个系统迁移的工具:Time Machine. 在 macOS 恢复系统下面选择 Time Machine,然后删除刚才复制过来的老系统,新建一个新的 HFS+ 分区,大小是你想要最终 macOS 分区的大小,然后在磁盘管理工具里打开虚拟硬盘,用 Time Machine 将备份的老系统写进新硬盘.

打开虚拟硬盘文件

调整分区大小

一些往事

某个 Black Friday 我成功忽悠 ZJJ 买固态硬盘了之后帮他做过一次系统迁移. 那次比较简单,是台式机的硬盘更换所以可以两块硬盘同时插着做迁移,这就方便了很多. 然而还是出了一些小事故:我在他的系统里用 Disk Genius 做了扇区到扇区的 C 盘复制,然后成功重启进入复制后在 SSD 里的系统. 然而,虽然系统是从 SSD 启动的,可是因为 Windows 原封不同地从 HDD 复制了过来所以新系统里的 C 盘依然是 HDD 的老系统. 我并不知道有什么方法可以在 Windows 外修改盘符记录的,也就是说我必须在 Windows 启动的情况下调换系统盘的盘符…… 系统自带的磁盘工具肯定不行啦,会阻止这么危险的操作的,所以必须用 Disk Genius 做. 我尝试着把 C 盘的盘符去掉,然后成功了…… 这个时候已经打开了的软件还能正常运行,因为已经打开了的文件指针是 NT 层面的不需要盘符. 而如果我这个时候把 Disk Genius 关掉,或者停电,就意味着这个系统再也打不开了…… 不过还是很顺利地把 SSD 的盘符切到了 C,一切正常运作.

结语

买电脑的时候不要吝啬硬盘大小啊!不然折腾的是自己. 我身边已经有无数买了 iPhone 结果后悔空间太小的例子了,成堆成堆的第一次买了 16G/32G 而等换机的时候就直接上了 128G 的例子.

珍爱生命,远离折腾.

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">