EFI引导模式下配置Windows和Linux双系统共存

        这几天在VirtualBox虚机里玩Modular MAX下的LLama3大模型,实在受不了这执行速度,于是下决心把Ubuntu系统安装在硬盘上跟Windows11做双系统共存。之前在传统BIOS引导模式下做过不少次双系统引导,EFI模式下第一次做,加之windows系统比较霸道,安装过程中踩了不少坑,略记以备忘。

        在安装了Windows11的电脑上安装Ubuntu2404系统并实现双系统共存,首先要在windows下给Ubuntu系统腾出磁盘空间,一般腾出一个100BG大小的分区,Windows下基本上都EFI Boot + GPT分区,需将windows的快速启动功能关闭。其次在ubuntu官网下载系统镜像,制作U盘启动安装盘。第三步在电脑的UEFI配置界面里(华为电脑是按F2)将Sercure Boot特性关闭,使用启动U盘启动。第四步是用启动U盘安装Ubuntu系统,安装程序会自动配置EFI启动记录,并在GRUB启动管理器里增加Windows系统的引导项(通过ChainLoader)。一切正常的话安装会很顺利,重新启动进电脑的Boot选项界面(华为电脑是按F12,各家品牌不完全一样)就可以看到ubuntu和windows两条启动项,默认第一条是ubuntu,可以在ubuntu下使用efibootmgr调整启动顺序。

        第一步,Windows下的准备工作。

        首先是给Ubuntu系统安装腾出足够的磁盘空间,可使用磁盘管理器进行操作:在开始按钮上点击鼠标右键,弹出菜单中选择“磁盘管理”快速进入磁盘管理器,也可以按开始按钮或开始键,输入“磁盘管理”选择“创建并格式化硬盘分区”应用进入磁盘管理器。在磁盘管理器可以看到EFI分区是第1个分区,windows使用的是GPT分区(分区即是卷)。比较简单的方式是找个大的分区把数据备份出来,删除分区再重新划一个给Ubuntu安装使用。

        还一个很重要的操作是将Windows的快速启动功能关闭掉,否则会很麻烦:安装完ubuntu后,重启进入windows会把EFI引导记录给恢复到原来状态,即把ubuntu的引导项给删除掉,到时不得不用Ubuntu的启动安装U盘启动做修复。操作的方法是进入控制面板的电源选项(不是设置里的电源选项),在开始菜单下输入“控制面板”进入控制面板应用,进入“系统与安全”,在“ 电源选项 ”下进入“更改电源按钮的功能” ,点击“更改当前不可用的设置”,取消勾选“启用快速启动(推荐)”项。这项功能是在Windows独占电脑的情况下,对各磁盘分区和EFI启动进行缓存,启动时使用缓存信息以加快启动速度,但双系统启动模式下就必须将其关闭。

        第二步,下载Ubuntu安装镜像并制作启动安装U盘。

        这一步比较简单,属于常规操作。到www.ubuntu.com官网下载Ubuntu桌面版最新推荐镜像即可,下载到本地硬盘。然后按官网推荐下载使用使用Etcher (https://etcher.balena.io/#download-etcher )制作启动安装U盘,按操作提示做即可。需要注意是此操作会清除U盘中的所有数据,需提前做好数据备份。

        第三步,启动系统安装Ubuntu。

        这也是常规操作,把启动安装U盘插入电脑U口,启动电脑按F2(各品牌不一样)UEFI配置界面里将Sercure Boot特性关闭,保存退出重启后按F12进入Boot启动选项,选择U盘启动。启动后进入Ubuntu引导界面,选择try and install ubuntu项进入,按提示一步一步安装即可。安装时选择手动分区,将根分区/安装在预留给Ubuntu系统的分区上,在这里可以打开terminal窗口,通过sudo blkid、sudo lsblk命令找到预留安装的分区和EFI分区。对于传统的IDE和SATA等接口硬盘设备文件名一般是/dev/sd*,对于nvme接口的固态盘一般是/dev/nvme*,如EFI分区一般为/dev/nvme0n1p1。Windows的引导数据和Grub的引导数据都会写在这个EFI分区上(FAT32格式),在Ubuntu里会mount到/boot/efi目录,EFI引导文件在/boot/efi/EFI/ubuntu目录下。

        安装完后拔出U盘重启,按F12进入EFI的boot启动选择界面即可看到ubuntu和windows两条启动项,可按需进入不同系统。如果想把windows引导项设备默认项,可以进入ubuntu后使用efibootmgr命令调整启动顺序。

查看EFI引导项信息

sudo efibootmgr

调整EFI启动顺序

sudo efibootmgr -o num1, num2, ..., numx

其中numx是各引导项的序号,通过第一条 sudo efibootmgr命令的输出结果中可以看到。

附:各种异常处理

        安装过程中可能会出现各种各样的异常情况,都可以通过命令行操作或第三方工具来修复。

1、Ubuntu的EFI引导记录被删除后的修复

        前面提到过如果没有关闭windows的快速启动功能,安装完ubuntu后重新进入windows后Ubuntu的EFI引导项会被删除掉,这里就需要使用ubuntu的启动安装盘重新启动进行EFI引导项的修复。

        重新启动进入ubuntu的Live环境后(即安装界面),可以打开terminal窗口通过efibootmgr命令修复或通过重新安装grub修复,或通过boot-repair工具修复。

1)通过boot-repair工具修复

使用boot-repair工具修复比较简单,安装工具后执行boot-repairy自动修复即可。

首先在live环境下安装boot-repair工具:

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

执行boot-repair进行自动修复:

sudo boot-repair

按照boot-repair的指示进行操作即可。

2)手工进行修复

        使用Ubuntu的启动安装U盘启动,进入ubuntu的Live环境,挂载硬盘上Ubuntu的各系统分区,chroot到硬盘Ubuntu系统,重新安装grub,退出重启即可。

a. 挂载硬盘上安装的Ubuntu和各系统分区。

        在Ubuntu Live环境中,打开terminal终端,sudo blkid、sudo lsblk命令找到EFI分区和系统分区。如前所述SATA接口的硬盘一般为/dev/sd*,如果是nvme接口的则是/dev/nvme*,如/dev/nvme0n1pX,其中X是分区序号,而EFI分区一般是/dev/nvme0n1p1。

        将ubuntu根分区/挂载到/mnt下,其他分区在/mnt下相应目录挂载。

挂载根系统分区(例如根root分区是/dev/nvme0n1pX):

sudo mount /dev/nvme0n1pX /mnt

挂载boot分区(如果/boot是单独的boot分区 /dev/nvme0n1pY)

sudo mount /dev/nvme0n1pY /mnt/boot

挂载EFI分区(即/boot/efi,/dev/nvme0n1p1)

sudo mount /dev/nvme0n1p1 /mnt/boot/efi

挂载系统生成的文件系统:

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt/$i; done
b.使用chroot切换到硬盘上的Ubuntu系统:
sudo chroot /mnt
c.重新安装GRUB:
grub-install
update-grub
d.退出chroot并重启:
exit
sudo reboot

2、通过efibootmgr命令修改EFI引导项

        如果想修改EFI引导项顺序和引导项名称,可以通过电脑EFI引导界面提供的功能调整,如果电脑本身没有提供这功能,可以通过efibootmgr命令实现。前面提到过通过sudo efibootmgr -o命令调整引导顺序,但efibootmgr并没有提供直接修改引导项名称的功能,只能通过删除引导项再增加引导项的方式实现修改引导项名称:

#删除对应的bootnumX数字对应的引导项
sudo efibootmgr -d bootnumX -B
#添加引导项,其中EFI分区在/dev/nvme0n1硬盘的第1分区,--lable是引导项的名称
sudo efibootmgr --create --disk /dev/nvme0n1 --part 1 --label 'Ubuntu 24.04.1 LTS' --loader \\EFI\\ubuntu\\shimx64.efi 

