使用 Clonezilla 迁移你的系统
当涉及到较为复杂的分区情况时,我们要如何在硬盘间迁移自己的系统呢?
起因
随着系统上安装的软件 / 游戏不断增多,以及 Spotify,Firefox,Chrome 等软件的缓存体积不断增大,我原有的 Intel 760P 256 GiB 用起来逐渐力不从心,于是我便萌生了更换 1 TiB 固态的想法。然而,身无分文的我只有天天做梦(
上个月突然天降白嫖的机会,正好固态价格又即将上涨,我便立即下单了 WD SN550 1 TiB(感谢 tt 帮我代收),漫长的等待过后,固态终于辗转来到我手。然而,又一个问题开始浮现(
我的电脑是机械革命的 X6Ti-m,这款电脑有两个 m.2 2280 接口,其中一个支持 NVMe,另一个只支持 SATA,而且比较坑的一点是,支持 NVMe 的那一个口的速度只有 PCI-E 3.0 x 1,对于绝大多数固态来说都是不够用的。不过话说回来,我要怎样才能在两块 NVMe 固态之间迁移呢?比较幸运的是,我另一个 m.2 接口上插着一块 SAMSUNG OEM 的 256 GiB 的固态,虽然是 SATA 的,但是尚且能用,所以我就想先从 Intel 迁移到 SAMSUNG,再从 SAMSUNG 迁移到 WD(三角关系?
与此同时,我 Intel 上的分区是这样的
1 | Number Start (sector) End (sector) Size Code Name |
直接迁移到 SAMSUNG 可以保持一致,但是我买大固态的原因就是想把 Windows 和 Linux 的分区进行扩大,大概一个系统 400 GiB 左右,剩下的空间留作他用。而且 NTFS 系统只能向后扩容,因此迁移完后再扩容的想法也不太现实,那么……
问题又来了,怎么迁移?
- 手动创建分区然后
rsync
?
可行,但是似乎有些麻烦,而且对应的需要加不少 rsync
的参数才能保证文件的权限保持正确,以及正确处理软链接等等,我对于 rsync
没有过多了解,如果漏掉一两个参数导致结果令人不满,反而浪费了更多时间,因此被我排除(
- 直接
dd
?
从 Intel 迁移到 SAMSUNG 应该可以直接 dd
,毕竟两块盘的大小一致,用 dd
也方便。但是从 SAMSUNG 到 WD 的时候就不太方便 dd
了。在我迁移完毕后,我又想了想,其实可以手动创建分区后使用 dd
一个分区一个分区的进行恢复,等恢复到 Microsoft basic data 的时候再进行扩容,接着恢复后面的分区,应该也是可行的,如果有人感兴趣可以试试。
- 使用 Clonezilla?
Clonezilla 其实早有耳闻,但是由于没有需求,一直也没有使用过。不过看介绍,Clonezilla 是可以恢复硬盘 / 分区到同等或者更大大小的硬盘 / 分区,那么应该是可以满足我的需求的,就直接使用它吧!
准备工作
按官网教程制作好 U 盘即可。
开始迁移
Intel 到 SAMSUNG
这一部分比较简单,使用 Clonezilla 默认的 disk to disk 的迁移即可,可以直接使用初学者模式而无需使用专家模式,注意看清源和目的即可。迁移完后,Clonezilla 会清空你添加的启动项,并按照原本的进行重新添加,只不过 efi 文件指向的是迁移后硬盘的 ESP。如有需求,也可以在 Clonezilla 的命令行里使用 efibootmgr
进行手动添加。
退出 Clonezilla,直接开机,完美。(?)
SAMSUNG 到 WD
到了麻烦的部分,如何做到只扩容 Windows 和 Arch Linux 所在的两个分区呢?我是这么做的:
- 选择 Clonezilla 的 disk to disk 迁移,使用专家模式
- 保持专家模式其他选项为默认,但是选择自己手动创建分区表,注意,就算你之前创建好了分区表,在这一步也会被 Clonezilla 清空,所以没有必要提前做。
- 等待 Clonezilla 让你进入命令行模式,使用
gdisk /dev/sdX
或者gdisk /dev/nvmeXnY
(取决于你的设备)来进行分区表的创建 gdisk
会默认给你创建 GPT 的分区表,以及,你在输入w
并按下回车之前的所有操作都只存在内存中,并没有实际写入硬盘,请注意这点。
好,我们开始创建分区:
- 按下
n
,回车 - 选择分区号,默认为 1,这应该没啥问题
1 | Partition number (1-128, default 1): |
- 选择首个 sector 位置,保持默认,也没啥问题
1 | First sector (34-1953525134, default = 2048) or {+-}size{KMGTP}: |
- 选择最后一个 sector 位置,这里取决于你,我没有试过其他的方案,我是按照最开始给出的分区表来创建除 Windows 和 Linux 系统分区以外的分区的,比如对于
Microsoft reserved
分区,最后一个 sector 的位置就应该是 32767 - 34 + 2048 = 34781 即可。对于 Linux 和 Windows 分区,则按照我的需求输入+400G
1 | Last sector (2049-1953525134, default = 1953525134) or {+-}size{KMGTP}: |
- 输入 Hex code,查看最开始的分区表的
Code
那栏,Microsoft reserved
分区对应的是0C01
,输入即可
1 | Hex code or GUID (L to show codes, Enter = 8300): |
- 按照你的需求创建好所有分区,我的创建完后是这样:
1 | Number Start (sector) End (sector) Size Code Name |
- 输入
exit
,Clonezilla 就会开始迁移了,静静等待迁移完成。
其实这里可以注意到 Clonezilla 似乎是在还原后进行 resize,喜欢手动迁移的同学可以试试(
后续的坑
UUID 和 PARTUUID
从 Intel 迁移到 SAMSUNG 或者从 SAMSUNG 迁移到 WD 后,对应分区的 UUID 是保持一致的。
但是 PARTUUID 还是不一样的,如果你在 /etc/fstab
中写入的是 UUID,请记得修改,如果
你在 Bootloader 中使用的也是 UUID,也请记得修改,不然又启动回之前的硬盘了,或者根本起
不来(
Windows 的🐱病
迁移到 WD 后,Windows 可以正常启动,但是很明显的,我启动到了老硬盘的 Windows,那么此时
Hikari PE 就派上用场了,启动进入 Hikari PE,使用引导修复工具或者 dism++
对迁移后的
Windows 分区进行引导修复。
问题又来了(Windows 你🐱病真多),这时候,你可能会遇到黑屏,但是光标可以动的情况,什么鬼?
Google 一下,在 51nb 上看到了
解决方案,不管你在 PE 还是 Linux 下都可以做到链接中删除 HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
中所有 Value 的操作,删除完以后,擦腚,揩🐔!武安大电🐮!
总结
迁移硬盘坑很多,希望本文能给大家一个参考,也希望大家能有一个好运气,一次成功!
使用 Clonezilla 迁移你的系统
http://blog.sinkpad.tech/2020/03/27/Migrate-your-system-with-Clonezilla/