Ubuntu 20.04 系统迁移

2023-05-16

一、前言

现实工作中需要在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上面了,理想情况是之前系统的全部配置可以完完全全地复现出来。因为是在系统迁移所有操作完成之后,凭记忆整理了这个文档,所以一些细节过程如有所疏忽请谅解

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu 20.04 系统迁移 的相关文章

  • 输入10个数,用冒泡法对它进行排序输出。

    include lt stdio h gt int main int a 10 i j t for i 61 0 i lt 10 i 43 43 scanf 34 d 34 amp a i for i 61 0 i lt 9 i 43 43
  • git设置用户名和邮箱地址

    因为有比赛要用到git xff0c 所以学习计划 43 1 git安装就直接个教程安装就ok了 xff0c 很简单哒 xff01 安装之后直接打开 Git Bash 打开之后是这样的 然后输入 git config list xff0c 没
  • node.js操作MySQL数据库批量插入删除数据

    node js操作MySQL数据库批量插入删除数据 传参采用数组的形式 xff0c 数组里面添加多个数组 测试插入多条数据 app get 34 addusers 34 req res 61 gt res write 34 hello wo
  • 视图的创建

    浅浅的更一篇 往下看叭 创建goods表 xff0c 并插入5条记录 mysql gt create table goods gt id int 11 primary key auto increment gt type varchar 3
  • linux c编程:Posix消息队列

    Posix消息队列可以认为是一个消息链表 有足够写权限的线程可以往队列中放置消息 有足够读权限的线程可以从队列中取走消息 在某个进程往一个队列写入消息前 并不需要另外某个进程在该队列上等待消息的到达 这跟管道和FIFO 是相反的 因为对于管
  • C++封装对MySQL的基本操作

    1 环境搭建 在这里 xff0c 我将使用vscode来搭建MySQL的编程环境 首先 xff0c 下载MySQL xff0c 配置好系统环境变量并运行MySQL数据库 接着 xff0c vscode扩展中搜索并下载MySQL 与MySQL
  • pytorch学习(1) 数据集制作

    1 数据集 数据集的制作 定义 什么是数据集 通俗来说就是包含一堆数据的集合 是进行下一步训练的必备素材资源 连数据都没有 你还分析啥啊 第一步 引入Dataset模块 span class token keyword from span
  • 新版 Alist + RaiDrive 挂载阿里云盘 Open 到本地,实现网盘本地化

    新版 Alist 43 RaiDrive 挂载阿里云盘 Open 到本地 xff0c 实现网盘本地化 1 下载 Alist 和 RaiDrive2 配置 Alist3 填写挂载路径和刷新令牌4 获取刷新令牌5 使用 RaiDrive 挂载
  • 计算企业发放的奖金根据利润提成

    要求 在右侧编辑器补充代码 实现计算企业发放的奖金根据利润提成 利润 i 低于或等于10万元时 xff0c 奖金可提成10 xff1b ii 利润高于10万元 xff0c 低于20万元时 xff0c 低于10万元的部分按10 提成 xff0
  • 数字移位(指针)(C语言)

    题目描述 有n行m列个整数 xff0c 使每一行其前面各数顺序向后移k个位置 xff0c 每一行最后k个数变成最前面的k个数 要求用指向一维数组的指针变量完成 n m和k均小于100 输入说明 输入包括n 43 1行数据 xff0c 第一行
  • 使用 Vue3 重构 Vue2 项目

    目录 前言 xff1a 一 项目整体效果展示二 项目下载使用方法三 为什么要重构项目四 重构的流程五 步骤中的 96 bug 96 以及解决方式六 未解决的问题总结 xff1a 前言 xff1a 2020年9月18日 xff0c vue3正
  • Vue3 的状态管理库(Pinia)

    目录 前言 xff1a 一 什么是 Pinai二 安装与使用pinia三 什么是 store四 state1 定义 state2 组件中访问 state 五 Getters1 定义 Getters2 在组件中使用 Getters 六 Act
  • Vue3 中生命周期的使用

    目录 前言 xff1a 一 什么是生命周期函数二 什么是 Keep Alive 组件三 生命周期函数分为几种 xff0c 分别有什么用 xff1f 1 beforeCreate2 created3 beforeMount onBeforeM
  • git 的使用方法(上 - 指令)

    目录 前言 xff1a 一 Git 是什么 xff1f 二 SVN与Git的最主要的区别 xff1f 三 Git 安装四 git 配置1 创建仓库 repository2 配置3 工作流与基本操作 五 Git 的使用流程1 仓库中创建 1
  • git 的使用方法 (下 - 远程仓库和图形化)

    目录 前言 xff1a 一 什么是协同开发二 Gitee 使用协同开发1 首先注册一个码云账号2 新建一个仓库3 根据下图把新建仓库设置为开源4 在远端合并分支的方法5 链接 git 远程6 提交 xff08 同步 xff09 远程7 远程
  • docker从私有镜像库pull/push镜像问题:Error response from daemon: Get https://xxxx.com/: x509: certificate signe...

    docker从私有镜像库pull push镜像问题 xff1a Error response from daemon Get https harbor op xxxx com v2 x509 certificate signed by un
  • Vue3 中组件的使用(上)

    目录 前言 xff1a 一 什么是组件二 注册组件1 全局注册2 局部注册 二 传递数据 父 gt 子 1 字符串数组的形式2 对象的形式 三 组件事件 子 gt 父 1 字符串数组式声明自定义事件2 子组件 触发组件事件3 父组件 监听子
  • Vue3 中组件的使用(下)

    目录 前言 xff1a 一 透传属性和事件1 如何 透传属性和事件 2 如何禁止 透传属性和事件 3 多根元素的 透传属性和事件 4 访问 透传属性和事件 二 插槽1 什么是插槽2 具名插槽3 作用域插槽 三 单文件组件CSS功能1 组件作
  • Vue3 中的模板语法

    目录 前言一 什么是模板语法 xff1f 二 内容渲染指令1 v text2 插值表达式3 v html 三 双向绑定指令1 v model2 v model的修饰符 四 属性绑定指令1 动态绑定多个属性值2 绑定class和style属性
  • 微信小程序基础介绍

    目录 前言 xff1a 一 什么是微信小程序二 微信小程序的发展历史三 微信小程序的优缺点四 与其他相关概念的区别与H5的区别与公众号 订阅号 服务号 企业微信的区别 五 小程序的环境六 初始化项目七 小程序单位八 导航栏配置九 模板引用十

