笔记本有一个2280和一个2240硬盘位,因此要把原来2280的盘迁移到2240的上。
{: .prompt-info }
硬盘上只有两个分区:UEFI引导分区(FAT32)和 /
挂载点(EXT4),因此迁移就比较容易
步骤
具体来说,
-
同时挂载原硬盘和新硬盘,我这次是在原硬盘上的系统里挂载了新硬盘在/mnt/
,并非使用live CD等,不过原理大同小异。
这里原硬盘是/dev/nvme1n1
,新硬盘是/dev/nvme0n1
-
分区。使用了图形化的gparted
,仿照原硬盘在新硬盘上分出300MB的UEFI引导分区/dev/nvme0n1p1
和剩余的 /
挂载点/dev/nvme0n1p3
,注意要把引导区的boot
标志勾选。
-
复制原硬盘的 /
到新硬盘的 /
挂载点/dev/nvme0n1p3
,注意要忽略:
这些文件。
我用的是rsync
,具体命令见后面脚本。dd
等命令更底层,还要涉及到文件系统resize的问题,rsync
就不会。
-
挂载 /dev
/sys/
… 等关键目录,否则无法进入新系统。这相当于新硬盘的系统和老硬盘的系统公用这些路径,为后面chroot准备。
同时也要挂载新硬盘的引导分区到新硬盘的/boot/efi
,从而能安装grub引导。
-
进入chroot环境。
chroot就是更改当前Linux的root目录,此时相当于在新硬盘的系统中执行命令。
-
修改/etc/fstab
里的UUID为当前新盘的UUID。grub是靠UUID找对应的盘的,这也是全盘克隆无法启动的原因,因为两个盘的UUID不一样。
-
修复grub引导
切记这是在chroot环境,因此路径是/boot/efi
。
最后写入grub
在执行grub-update
前可以安装os-prober
,这样grub-update
能检测所有硬盘中的引导区。当然现在电脑里有两个一样的Linux,需要把老的硬盘卸载、插入新的硬盘(比如win10)的,再进入新的Linux安装一遍os-prober
后执行grub-update
。
现在新的Linux就好了。
grub2
grub2可以安装主题进行美化,我用的是Gorgeous-GRUB里挑选的Virtuaverse,执行安装脚本即可。
自动脚本
脚本对于单个或多个挂载点的情况可以处理,至于有逻辑分区等等复杂的情况不知道行不行。
脚本还有待测试。