记录Win10+Ubuntu18.04(引导Win10启动)双系统迁移到SSD,Ubuntu迁移成功但丢失Win10启动项

2023-05-16

原来的Win10+Ubuntu双系统是先装的Win10后装Ubuntu时选择"与Windows系统共存",如此开机后由Ubuntu启动项(紫屏)接管引导进入Ubuntu或Windows系统。

看网上的教程如果不dd拷贝磁盘分区的UUID而是在目标磁盘上生成新的各分区的UUID,就需要改动/etc/fstab文件与/boot/grub/grub.cfg文件,/etc/fstab文件中没多少UUID项,但/boot/grub/grub.cfg文件中UUID出现有多处:

感觉像是要生乱子的节奏,罢了,用dd命令将分区的UUID连带/etc/fstab与/boot/grub/grub.cfg文件一并拷贝吧,省得替换UUID。

由于要对磁盘分区进行dd拷贝,为了节省时间,先把原机械硬盘上各分区的文件精简一下,可以移动到U盘的文件先移动出去,然后压缩磁盘空间,由于不能在当前运行的系统下压缩根目录'/'所在的分区,那可能导致系统出问题,我没敢试。索性直接在LiveUSB下trying Ubutnu without installing,然后使用gparted可视化分区软件(没有的话要安装sudo apt install gparted)对原机械硬盘各分区进行压缩,压缩后各分区后的分区状况如下:

 

其中/dev/sdc1是EFI系统分区ESP,Linux的启动文件目录/boot/efi就是由该分区挂载的,200MiB(约214MB,1KiB=1024B,1KB=1000B,Gparted用GiB单位))文件系统格式FAT32,对应gdisk的分区类型应该是ef00 EFI System;

/dev/sdc2是Microsoft保留分区MSP,200MiB 文件系统格式Unknow,对应gdisk的分区类型应该是0c01 Microsoft reserved;

/dev/sdc3是Win10系统分区,35.43GiB 文件系统格式NTFS,对应gdisk的分区类型应该是0700 Microsoft basic data;

/dev/sdc4是Windows数据分区,97.63GiB 文件系统格式NTFS,对应gdisk的分区类型也是0700 Microsoft basic data;

分区合并之后没有重新sort分区,/dev/sdc5、/dev/sdc6已经不在分区表里了;

/dev/sdc7是Linux根'/'分区(省得哪个目录所在分区不够用,索性全放在一个分区),148.53GiB 文件系统格式ext4,对应gdisk的分区类型应该是8300 Linux filesystem;

最初设想是将机械硬盘的双系统的/dev/sdc1、/dev/sdc2、/dev/sdc3、/dev/sdc4、/dev/sdc7悉数dd到固态硬盘的对应分区,则固态硬盘分区如下,比对应机械硬盘的分区大一些:

在各个分区之间留256MiB的空闲未分配空间,以防未来由GPT分区表转MBR分区表时因为前面的分区无间隙相连导致只能转换前四个分区(详见info gdisk GPT分区转MBR分区,可能是我多虑了,但在分区之间留点空白也无妨系统运行吧);

Gparted的分区操作界面如下,单位都是严谨的MiB(1MiB=1024KiB,而1MB=1000KB)如果要得到整数的GB表示可以换算一下:

然后在liveUSB的终端进行dd拷贝对应分区了,假设固态硬盘是/dev/sda,机械硬盘是/dev/sdc:

dd if=/dev/sdc1 of=/dev/sda1
dd if=/dev/sdc2 of=/dev/sda2
dd if=/dev/sdc3 of=/dev/sda3
dd if=/dev/sdc7 of=/dev/sda5

/dev/sdc4是数据分区,买了硬盘盒直接USB3.1外挂着用了,就不dd拷盘了;记得dd拷贝/dev/sdc3时35.43GiB用时22min,等了挺久,拷贝/dev/sdc7时直接睡觉了,估计也得74分钟了,幸好在dd之前压缩了原机械硬盘各分区。

