1. 简介

Linux 系统迁移系统相对于 Windows 来说还是简单许多,使用 Linux 系统自带的 dd 命令即可。

2. 系统迁移

2.1 创建分区表

如果是一块新硬盘,则首先要为这个新硬盘创建分区表(不是则可以跳过该步)。分区表类型有 MBR 和 GPT 两种,具体使用哪种要看个人的电脑配置。

进入电脑的 BIOS,查看电脑是否支持 UEFI 启动,如果支持则说明兼容 GPT 分区的硬盘(新电脑现在都默认是 UEFI 启动的);如果只有 Legacy,则说明电脑只支持 MBR 格式的硬盘。

当电脑支持 UEFI 启动时,建议最好使用 GPT 分区。不过此时还要看你原来的系统所在的硬盘是使用 MBR 还是 GPT 分区,有些电脑虽然支持 UEFI 启动,但默认还是 Legacy 启动。如果不想折腾,那还是继续使用 MBR 分区吧。

MBR 分区有个限制,就是硬盘大小最多为 2 TB,且最多只支持 4 个分区,也就是说一个 MBR 在硬盘上最多不超过 4 个系统分区。

如果不介意折腾的话,可以先将原有系统所在的硬盘由 MBR 分区转为 GPT。

  • 具体为先用 U 盘制作一个 Linux Live 系统,然后启动到 Live 系统中使用 gdisk 工具将原有系统所在的硬盘转为 GPT 分区。

    1
    2
    gdisk /dev/sdX		# sdX 为要转的硬盘
    # 然后在打开的交互窗口中依次输入 w 和 y 即可

2.2 创建引导分区

创建好分区表后还要创建一个 ESP 分区,用来存储系统的引导文件。Linux 下可以使用 fdisk 工具来创建新分区,然后将其格式化为 FAT32 格式:

1
mkfs.fat -F32 /dev/sdUV		# /dev/sdUV 为创建的 ESP 分区

2.3 划分空间

要迁移系统,还得先划分一块大于等于原系统分区大小的空间。如果只是划分空间,即创建/删除分区,不涉及 Resize 分区大小,则可以直接使有 fdisk 工具;如果涉及到 Resize 分区(比如原系统很大,想先 Resize 一下再迁移),则这个过程可以使用可视化的 GParted 软件或 KDE Partition Manager 软件来进行操作。

2.4 迁移系统

划分好分区后,就可以迁移系统了。

  • 具体为先用 U 盘制作一个 Linux Live 系统,然后启动到 Live 系统中,使用 Live 系统中的 dd 命令将原有系统拷贝到新硬盘划分的分区中去。

    1
    2
    3
    4
    sudo dd if=/dev/sdXY of=/dev/sdUW bs=4M
    # /dev/sdXY 为原系统分区
    # /dev/sdUW 为新系统分区
    # bs 指定拷贝的数据单元大小
  • 然后进入旧的 Linux 系统,执行以下命令来生成迁移系统的引导项:

    1
    2
    3
    4
    5
    6
    ## 不同 Linux 发行版可能不太一样
    # Ubuntu
    sudo update-grub
    # ArchLinux
    sudo grub-install /dev/sdU # sdU 为新硬盘
    sudo grub-mkconfig -o /boot/grub/grub.cfg
  • 接着重启电脑并进入迁移后的 Linux 系统,成功进入后再执行以下命令:

    1
    2
    3
    4
    5
    6
    ## 不同 Linux 发行版可能不太一样
    # Ubuntu
    sudo update-grub
    # ArchLinux
    sudo grub-install /dev/sdU # sdU 为新硬盘
    sudo grub-mkconfig -o /boot/grub/grub.cfg

最后重启,整个 Linux 系统迁完成(如果后续将旧系统移除了,也要执行以上命令来更新新系统的 GRUB 引导菜单) 。

事实上,如果是 ArchLinux 系统,则可以直接从 Live 系统中使用 arch-chroot 工具进入迁移后的系统,然后直接执行以下命令即可:

1
2
sudo grub-install /dev/sdU	# sdU 为新硬盘
sudo grub-mkconfig -o /boot/grub/grub.cfg

附录

参考资料: