环境和工具

操作环境

  • 笔记本:1T SSD, 安装有 win10 (500G) 和 Ubuntu20(200G) 双系统,其他剩余空间资料存储分区

  • M730q小主机:500G SSD + 1T HHD, SSD系统盘(没有分区)安装有win10系统, 1T HHD 资料盘,分成两个500G的分区

需求:把笔记本上的Ubuntu20 无损迁移到M730q的HHD,使M730q主机变成双盘双系统。

工具

  • U 盘,容量大于 16G , 制作成Ubuntu的启动盘,可使用 Rufus 或 balenaEtcher 将 Ubuntu的镜像写入U盘
  • 移动硬盘或U盘,用于临时存放迁移系统,容量要足够存放需要迁移的系统

一 、原系统打包

原Ubunut系统的分区:

  • /boot 300MB 分区
  • swap 16GB(和物理内存一致) 交互分区
  • / (95GB) 根目录分区
  • /home (剩下所有,大概90GB)用户目录分区

按照系统的分区,迁移系统只需要打包 //home 分区的数据就可以。

1. 进入U盘启动盘中的Ubuntu

根据不同的电脑的型号,在电脑开机的时候按F1-F12 或使 Esc中的某个按键,使电脑从U盘启动。启动之后选择“试用ubuntu” (Try Ubuntu)

fa2c2c83774baafa2987ad84289e82b

2. 挂载原系统的分区

在挂载原系统分区之前需要将用于转移使用的移动硬盘或u盘格式化,格式化之前先把硬盘中的资料备份

查看移动硬盘的设备路径

$ sudo fdisk -l

Screenshot from 2022-12-14 1-224

我使用的使一个250GB 的移动硬盘,在列出的磁盘中,它是 /dev/sdc ,将它格式化

$ sudo mkfs.ext4 /dev/sdc   

上面命令的磁盘名称/dev/sdc 根据实际的填写。

创建挂载点

$ cd /mnt
$ sudo mkdir root_old  home_old data

root_oldhome_olddata 三个目录分别挂载原系统根目录,用户目录,以及迁移的磁盘

$ cd /mnt		# 切换到 /mnt 
$ sudo mount /dev/nvme0n1p8 root_old 	#挂载旧的“/”到/mnt/root_old
$ sudo mount /dev/nvme0n1p9 home_old  	#挂载旧的“/home”到/mnt/home_old
$ sudo mount /dev/sdc data 				#挂载压缩包存储区到/mnt/data

3. 打包

首先是/目录

$ tar -cvpzf data/ubuntu_root_backup.tar.gz --exclude=root_old/proc --exclude=root_old/tmp\
--exclude=root_old/home --exclude=root_old/lost+found --exclude=root_old/media\
--exclude=root_old/mnt --exclude=root_old/run root_old

root_old所有内容打包到data/ubuntu_root_backup.tar.gz--exclude 是打包时排除的目录

然后是/home目录

$ tar -cvpzf data/ubuntu_home_backup.tar.gz home_old

home_old所有内容打包到data/ubuntu_home_backup.tar.gz

打好包后,取消挂载旧系统的//home

$ sudo umount /mnt/root_old
$ sudo umnout /mnt/home_old

二、迁移系统

原系统需要迁移到M730q的HHD中,因为HHD的所有空间都已创建分区,需要使用Windows自带的磁盘管理工具压缩出大约 200GB 的空闲空间,压缩的空间只需要能够存放下原系统的文件就可以。

1. 新建分区

进入U盘启动盘,选择试用Ubuntu,在系统的应用中查找 GParted 软件,创建以下四个分区,分区大小需要能够存放下原系统的数据,如果不确定,那就和原系统分区大小差不多

  • /boot 300MB 分区
  • swap 16GB(和物理内存一致) 交互分区
  • / (95GB) 根目录分区
  • /home (剩下所有,大概90GB)用户目录分区

2. 解压原系统

将原系统打包的文件解压到对应的分区,在解压之前,同样要挂载分区

$ cd /mnt
$ mkdir root home data
$ sudo mount /dev/sda1 root 	#挂载旧的“/”到/mnt/root_old
$ sudo mount /dev/sda2 home  	#挂载旧的“/home”到/mnt/home_old
$ sudo mount /dev/sdc data 				#挂载压缩包存储区到/mnt/data

新建分区和迁移硬盘的名称使用 sudo fdisk -l 命令查看

解压文件

$ tar -xzvpf data/ubuntu_root_backup.tar.gz -C root
$ tar -xzvpf data/ubuntu_home_backup.tar.gz -C home

注意,完成解压后,旧系统/的文件可能是在当前的/mnt/root/root_old里面,需要用mv命令挪动一下把文件都挪到/mnt/root下,home目录也是类似的操作。

$ mv /mnt/root/root_old/*  /mnt/root
$ rm -r /mnt/root/root_old
$ mv /mnt/home/home_old/*  /mnt/home
$ rm -r /mnt/home/home_old

3. 修改uuid

查看硬盘uuid:

$ blkid

打开/mnt/root/etc/fstab,修改列出的Ubuntu系统分区、home目录所在分区、EFI分区等分区的名称和uuid,使其与目标盘各分区的对应:

$ sudo nano /mnt/root/etc/fstab

4.重建引导

下载boot-repair并运行,以修复引导:

$ sudo add-apt-repository ppa:yannubuntu/boot-repair
$ sudo apt-get update
$ sudo apt-get install boot-repair
$ boot-repair

运行之后选择默认的就可以修复引导。

参考

  1. https://www.zhihu.com/people/bubblefish-37/answers