之后就是参考记一次将Ubuntu系统迁移到SSD固态操作第5步修复引导了,但这里只是修复Ubuntu的启动引导:

sudo su
mount /dev/sda5 /mnt          #(/dev/sda5:为目标磁盘的/ 分区)
mount /dev/sda1 /mnt/boot/efi #(/dev/sda1:为目标磁盘的/boot/efi分区)
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
mount -t devpts pts /mnt/dev/pts/
chroot /mnt
grub-install /dev/sda1        #生成grub文件到/boot/efi目录所在设备下
update-grub2

至此,调整固态硬盘为BIOS启动序列的第一项,关闭liveUSB后拔掉原机械硬盘就可以启动固态硬盘上的Ubuntu了(因与固态硬盘对应分区UUID相同,在开机时必须断掉原机械硬盘否则可能被挂载到固态硬盘的文件系统。因为/etc/fstab中开机挂载块设备是按UUID寻找的,可能就找到原机械硬盘然后给挂载了,这就是偷懒用dd而不去重生成UUID和改/etc/fstab的结果。。。)

其实上面修复Ubuntu启动引导就是重新生成了/boot/grub目录中的文件,因为观察到执行grub-install后/boot/grub/grub.cfg文件的修改日期发生了改变,所以为了避免与原机械硬盘各分区的UUID冲突,可以弥补一下:

LiveUSB下只挂载固态硬盘,重生成各分区的UUID、执行grub-install修复启动引导、修改/etc/fstab中开机挂载分区的对应UUID:

 

 

转载部分:防止失效,转存一下,原链接

朋友送了一个固态硬盘给我,因此将原机械硬盘上的系统迁移到固态硬盘上。

原机械硬盘(dev/sdb)装有win10和ubuntu双系统。分区情况如下:

sda1:ESP分区

sda2:资料

sda3:资料

sda4:swap分区,被我干掉了,内存8g,基本上用不上。也可以使用swap文件代替swap分区。

sda5:ubuntu的/分区

sda6:ubunt的/home分区

复制代码


【记录下删除swap分区的过程】
1.先查看swap分区
swapon -s 
2.停用swap分区
#确保swap分区没有使用
free -m
#停用swap分区
sudo swapoff  /dev/sdb4   (第1步显示的名称)
#检查停用成功
free -m 
3.删除swap分区文件
sudo rm -rf /dev/sdb4
这样就成功删除了swap分区。
4.在/etc/fstab中删除或注释swap行

#我把swap分区删除后,空间合并到了/分区。
因为操作的是/分区,需要在u盘启动盘下执行,使用Gparted工具resize即可。  

复制代码

 

然后需要对ssd固态硬盘(dev/sda)分区,分区情况如下。记得ssd分区时要4k对齐,选择2048还是4096可以参考这篇文章:固态硬盘分区4k对齐是2048还是4096?该选哪个有区别吗?

sda1:ESP分区

sda2:用于win10系统

sda3:win10自动创建的恢复分区(以前没有的,可能是使用易升升级时自动创建的),无需手动创建。

sda4:用于ubuntu的/分区

sda5:用于ubunt的/home分区

 

然后,win10直接用ghost备份恢复,再进pe修复下引导就搞定了。记录手动恢复引导的命令:


# 用DG等工具先将ESP分区装载为K盘,从系统盘C:\Windows目录中复制UEFI格式的启动文件到ESP分区中,修复系统。
bcdboot  c:\windows /s k:  /l zh-cn  /f uefi  

ubuntu的备份恢复花费了大量时间,主要是刷教程做准备工作。网上的方法差不多两种,一种是使用dd命令直接拷贝分区,另一种是使用tar命令压缩备份系统文件。我使用的是后者,需要在live usb环境下进行,也就是使用u盘ubuntu启动盘。主要参考了这篇教程:Ubuntu系统备份 

备份前准备

1.备份前先清理系统,减小备份文件的大小(可选)