也可以通过第三方工具rename-efi-entry实现:

#通过git下载工具
git clone https://github.com/s-n-ushakov/rename-efi-entry
cd rename-efi-entry
#bootnumX是EFI引导项的标号
sudo ./rename-efi-entry.bash '*' 'Ubuntu 24.04.1 LTS' bootnumX

详细操作说明可查看github上相应的说明
GitHub - s-n-ushakov/rename-efi-entry: A Bash script to rename EFI boot entriesA Bash script to rename EFI boot entries. Contribute to s-n-ushakov/rename-efi-entry development by creating an account on GitHub.icon-default.png?t=O83Ahttps://github.com/s-n-ushakov/rename-efi-entry

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/876155.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计 大学志愿填报系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

大数据-129 - Flink CEP 详解 Complex Event Processing - 复杂事件处理

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

91、K8s之ingress上集

一、Ingress service模式: loadbalance NodePort:每个节点都会有一个指定的端口 30000-32767 内网 clusterip:默认模式,只能pod内部访问 externalName:需要dns提供域名 1.1、对外提供服务的ingress service&…

线性规划------ + 案例 + Python源码求解(见文中)

目录 一、代数模型(Algebraic Models)详解1.1什么是代数模型?1.2代数模型的基本形式1.3 安装所需要的Python包--运行下述案例1.4代数模型的应用案例案例 1:市场供需平衡模型Python求解代码Python求解结果如下图: 案例 …

【快速解决】搭建VUE+VScode+elementUI开发环境,Vue环境配置

目录 1、通过这个之间下载node.js(全选next即可) 2、winr检验是否安装成功(运行下面两个命令即可) 3、将下面我给你的这个压缩包解压,然后放到空间足够的磁盘里面 4、【重点】设置环境变量 第一个变量路径里面长这…

ubuntu中QT+opencv在QLable上显示摄像头

ubuntu中QTopencv在QLable上显示摄像头 饭前的一篇文章吧,写完吃饭走 图像在机器视觉中的重要性是不可忽视的。机器视觉是指计算机利用图像处理技术进行图像识别、分析和理解的科学与技术领域。图像是机器视觉的输入数据,通过分析和处理图像&#xff0…

HTML中的文字与分区标记

1.font标记&#xff1a;用来设置文字的字体&#xff0c;大小&#xff0c;颜色&#xff0c;等属性 <!--font:font标记用来设置字体大小颜色属性size:设置字号&#xff0c;默认是3号&#xff0c;1表示4号&#xff0c;-1表示2号&#xff0c;取值范围是[1,7]或[-7,-1]color:设置…

Docker零基础入门

参考课程https://www.bilibili.com/video/BV1VC4y177re/?vd_source=b15169a302bee35f484245aecc69d4dd 参考书籍Docker 实践 - 面向 AI 开发人员的 Docker 实践 (dockerpractice.readthedocs.io) 1. 什么是Docker 1.1. Docker起源 随着计算机的发展,计算机上已经可以运行多…

C++ | Leetcode C++题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(), people.end(), [](const vector<int>& u, const vector<int>& v) …

第108集《大佛顶首楞严经》

请打开讲义241面。我们讲到嗅报&#xff0c;鼻根当中嗅的功能。 本根发相 发明二相&#xff1a;一者通闻&#xff0c;被诸恶气&#xff0c;熏极心扰。二者塞闻&#xff0c;气掩不通&#xff0c;闷绝于地。 以鼻根造业到无间地狱以后&#xff0c;他有二种受苦的相状&#xf…

[C++] 剖析多态的原理及实现

文章目录 多态的概念及定义编译时多态&#xff08;静态多态&#xff09;运行时多态&#xff08;动态多态&#xff09;动态多态的原理示例&#xff1a;运行时多态 两种多态的区别 多态的实现基本条件虚函数虚函数的重写与覆盖虚函数重写的其他问题协变析构函数的重写 C11 中的 o…

