一、前言

现实工作中需要在Intel NUC上装一个Ubuntu 20.04系统,并运行ROS以及相关的很多功能包,但如果直接安装新新系统,之前的大量环境变量要重新去配置,所以考虑说将原先的Ubuntu系统直接迁移到NUC上。开始尝试了一些利用ISO镜像来完成Ubuntu系统迁移的方法,但所要迁移的文件较多,制作出来的ISO镜像过大导致没有合适的U盘来做启动盘。考虑到Linux一切皆文件的特点,可以将原先的系统和文件进行打包,再拷贝到新电脑来完成系统迁移。主要步骤参考了一些博主之前的经验贴, 但由于是第一次操纵NUC这种小型电脑,实际操作过程中还是遇到了不少新问题。

二、准备工作

  1. U盘(8G以上),作为系统启动盘(最好是专门用作启动盘的U盘)
  2. 移动硬盘,用来拷贝打包的文件
  3. USB拓展坞(NUC的USB-A接口只有3个,实际迁移过程中要同时用到5个USB-A接口)
  4. Ubuntu 20.04 LTS(去官网下载 ubuntu-20.04.4-desktop-amd64.iso)
  5. 启动盘制作软件:rufus,老白菜等 (用UltraISO制作时报错,不知道是不是下的版本不匹配)

三、对原先的系统进行打包

参考一些经验贴的方法, 对原先系统中的 /, /home, /boot 分别打包, 生成三个压缩文件

1. 对 / 目录 进行打包

sudo tar -cvpzf ubuntu_backup.tar.gz --exclude=/proc --exclude=/tmp --exclude=/home --exclude=/boot --exclude=/lost+found --exclude=/media --exclude=/mnt --exclude=/run /

这里排除了proc,tmp,home,root,lost+found ,media,mnt,run 几个不需要的文件夹

2.对 /home 目录 进行打包

sudo tar -cvpzf ubuntu_home_backup.tar.gz /home

在打包 /home 时也可以利用exclude排除掉一些不需要迁移的文件夹,注意使用exclude排除/home中的一些文件夹时,要写全路径名:–exclude=/home/xxx/xxx

3.对 /boot 目录进行打包

sudo tar -cvpzf ubuntu_boot_backup.tar.gz /boot

此时可以在原先Ubuntu文件管理器中的主目录下看到3个压缩文件,ubuntu_backup.tar.gz, ubuntu_home_backup.tar.gz, ubuntu_boot_backup.tar.gz,将其拷贝到移动硬盘之中。

四、制作Ubuntu 20.04的系统启动盘

  1. 去Ubuntu官网下载 ubuntu-20.04.4-desktop-amd64.iso 镜像文件
  2. 我用的是老白菜U盘制作工具,直接去官网下载安装老白菜UEFI版(NUC只支持UEFI启动)
  3. 插上准备作为系统启动盘的U盘,打开老白菜,开始制作启动盘

选择ISO模式
点击ISO模式,选择所下载的Ubuntu 20.04 镜像,点击开始制作

在这里插入图片描述
选择”否“

在这里插入图片描述
“硬盘驱动器”选择你的U盘,写入方式默认"USB-HDD+“就可以,点击“写入”等待启动盘制作完成就可以了,如果之后将启动盘插入NUC后无反应,可以重新制作启动盘时将写入方式改为“RAW”,或者利用rufus等软件重新制作。

五、启动NUC并设置分区

首先在NUC上插入启动盘(如果启动盘是USB 2.0的U盘,注意要插到开关旁边的那个USB接口,背后的两个USB 3.0接口插上可能会出现U盘无法正常引导启动),开机按F2进入BIOS设置,调整启动顺序,打开USB BOOT以及优先启动usb 设备的选项,如下图

在这里插入图片描述
进入安装盘系统,选择试用ubuntu而不安装,连接WIFI,运行终端打开gparted

sudo gparted

如果gparted不存在

sudo apt-get install gparted

打开GParted软件对Nuc进行分区, 首先新建分区表, 类型建议 gpt,然后对新硬盘建立分区,我的分区为(大小, 类型):
200M,fat32
4M , 未格式化
4G , ext4, (挂载/boot)
50G , ext4, (挂载/)
8G, linux_swap
剩下的, ext4, (挂载/home)
在这里插入图片描述保存分区结果, 在第一个 200M的分区上右键, 管理flag, 勾选/boot, 在第二个 1M 的分区上右键, 管理flag, 勾选bios_grub