首先进行系统的清理

复制代码


# 清理旧版本的软件缓存
sudo apt-get autoclean

# 清理所有软件缓存
sudo apt-get clean

# 删除系统不再使用的孤立软件
sudo apt-get autoremove  

复制代码

删除老旧的系统内核

可以参考这篇文章:如何删除 Ubuntu 上不再使用的旧内核。删除完后,记得使用sudo update-grub更新一下。

2.插入u盘启动,进入Live USB界面,点击试用ubuntu,进入桌面后,获取root权限


sudo su  

备份

3.备份/分区和/home分区

复制代码


cd / 
#挂载/分区
sudo mkdir src-root
sudo mount /dev/sdb5 /src-root

#挂载/home分区
sudo mkdir src-home
sudo mount /dev/sdb6 /src-home

#挂载放/文件的分区(ssd的/分区)
sudo mkdir des-root
sudo mount dev/sda4 /des-root

#挂载放/home文件的分区(ssd的/home分区)
sudo mkdir des-home
sudo mount dev/sda5 /des-home

#备份/分区文件。 注意:因为是live USB环境,直接用/表示USB ubuntu的/,所以不能直接用/。由于已经cd到了要备份的ubuntu的/目录下了,所以直接用./
sudo su
cd /src-root
tar cvpzf /des-root/backup.tgz --exclude=./proc --exclude=./lost+found --exclude=./mnt --exclude=./media --exclude=./sys --exclude=./run --exclude=./tmp --exclude=./home ./

#备份/home分区文件
sudo su
cd /src-home
tar cvpzf /des-home/home_backup.tgz ./  

复制代码

-c: 新建一个备份文档
-v: 显示详细信息
-p: 保存权限,并应用到所有文件
-z: 用gzip压缩备份文档,减小空间
-f: 指定压缩包名称(带路径),只能做最后一个参数

--exclude: 排除指定目录,不进行备份
  --exclude=/proc          一个虚拟文件系统,系统运行的每一个进程都会自动在这个目录下面创建一个进程目录。既然是系统自动创建,也就没必要备份。
  --exclude=/lost+found      系统发生错误时(比如非法关机),可以在这里找回一些丢失文件。
  --exclude=/mnt
  --exclude=/media     多媒体挂载点,如u盘、移动硬盘、windons分区等都会自动挂载到这个目录下。
  --exclude=/sys
  --exclude=/run    系统从启动以来产生的一些信息文件。
  --exclude=/tmp   临时文件目录 
  --exclude=/home

另外要注意的是:我是划分了/和/home的,所以备份/时会排除掉/home,之后单独备份/home。如果没有划分单独的/home,则不要排除/home。

还原

4.进行还原操作

复制代码


# 解压/备份文件
cd /des-root
tar -xvpzf backup.tgz
# 解压/home备份文件
cd /des-home
tar -xvpzf home_backup.tgz

# 创建前面备份时忽略的文件夹
cd /src-rootmkdir proc
mkdir media
mkdir mnt
mkdir tmp
mkdir sys
mkdir run  

复制代码

5.修复引导。我是直接重建引导。

参考EFI+GPT模式下修复GRUB2双系统引导-修订版,一种是用efibootmgr,另一种是grub-install,我用的后一种方法。

复制代码


sudo su
mount /dev/sda4 /mnt             (/dev/sda4:为/ 分区)
mount /dev/sda1 /mnt/boot/efi     (/dev/sda1:为/efi分区)
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
mount -t devpts pts /mnt/dev/pts/
chroot /mnt
grub-install /dev/sda1
update-grub2  

复制代码

6.重启,然后修改/etc/fstab文件,主要修改UUID。

7.最后,记得删除备份文件,减少磁盘空间占用。

 

 

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

