Linux系统迁移

Posted by 3thernet on September 19, 2023

此前已在电脑上安装了双系统,最近又加装了一块固态硬盘,因此自然想着把本来在同一块硬盘上的系统分开分别放在两块硬盘上。对 Windows 进行迁移并不容易,而 Linux 下“一切皆文件”,自然就会简单很多。

0x01 分区

首先使用 gnome-disks查看分区情况,主要记住带有星号和三角符号(正在挂载)分区的UUID,之后要用到。然后使用sudo gprepared分配硬盘:

  • fat32:EFI(300MB) /dev/nvme1n1p1

  • swap:交换分区(1.5~2倍内存) /dev/nvme1n1p2

  • ext4:挂载根目录 /dev/nvme1n1p3

  • ext4:挂载home目录 /dev/nvme1n1p4

如果 fat32 分区显示红色感叹号,请安装 mtools 工具:sudo apt install mtools

0x02 同步

将新的硬盘分区挂载到目录,并进行同步

(如果不是在同一台机器迁移,过程也是类似的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo su
cd /mnt
# 挂载
mkdir root home efi
mount /dev/nvme1n1p1 /mnt/efi
mount /dev/nvme1n1p3 /mnt/root
mount /dev/nvme1n1p4 /mnt/home
# 同步
rsync -avx /boot/efi/ /mnt/efi
rsync -avx / /mnt/root
rsync -avx /home /mnt/home
# 卸载
umount root
umount home
umount efi
rm -rf *

接下来需要重新挂载目录,并修改/mnt为主目录,然后修改/etc/fstab/boot/grub/grub.cfg,由于修改了主目录,因此这里修改的是新硬盘分区的文件

1
2
3
4
5
6
7
8
9
10
11
# 重新按照目录挂载
mount /dev/nvme1n1p3 /mnt  # 先挂载根目录
mount /dev/nvme1n1p1 /mnt/boot
mount /dev/nvme1n1p4 /mnt/home
# chroot 必要操作
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot \mnt
nano /etc/fstab  # Ctrl+Shift+P 粘贴新设备 UUID
nano /boot/grub/grub.cfg  # Ctrl+\ 替换所有的根分区 UUID

更新 grub 引导,重启电脑:

1
2
3
4
5
6
7
8
9
10
11
grub-install /dev/nvme1n1p1  # EFI,这里有警告,忽略
update-grub
sync
exit  # 退出 chroot
umount /mnt/dev
umount /mnt/sys
umount /mnt/prc
umount /mnt/boot/efi
umount /mnt/home
exit
reboot

进入新系统后再次update-grub

0x03 清除多余启动项

此时虽然已经完成迁移,但原 Ubuntu 分区还存在,且 BIOS 和 UEFI 有一些重复选项

  • 重启进入 Windows,进入硬盘管理,删除原 Ubuntu 的主分区,注意不要删除 EFI,因为大概率安装双系统时 Windows 和 Ubuntu 共享了 EFI,如果误删,请进入迁移后的 Ubuntu 挂载该分区然后同步回去

  • 下载EasyUEFI管理EFI系统分区->EFI系统分区资源管理器,打开 Windows 所在的 EFI,删除\EFI\ubuntu文件夹,同理打开 Ubuntu 所在的 EFI,删除\EFI\Microsoft文件夹,然后进入管理UEFI启动项目,删除对应启动选项,重启

  • 如果删错了 Windows 启动项导致重启进入高级启动选项,则进入疑难杂症->命令行,输入bcdboot c:\windows /l cn-zh修复 EFI 分区

此外 Lenovo 的 BIOS 页面需要完全关机后再启动才会刷新

0x04 参考