六、解压原系统文件到新硬盘

最好重启一下(分区后文件管理器经常会不显示出三个分区),然后打开移动硬盘对应位置,启动终端,将之前打包的三个压缩包分别解压到新硬盘中对应的分区中

解压 / 目录

tar -xzvpf ubuntu_backup.tar.gz -C  NUC硬盘中被划分为根目录的分区位置

分区位置一般为/media/ubuntu/一堆数字和字母的乱码,具体在该分区下打开终端就能看见

解压 /boot 目录

tar -xzvpf ubuntu_boot_backup.tar.gz -C  NUC硬盘中被划分为boot目录的分区位置

解压 /home 目录

tar -xzvpf ubuntu_home_backup.tar.gz -C  NUC硬盘中被划分为home目录的分区位置

七、手动对各个分区的进行挂载设置

使用blkid命令查看新硬盘各个分区的 UUID, 然后打开NUC(注意一定是NUC硬盘中的,不是启动盘中的fstab) 中 /etc/fstab 文件进行编辑, 将上面查到的各个UUID分别修改到这个文件中对应的位置(注意格式), 该文件默认只读, 可通过 sudo chmod 777 /etc/fstab 修改权限(在新硬盘的etc文件夹下打开终端)

在这里插入图片描述
此时NUC 已经能够正常引导系统了, 但是因为之前打包根目录时丢弃了不必要的文件夹, 所以还需要手动将这些文件夹在新硬盘的系统中重建回来,在根目录分区下打开终端:

mkdir proc lost+found mnt sys tmp media run home boot

八、利用boot-repair进行启动修复

此时新硬盘中已经有了原来的系统, 但是还不能正常引导启动, 可以下载 boot-repair 进行自动修复

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

若提示 :ERROR: ‘~yannubuntu’ user or team does not exist.
进入该网站:https://launchpad.net/~yannubuntu/+archive/ubuntu/boot-repair
单击"Technical details about this PPA"(“有关此PPA的技术详细信息”),然后从"显示sources.list条目:"中选择ubuntu版本,ubuntu版本可在终端命令行运行如下命令获取:

lsb_release -sc

选择对应的版本后,它会输出如下内容:
在这里插入图片描述
复制上面两行链接,ubuntu中使用root访问权限打开此文件: /etc/apt/sources.list 。例如在使用 nano的终端中 :

sudo nano /etc/apt/sources.list

将上面两行链接添加到此文件并保存.现在添加PPA的签名密钥:

sudo apt-key adv --keyserver keyserver.ubuntu.com --网站上的密钥

然后保存退出,更新一下

sudo apt-get update

启动boot-repair(可能会比较慢)后, 点击高级设置, 设置/boot目录,根目录和安装grub程序的位置为NUC上对应的分区(一般会自动设置好的),点击应用进行修复,按要求在终端输入代码并点击下一步(有时候可能会没反应,要多等一会),最后会出现一个是或否的弹窗,选否,等待修复完成。

九、重启开机

至此系统已经迁移完毕, 关闭ubuntu试用系统, 拔掉usb启动盘,启动NUC, 进入BIOS,将硬盘设置为启动项第一同时关掉USB优先启动,之后进入系统,此时可能因为迁移后 /home 的路径问题,导致一些程序无法运行,打开终端运行 sudo apt-get update 更新一下,然后运行

sudo nautilus

进入文件管理器,将 /home 分区下的home文件夹中的内容复制粘贴到 /home 分区下,然后删除掉home文件夹
此时还可能因为一些权限问题,存在着部分程序和文件无法运行和打开的现象,迁移的过程不是很彻底,需要打开终端

sudo chown -R usr_name : usr_name UE4文件夹名

之后若运行ROS还是有报错,可以尝试配置一下环境变量以及重新安装一些python相关的依赖和roslaunch,例如:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool
sudo apt-get install ros-noetic-roslaunch 

至此Ubuntu 20.04 就完全迁移到Intel NUC上面了,理想情况是之前系统的全部配置可以完完全全地复现出来。因为是在系统迁移所有操作完成之后,凭记忆整理了这个文档,所以一些细节过程如有所疏忽请谅解

更多推荐