使用 Clonezilla 迁移你的系统

使用 Clonezilla 迁移你的系统

当涉及到较为复杂的分区情况时,我们要如何在硬盘间迁移自己的系统呢?

题图使用了 Clonezilla 的官方 Logo,来源,使用 CC BY-SA 协议

起因

随着系统上安装的软件 / 游戏不断增多,以及 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
2
3
4
5
6
Number  Start (sector)   End (sector)  Size       Code  Name
1 34 32767 16.0 MiB 0C01 Microsoft reserved
2 32768 1056767 500.0 MiB EF00 EFI system partition
3 1056768 265073563 125.9 GiB 0700 Microsoft basic data
4 265073564 268691455 1.7 GiB 2700 Windows RE
5 268691456 500118158 110.4 GiB 8300 Linux filesystem

直接迁移到 SAMSUNG 可以保持一致,但是我买大固态的原因就是想把 Windows 和 Linux 的分区进行扩大,大概一个系统 400 GiB 左右,剩下的空间留作他用。而且 NTFS 系统只能向后扩容,因此迁移完后再扩容的想法也不太现实,那么……
问题又来了,怎么迁移?

  • 手动创建分区然后 rsync

可行,但是似乎有些麻烦,而且对应的需要加不少 rsync 的参数才能保证文件的权限保持正确,以及正确处理软链接等等,我对于 rsync 没有过多了解,如果漏掉一两个参数导致结果令人不满,反而浪费了更多时间,因此被我排除(

  • 直接 dd

从 Intel 迁移到 SAMSUNG 应该可以直接 dd,毕竟两块盘的大小一致,用 dd 也方便。但是从 SAMSUNG 到 WD 的时候就不太方便 dd 了。在我迁移完毕后,我又想了想,其实可以手动创建分区后使用 dd 一个分区一个分区的进行恢复,等恢复到 Microsoft basic data 的时候再进行扩容,接着恢复后面的分区,应该也是可行的,如果有人感兴趣可以试试。

  • 使用 Clonezilla?

Clonezilla 其实早有耳闻,但是由于没有需求,一直也没有使用过。不过看介绍,Clonezilla 是可以恢复硬盘 / 分区到同等或者更大大小的硬盘 / 分区,那么应该是可以满足我的需求的,就直接使用它吧!

准备工作

  • 4 GiB 左右 U 盘两个(当然,更大也行,一个也行)
  • Clonezilla 镜像(官网链接),下载 Stable 就好
  • Hikari PE 镜像 (官网链接),后面我们会用到

按官网教程制作好 U 盘即可。

开始迁移

Intel 到 SAMSUNG

这一部分比较简单,使用 Clonezilla 默认的 disk to disk 的迁移即可,可以直接使用初学者模式而无需使用专家模式,注意看清目的即可。迁移完后,Clonezilla 会清空你添加的启动项,并按照原本的进行重新添加,只不过 efi 文件指向的是迁移后硬盘的 ESP。如有需求,也可以在 Clonezilla 的命令行里使用 efibootmgr 进行手动添加。
退出 Clonezilla,直接开机,完美。(?)

SAMSUNG 到 WD

到了麻烦的部分,如何做到只扩容 Windows 和 Arch Linux 所在的两个分区呢?我是这么做的:

  1. 选择 Clonezilla 的 disk to disk 迁移,使用专家模式
  2. 保持专家模式其他选项为默认,但是选择自己手动创建分区表,注意,就算你之前创建好了分区表,在这一步也会被 Clonezilla 清空,所以没有必要提前做。
  3. 等待 Clonezilla 让你进入命令行模式,使用 gdisk /dev/sdX 或者 gdisk /dev/nvmeXnY(取决于你的设备)来进行分区表的创建
  4. gdisk 会默认给你创建 GPT 的分区表,以及,你在输入 w 并按下回车之前的所有操作都只存在内存中,并没有实际写入硬盘,请注意这点。

好,我们开始创建分区:

  1. 按下 n,回车
  2. 选择分区号,默认为 1,这应该没啥问题
1
Partition number (1-128, default 1):
  1. 选择首个 sector 位置,保持默认,也没啥问题
1
First sector (34-1953525134, default = 2048) or {+-}size{KMGTP}:
  1. 选择最后一个 sector 位置,这里取决于你,我没有试过其他的方案,我是按照最开始给出的分区表来创建除 Windows 和 Linux 系统分区以外的分区的,比如对于 Microsoft reserved 分区,最后一个 sector 的位置就应该是 32767 - 34 + 2048 = 34781 即可。对于 Linux 和 Windows 分区,则按照我的需求输入 +400G
1
Last sector (2049-1953525134, default = 1953525134) or {+-}size{KMGTP}:
  1. 输入 Hex code,查看最开始的分区表的 Code 那栏,Microsoft reserved 分区对应的是 0C01,输入即可
1
Hex code or GUID (L to show codes, Enter = 8300):
  1. 按照你的需求创建好所有分区,我的创建完后是这样:
1
2
3
4
5
6
Number  Start (sector)    End (sector)  Size       Code  Name
1 2048 34781 16.0 MiB 0C01 Microsoft reserved
2 34816 1058815 500.0 MiB EF00 EFI system partition
3 1058816 839919615 400.0 GiB 0700 Microsoft basic data
4 839919616 843536383 1.7 GiB 2700 Windows RE
5 843536384 1682397183 400.0 GiB 8300 Linux filesystem
  1. 输入 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 的操作,删除完以后,擦腚,揩🐔!武安大电🐮!

总结

迁移硬盘坑很多,希望本文能给大家一个参考,也希望大家能有一个好运气,一次成功!

作者

Luke

发布于

2020-03-27

更新于

2023-05-29

许可协议

评论