记录Win10+Ubuntu18.04(引导Win10启动)双系统迁移到SSD,Ubuntu迁移成功但丢失Win10启动项 的相关文章

  • week4-C - TT 的神秘礼物

    题目 TT 是一位重度爱猫人士 xff0c 每日沉溺于 B 站上的猫咪频道 有一天 xff0c TT 的好友 ZJM 决定交给 TT 一个难题 xff0c 如果 TT 能够解决这个难题 xff0c ZJM 就会买一只可爱猫咪送给 TT 任务
  • 【linux】CentOS 7.4下使用yum安装MySQL5.7.20 最简单的

    默认配置文件路径 配置文件 xff1a etc my cnf 日志文件 xff1a var log var log mysqld log 服务启动脚本 xff1a usr lib systemd system mysqld service
  • mongodb生成自签名证书以及配置SSL以及mongo集群搭建(亲测有效)版本-5.0.6

    64 TOC mongodb生成自签名证书以及配置SSL 亲测有效 版本 5 0 6 一直以来都是向大神学习 xff0c 今天也做回大神分享 xff0c 哈哈 xff01 xff01 几个小时的努力不算白费 一 自签名证书生成 1 生成根证
  • mongodb创建用户名和密码(版本5.0.6)

    mongodb创建用户名和密码 xff08 版本5 0 6 xff09 官方文当地址 xff1a 1 mongodb 添加用户 2 mongodo将命令行参数转化为yaml参数的方法 将命令行选项转换为YAML 超级有用哦 3 mongod
  • Lua字符串切分

    lua 字符串切分示例 local requrl 61 34 10 20 144 127 8891 cas login 34 local cutstr 61 string sub requrl 2 print cutstr local cu
  • nginx lua开发配置文件详解

    加载lua文件和库文件 lua package path 34 waf nginx cnwaf lua waf nginx init lua waf nginx cnwaf plugins lua waf nginx cnwaf deps
  • win7系统安装使用高版本的nodejs-v16.19.1

    文章目录 参考 参考 win7这样操作 xff0c 可成功安装高版本node js xff01 注意 xff1a 首先安装13 14版本nodejs 删掉安装目录下的内容下载16 19 1版本的nodejs版本 xff08 下载zip的包
  • j记录一次gorm 使用协程 插入数据一直报错问题 -Duplicate entry ‘95‘ for key ‘PRIMARY‘ [14.649ms] [rows

    文章目录 问题描述问题解决 问题描述 报错代码如下 span class token keyword func span span class token function GetSystemInfoSave span span class
  • stable diffusion的使用

    文章目录 1 文生图1 1 mountains and trees and gree1 2 three dogs1 3 cats1 4 three lovely cats1 5 beautiful girl1 6 机器猫1 7 卡通图像生成
  • DIY:用开源软件搭建自己的物联网

    原文链接 xff1a DIY Open Source Software for your very own IoT 作者 xff1a Vishal Shah 翻译 xff1a 赵屹华 审校 xff1a 刘翔宇 图片来源 xff1a open
  • ubuntu开启rdp服务

    概要 ssh登录用于终端 xff0c 如果需要GUI的远程登陆ubuntu 我了解到大概3中方案 vncxrdp第三方软件 向日葵 TeamViewer之类的 因为vnc我一直配置不好 xff0c 所以试了一下xrdp xff0c 这样wi
  • csp模拟2-T1 HRZ的序列

    题目 时间限制 1s 空间限制 64MB 题目描述 相较于咕咕东 xff0c 瑞神是个起早贪黑的好孩子 xff0c 今天早上瑞神起得很早 xff0c 刷B站时看到了一个序列aaa xff0c 他对这个序列产生了浓厚的兴趣 他好奇是否存在一个
  • Ubuntu 中文件和目录的操作命令

    在 Ubuntu 中 xff0c 文件和目录的操作命令是非常重要的 这些命令帮助您在文件系统中创建 复制 移动 删除和查看文件和目录 以下是一些常用的文件和目录操作命令 xff1a cd cd 命令用于切换当前工作目录 例如 xff0c 要
  • Docker无法在WSL2的Ubuntu启动的问题

    今天在更新了WSL2上的Ubuntu22 04版本 xff0c 在安装Docker后无法启动 xff0c 查看Docker的日志显示如下的错误 INFO 2022 04 22T16 14 55 718999500 43 08 00 stop
  • C语言中的移位操作

    C语言中的移位操作 xff0c 内容不多 不过有些地方你不注意 xff0c 就疏忽了 先做两个小题先 1 unsigned char x 61 3 x lt lt 1是多少 xff1f x gt gt 1是多少 xff1f 2 char x
  • Android获取设备唯一标识的方法

    String uniqueId String mac 61 getMacAddressByInetAddress if mac 61 null amp amp mac equals 34 34 amp amp mac equals 34 0
  • Linux 搭建私有CA证书服务器之超详细版本

    一 CA简介 CA是什么 xff1f CA是Certificate Authority的简写 xff0c 从字面意思翻译过来是凭证管理中心 xff0c 认证授权 它有点类似我们生活中的身份证颁发机构 xff0c 这里的CA就相当于生活中颁发
  • 基于Nginx搭建RTMP-HLS视频直播服务器(推流+拉流)

    1 环境准备 Linux centos7 6 nginx 1 18 0 源码包 span class token function wget span http nginx org download nginx 1 8 1 tar gz n
  • k8s-部署本地仓库harbor

    1 基础配置 xff1a 主机名IP系统版本k8s master192 168 32 128centos 7 6k8s node1192 168 32 129centos 7 6k8s node2192 168 32 130centos 7
  • k8s部署nginx容器

    1 创建挂载nginx namespace yaml配置文件 xff08 k8s master xff1a 192 168 32 128 xff09 apiVersion v1 kind Namespace metadata name ng

随机推荐

  • k8s部署tomcat并且映射本地目录

    1 编写Dockerfile span class token punctuation span root 64 VM 12 7 centos opt span class token punctuation span span class
  • 自动化运维记录之GitLab CI/CD 自动化部署入门教程

    1 前端项目自动化部署需要的环境依赖 Node 安装项目依赖 打包都需要 Nginx web 项目部署必须 正向代理 方向代理 负载均衡等等 GitLab 也会用到 Nginx span class token punctuation sp
  • k8s-kubeadm证书过期续订解决方法

    1 实验目的 通过kubeadm安装的kubernetes集群各个组件所使用证书的期限为1年 xff0c 本实验练习的是到期之后如何续期 2 实验环境 ubernetes环境及版本 整个实验三台机器192 168 32 128作为maste
  • 宝塔部署Django项目-避坑必看

    1 在linux windoes机器上已经安装宝塔 浏览器登录宝塔管理页面 1 1打包模块 span class token number 1 span 将本地计算机的项目下的模块打包 python m pip freeze span cl
  • week11作业—A - 必做题11-1—

    题目 蒜头君从现在开始工作 xff0c 年薪 NNN 万 他希望在蒜厂附近买一套 606060 平米的房子 xff0c 现在价格是 200200200 万 假设房子价格以每年百分之 KKK 增长 xff0c 并且蒜头君未来年薪不变 xff0
  • Linux 系统 nginx 源码编译安装

    nginx版本 xff1a nginx 1 18 0 操作实施环境 Ubuntu 16 04 6 LTS SUSE Linux Enterprise Server 12 SP4 x86 64 注 xff1a 因为是源码安装 xff0c 操作
  • ubuntu18.04和20.04(ubuntu focal)安装MySQL8并使用navicat连接(详细)

    文章的第一节转载自原文连接 本文实现了服务器ubuntu18 04和虚拟机ubuntu20 04两个版本的MySQL8 的安装 xff0c 和navicat的连接 其中ubuntu18 04对应第二节 xff0c ubuntu20 04是u
  • 对接淘宝公共平台API

    1 说明 由于项目临时提出需求 xff0c 需要对接淘宝公共平台查询用户的一些信息 xff0c 所以需要和淘宝平台做对接 xff0c 我查看了一下淘宝公共平台开发文档 xff0c 虽然写的挺丰富挺整洁 xff0c 但我还是一头雾水 xff0
  • 使用IDEA插件从数据库表生成实体类

    目录 1 介绍 2 添加插件 3 创建数据库连接 4 添加数据库连接信息和驱动 5 表生成实体类 1 介绍 EasyCode是基于IntelliJ IDEA Ultimate版开发的一个代码生成插件 xff0c 主要通过自定义模板 基于ve
  • SpringBoot多环境动态环境切换(nacos)

    目录 1 环境变量切换 1 1 建立各环境配置文件 1 2 设置环境变量 2 nacos配置中心动态切换 2 1 配置文件 2 2 nacos配置 2 3 启动服务 3 同一nacos环境下服务不同环境控制 3 1 cloud方式 3 1
  • 批量插入或更新数据(MyBatis-plus框架)

    目录 1 场景说明 2 DUPLICATE 和REPLACE比较 3 批量插入或者更新 两种方式 方式一 xff1a mybatis plus的saveOrUpdateBatch方法 问题 xff1a 如果操作类集成了基础类 xff0c 比
  • SpringBoot+Nacos+OpenFeign环境搭建

    目录 1 boot方式nacos与openFeign集成 1 引入依赖 2 添加配置 3 测试接口调用 4 常见问题 xff1a 1 版本依赖 2 nacos客户端 2 cloud方式nacos与openFeign集成 1 引入依赖 2 添
  • RestTemplate连接池使用

    说明 在调用淘宝的公共平台接口时候 xff0c 响应较慢 xff0c 我们需要60ms能够获取到响应 xff0c 但是却经常是200ms甚至更长时间 xff0c 别人的接口只能够优化网络响应时间来提升接口响应 由于接口并发量发 xff0c
  • 华为云CCI方式部署服务

    1 创建工作负载 说明 xff1a 创建负载使用的是swr自己上传的镜像 工作负载的创建过程相对简单 xff0c 和CCE类似 xff0c 创建好工作负载后会自动生成服务 2 配置路由 说明 xff1a 添加路由需要指定好容器端口和服务端口
  • RocketMQ单机环境搭建测试+springboot整合

    1 资源下载 官网 xff1a 下载 RocketMQ 这里选择使用编译后可以直接用的 下载后解压 xff1a 略 2 更改配置 主要是更改 conf broker conf 的配置 xff0c 记得添加上下面这几行 xff0c 否则消息发
  • Assignment 2: Exploratory Data Analysis

    Assignment 2 Exploratory Data Analysis 在此作业中 xff0c 您将识别出感兴趣的数据集并进行探索性分析 xff0c 以更好地理解数据的形状和结构 xff0c 调查最初的问题以及发展初步的见解和假设 您
  • jsp页面不显示的问题

    明明前后端的测试都写好了 xff0c 但是就是显示不出来数据 最后的 最后 发现是在引入js的时候一个小小的疏忽浪费了我半个小时的时间 xff0c 值得记录 一下
  • mysql group by 用法解析(详细)

    group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计 xff0c 最终得到一个分组汇总表 SELECT子句中的列名必须为分组列或列函数 列函数对于GROUP BY子句定义的每个组各返回一个结果
  • kubectl get pod卡住的问题

    安装minikube之后 xff0c 出现了kubectl get pod卡住的问题 xff0c 我这里主要网络的问题 xff0c 因为使用代理时没有过滤本地的IP xff0c 添加上过滤IP就可以用了 export no proxy 61
  • 记录Win10+Ubuntu18.04(引导Win10启动)双系统迁移到SSD,Ubuntu迁移成功但丢失Win10启动项

    原来的Win10 43 Ubuntu双系统是先装的Win10后装Ubuntu时选择 34 与Windows系统共存 34 xff0c 如此开机后由Ubuntu启动项 紫屏 接管引导进入Ubuntu或Windows系统 看网上的教程如果不dd