引领智能家居新风尚,WTN6040F门铃解决方案——让家的呼唤更动听

在追求高效与便捷的智能家居时代&#xff0c;每一个细节都承载着我们对美好生活的向往。WTN6040F&#xff0c;作为一款专为现代家庭设计的低成本、高性能门铃解决方案&#xff0c;正以其独特的魅力&#xff0c;悄然改变着我们的居家生活体验。 芯片功能特点&#xff1a; 1.2.4…

直流电源纹波怎么测量?示波器的探头和带宽如何选择?

对于电源工程师来说&#xff0c;精确测量电源纹波是一项基本技能。本文将详细介绍直流电源纹波测试时的注意事项&#xff0c;包括示波器探头的选择、带宽设置、时基选择&#xff0c;确保精准测量直流电源纹波。 一、选择合适的示波器带宽 为了避免电路的高频噪声影响电源纹波的…

基于树莓派ubuntu20.04的ros-noetic小车

目录 一、小车的架构 1.1 总体的概述 1.2 驱动系统 1.3 控制系统 二、驱动系统开发 2.1 PC端Ubuntu20.04安装 2.2 树莓派Ubuntu20.04安装 2.3 PC端虚拟机设置静态IP 2.4 树莓派设置静态IP 2.5 树莓派启动ssh进行远程开发 2.5 arduino ide 开发环境搭建 2.5.1 PC…

C++: 二叉树进阶面试题

做每件事之前都心存诚意, 就会事半功倍. 目录 前言1. 根据二叉树创建字符串2. 二叉树的层序遍历Ⅰ3. 二叉树的层序遍历Ⅱ4. 二叉树的最近公共祖先5. 二叉搜索树与双向链表6. 根据一棵树的前序遍历与中序遍历构造二叉树7. 根据一棵树的中序遍历与后序遍历构造二叉树8. 二叉树的…

【数据结构】8——图3,十字链表,邻接多重表

数据结构8——图3&#xff0c;十字链表&#xff0c;邻接多重表 文章目录 数据结构8——图3&#xff0c;十字链表&#xff0c;邻接多重表前言一、十字链表结构例子 复杂例子 二、邻接多重表&#xff08;Adjacency Multilist&#xff09;例子 前言 除了之前的邻接矩阵和邻接表 …

在k8s中,客户端访问服务的链路流程,ingress--->service--->deployment--->pod--->container

图片来源&#xff1a;自己画的 ingress是一个API资源。 客户端访问ingress的不同url ingress给客户端返回不同的服务。 就和nginx反向代理服务器一样。 根据不同的url&#xff0c;给客户端返回不同的服务。 -----------------------------------------------------------…

MySql基础-单表操作

1. MYSQL概述 1.1 数据模型 关系型数据库 关系型数据库(RDBMS)&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 特点&#xff1a; 使用表存储数据&#xff0c;格式统一&#xff0c;便于维护 使用SQL语言操作&#xff0c;标准统一&…

班迪录屏和这三款录屏工具,一键操作,太方便了!

嘿&#xff0c;小伙伴们&#xff01;今天我要跟大家分享几款超棒的录屏工具&#xff0c;它们绝对是我们在工作和学习中不可或缺的好帮&#xff1b;这些工具功能强大且操作简单&#xff0c;下面就让我来详细介绍一下它们的使用体验和好用之处吧&#xff01; 班迪录屏工具使用体…

医学数据分析实训 项目二 数据预处理作业

文章目录 项目二 数据预处理一、实践目的二、实践平台三、实践内容任务一&#xff1a;合并数据集任务二&#xff1a;独热编码任务三&#xff1a;数据预处理任务四&#xff1a;针对“项目一 医学数据采集”中“3. 通过 UCI 机器学习库下载数据集”任务所下载的数据集进行预处理。…