随机推荐

  • 使用 uni-app 完成左滑效果

    目录 前言 xff1a 一 效果展示二 代码地址三 实现思路四 效果完成步骤1 html 代码2 js代码3 css 代码4 后台代码 总结 xff1a 前言 xff1a 左滑显示编辑 删除 或者 置顶之类的功能我们经常要实现 xff0c
  • React 入门(超详细)

    目录 前言 xff1a 一 React 简介1 什么是 React2 React 的特点3 React 高效的原因4 React 官网5 React的主要原理6 Facebook为什么要建造React 二 React 的基本使用1 基础代码
  • React 面向组件编程(上)

    目录 前言 xff1a 一 组件的基本理解和使用1 函数式组件2 类式组件3 注意事项4 渲染函数式组件标签的基本流程5 渲染类组件标签的基本流程 二 组件三大核心属性 1 xff1a state1 代码示例2 效果展示3 注意4 设置状态
  • React 面向组件编程(下)

    目录 前言 xff1a 一 受控组件与非受控组件1 受控组件2 非受控组件3 效果展示4 总结 xff1a 二 组件的生命周期1 对生命周期的理解2 生命周期的三个阶段 xff08 旧 xff09 3 生命周期的三个阶段 xff08 新 x
  • React应用(基于React脚手架)

    目录 前言 xff1a 一 使用create react app创建react应用1 什么是 react 脚手架 xff1f 2 创建 cli 脚手架方式13 创建 cli 脚手架方式24 npx 5 react脚手架项目结构6 功能界面的
  • Tesseract(识别验证码)

    Tesseract windows 下的安装及简单应用 1 Tesseract安装以及简介 阻碍我们爬虫的 有时候正是在登录或者请求一些数据时候的图形验证码 因此这里我们讲解一种能将图片翻译成文字的技术 将图片翻译成文字一般被称为光学文字识
  • POJ 2893 M × N Puzzle——八数码有解条件

    题意 xff1a 给定M N的数码图 xff0c 问能否移动到最终状态 分析 有解的判定条件可见 八数码有解条件 值得一提的是 xff0c 这道题求逆序对卡树状数组 xff0c 只能用归并排序 include lt cstdio gt in
  • 【c语言典例一】十进制的数转化为二进制和八进制

    首先 xff0c 介绍十进制转二进制的方法 xff1a 十进制整数转换为二进制整数十进制整数转换为二进制整数采用 34 除2取余 xff0c 逆序排列 34 法 具体做法是 xff1a 用2整除十进制整数 xff0c 可以得到一个商和余数
  • C语言字符个数统计

    输入一行字符 xff08 字符个数小于80 xff09 xff0c 这行字符包括小写字母 xff0c 大写字母 xff0c 数字 xff0c 空格等其他可打印符号 请统计各字母的个数 xff0c 小写字母和大写字母统计于小写字母上 xff0
  • 【STC15单片机】按键&静态数码管显示0~9

    目录 数码管工作原理 共阳极数码管段码表 共阴极数码管段码表 矩阵键盘 amp 数码管综合应用 单片机型号说明 xff1a IAP15F2K61S2 新建工程时单片机型号选择STC15F2K60S2 本开发板支持的显示器件 xff1a LE
  • 字典查询python

    有字典 dict1 61 39 赵广辉 39 39 13299887777 39 39 特朗普 39 39 814666888 39 39 普京 39 39 522888666 39 39 吴京 39 39 13999887777 39 x
  • python中的序列(列表、元组、字符串)的切片操作

    目录 一 序列 二 序列常用操作 切片 注意 演示 一 序列 序列是指 内容连续 有序 xff0c 可使用下标索引的一类数据容器 列表 元组 字符串 xff0c 均可以可以视为序列 二 序列常用操作 切片 序列支持切片 xff0c 即 列表
  • 四,面向对象 ——类与对象

    面向对象的三大特征 xff1a 封装型 xff0c 继承性 xff0c 多态性 xff08 可能有些还会说有抽象性 xff09 类 xff08 class 和对象 xff08 object 是面向对象程序设计方法中最核心的概念 面向对象的两
  • POJ - 2823 滑动窗口

    题目 xff1a 给一个长度为 NN 的数组 xff0c 一个长为 KK 的滑动窗体从最左端移至最右端 xff0c 你只能看到窗口中的 KK 个数 xff0c 每次窗体向右移动一位 找出窗体在各个位置时的最大值和最小值 思路 xff1a 网
  • C语言十进制转八进制

    输入 12 输出 14 include lt stdio h gt int main int n scanf 34 d 34 amp n int i 61 0 int a 100 int count while 1 a i 61 n 8 n
  • Docker 中,对 MySQL配置文件修改

    步骤 1 docker ps span class token punctuation span a 查看docker内的镜像 2 进入容器 docker exec it 容器ID bin bash 3 找到MySQL的配置文件 mysql
  • 【Linux学习】进程间通信——system V(共享内存 | 消息队列 | 信号量)

    x1f431 作者 xff1a 一只大喵咪1201 x1f431 专栏 xff1a Linux学习 x1f525 格言 xff1a 你只管努力 xff0c 剩下的交给时间 xff01 进程间通信 共享内存 消息队列 信号量 x1f3c0 共
  • python_tkinter组件摆放方式

    1 最小界面组成 导入tkinter模块 import tkinter 创建主窗口对象 root 61 tkinter Tk 设置窗口大小 最小值 xff1a 像素 root minsize 300 300 创建一个按钮组件 btn 61
  • conda create -n yolov5_py36 python=3.6 出现Solving environment: failed”报错的解决办法

    该错误通常意味着Conda无法解决您的环境依赖关系 以下是可能的解决方案 xff1a 检查您的网络连接 xff1a 确保您的计算机已连接到互联网 xff0c 并且没有任何防火墙或代理阻止Conda访问所需的资源 清除Conda缓存 xff1
  • Ubuntu 20.04 系统迁移

    一 前言 现实工作中需要在Intel NUC上装一个Ubuntu 20 04系统 xff0c 并运行ROS以及相关的很多功能包 xff0c 但如果直接安装新新系统 xff0c 之前的大量环境变量要重新去配置 xff0c 所以考虑说将原先的U