在ThinkPad X280加装M.2硬盘上安装 Ubuntu 18.04.3 填坑记录

2023-05-16

填坑背景

用了一段时间的X280后,突然想在M.2接口上加装一个 NVMe 2242 的SSD,发现 Lenovo 的BIOS设置的非常奇特。能够检测到这个硬盘,但是启动项里就是不能识别!或许是直接就给禁用从 NVMe0 启动也不一定,反正就是在 加装硬盘上安装了 Ubuntu 之后就再也找不到它的存在了。在原 Windows10 下只能看到几个需要格式化的盘符,或者连盘符也有可能看不到。

Ubuntu (GPT) 分区如下:@ /dev/nvme0n1

  • /EFI - @ /dev/nvme0n1p1, 300 MB - EFI分区
  • /MSR - @ /dev/nvme0n1p2, 700MB - 未知分区
  • /boot - @ /dev/nvme0n1p3, 1024 MB - 主分区或者逻辑分区;
  • swap - 16GB 或者 不用;在拥有不足 512 MB 内存的机器上,通常为 swap 分区分配2倍内存大小的空间。如果有更大的内存(大于 1024 MB),可以分配较少的空间甚至不需要swap 分区。(个人建议:感觉现在电脑的配置可以不要swap,但是也会用的着的,所以还是建议多少分点)
  • / - @ /dev/nvmme0n1p4, 24GB 或者 剩下部分 - 逻辑分区或者主分区; 
  • /home - 剩下部分 - 逻辑分区或者主分区; 通常用于存放用户数据,下载的文件和媒体文件。在桌面系统中,/home 通常是最大的文件系统。

需要工具 DiskGenius 加载 GPT的分区盘 /EFI,发现在 /dev/nvme0n1 下的 /EFI 是空的, 在 /dev/sda1 下仅仅有 /EFI/Microsoft 和 /Boot 两个文件夹 —— 正常情况下至少还有一个 Ubuntu 的文件夹。 

成功的解决办法:

使用工具 Rufurs 和 Ubuntu-18.04-LTS-amd64.iso 制作一个 GPT分区 的 UEFI 启动盘,然后把其中的 /EFI 下的 /boot/grub/boot/grubx64.efi /boot/bootx64.efi 等文件复制到 /dev/sda1 下的 /EFI/Ubuntu 的目录下。(例如:/EFI/Ubuntu/grubx64.efi 和 /EFI/Ubuntu/boot/)

使用下面的 命令 在windows10下 win+x +a, 更改 Window Boot Manager 的启动项:

bcdedit /enum firmware # 查看本机的启动项
# bcdedit /set {fwbootmgr} default {bootmgr}
# bcdedit /set '{bootmgr}' path \EFI\Microsoft\Boot\BOOTMGFW.EFI
bcdedit /set '{bootmgr}' path \EFI\Ubuntu\GRUBX64.EFI
bcdedit /set '{bootmgr}' path \EFI\Ubuntu\SHIMX64.EFI

或者新建一个 Ubuntu Boot Manager 的启动项:

efibootmgr -v
sudo efibootmgr -c -w -L "Ubuntu Boot Manager" -d /dev/sda -p 1 -l \\EFI\\Ubuntu\\shimx64.efi
# or
# sudo efibootmgr -c -w -L "Linux Boot Manager" -d /dev/sda -p 1 -l \\EFI\\Ubuntu\\grubx64.efi
  1. 参考链接:bcdedit 如何创建EFI 文件引导项
  2. 参考链接:直接用bcdedit创建bootmgr数据库和修复启动菜单
  3. 参考链接:用efibootmgr管理UEFI启动项,添加丢失的启动项 

实操成功的方法:

(后来发现,其实这个过程也可以省略。可以使用工具 EasyBCD 工具新建一个 Ubuntu Linux 启动,在启动界面选择 Ubuntu Linux 引导启动,然后按 ESC 键盘进入 GRUB2 系统)

事先在/EFI/目录下建立 Ubuntu 文件夹,然后把 fw  fwupx64.efi  grub.cfg  grubx64.efi  mmx64.efi  shimx64.efi 复制到目录(/EFI/Ubuntu/)下即可。

再进行Ubuntu登陆操作前,还需要使用U盘的Live系统去查看一下Ubuntu系统根目录所在的分区:

例如,/dev/nvm01n1p4

启动的时候,系统一般会直接跑到引导系统 grub2.02 下,然后输入下面的命令就可以进入 Unbuntu Linux 的登陆界面了。

grub> ls # 显示硬盘分区符
grub> ls (hd1,gpt1)/EFI/Ubuntu # 逐个盘符,确认分区盘位置
# 需要提前确认的信息 
# a) EFI分区 (hd1,gpt1)
# b) Ubuntu 系统根目录 / 所在分区 /dev/nvme01n1p4
# 然后
root=(hd1,gpt1)//EFI/Ubuntu/boot
linux  $root/vmlinuz-5.0.0.23-generic ro text root=/dev/nvme0n1p4
initrd $root/initrd.img-5.0.0.23-generic
boot

成功地 进入Ubuntu 系统登陆界面了,后面的事情就好办了。使用 efibootmgr 命令 把 (hd0, gpt1) 即 /dev/nvme0n1中 p1 分区的 /EFI/Ubuntu/shimx64.efi 链接到启动项:\\EFI\\Ubuntu\\shimx64.efi ,并给该启动项起个名字 "Ubuntu Boot Manager",命令如下:

$ sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -l \\EFI\\Ubuntu\\shim.efi -L "Ubuntu Boot Manager"
$ sudo efibootmgr -v

如果还不行,那就再次通过 GRUB2 进入系统,使用工具 repair-boot 修复。

更改启动顺序:

Ubuntu 引导修复成功后,在 /etc/default/grub 中可修改 默认启动项:

sudo gedit /etc/default/grub

将文件 grub 中的 GRUB_DEFAULT=0 根据需求作修改。

  • 0代表默认从第一项启动
  • 1代表从第二项启动
  • 依次类推

将数字改成你想要启动的项,修改完保存关闭。然后再在终端中执行

sudo update-grub

手动生成 EFI 文件

首先,需要知道系统的 ESP (EFI System Partition) 在哪,然后在 Windows 和 Linuxs 系统下分别进行如下操作。

Windows 安装 EFI 引导:

#(没有盘符的情况下,程序自动识别)
bcdboot C:\Windows /l zh-cn  
 #(假设已经知道 ESP 盘符为 X: ,一般建议在 Win PE 或 Win RE 中分配盘符)
bcdboot C:\Windows /s X: /f UEFI  

Linux 安装 GRUB EFI 引导:

#(假设 ESP 挂在 /boot/efi 下)
grub-install --efi-directory=/boot/efi --boot-directory=/boot --target=x86_64-efi 

Linux 下 UEFI 引导项管理:

列出所有引导项:

efibootmgr -v

删除指定引导项:

efibootmgr -b XXXX -B  # XXXX 为对应的后四位数字

一般来说,每个系统的引导在 ESP 根目录下的 EFI 目录下都有自己的目录,像这样:

如果你不想要某个系统的引导,直接把它删掉就行了。

比如你想要删除 Windows 的引导,那就:

引导无论是在 Windows ,Win PE ,Win RE 还是 Linux,Live CD 下安装都是可以的。学会用这几条命令以及他们的相关参数,你想装哪都可以,装 U 盘上也没人管你,只要你的 UEFI BIOS 能识别出来就行了。

最后,这是我的 ESP:(那个 101MB 的 rescx64.efi 是因为它包含了一个完整的 GRUB 环境,还有 SystemRescueCD 的 vmlinuz 和 initramfs ,以及 SuperGRUB2Disk 的一些配置文件和我自己写的配置文件在里面,通过 grub-mkstandalone 命令制作。)

编辑于 2018-05-25
作者:知乎用户
链接:https://www.zhihu.com/question/276289613/answer/400414145
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

下面的这些内容没有实操成功过,仅供参考。

sudo gedit /etc/default/grub

sudo update-grub

Windows下设置Ubuntu引导项

折腾了很久,联系客服之后收到了一个明确的回复:X280 不能从 M.2接口的加装硬盘 引导启动。心中瞬时有 >> 10^4 头草泥马 往Lenovo 方向奔腾而去!

没法子,只能设法从 Windows10 启动,然后引导 ubuntu 起来干活了。

方法一:

使用easybcd。安装好Ubuntu后,按照教程设置EasyBCD,重启动。选择Linux,提示:

文件:\NST\AutoNeoGrub2.mbr

状态:0xc000007b

信息:无法加载应用程序或操作系统,原因是所需文件丢失或包含错误。

猝!

方法二:

来自《Windows下设置Ubuntu引导项》(Windows下设置Ubuntu引导项 - yhjoker - 博客园)

(我很奇怪,为什么很多人在windows下添加ubuntu引导时都用easybcd - Ubuntu中文论坛)

使用Windows自带的引导程序对linux进行引导,即将Ubuntu的相关引导信息加入Windows引导程序的配置文件中(一般是修改boot.ini文件),从而通过Windows的引导程序进行引导。这种方法对于Windows XP和Windows 7更为有效,因为这两个系统的引导程序和配置文件都位于活动分区中,对其的修改更简单,而之后的Windows引导程序好像不再使用boot.ini作为配置文件了,引导的设置更加复杂了。Windows 7下的具体引导设置可以参考这里。具体的操作流程包括将Linux的启动扇区作为一个文件拷贝至Windows的活动分区,并在boot.ini中设置一个指向该启动扇区文件的项目,从而使得引导程序可以根据该设置去引导Linux系统。借助安装有linux安装程序的U盘,选择试用linux,找到安装linux启动模块的设备名,如/dev0/sda5等,使用dd命令获得所需的文件。

  dd if=/dev0/sdax of=ubuntu.mbr bs=512 count=1    //从指定文件/dev/sdax读取数据,读取512个字节,并输出到ubuntu.mbr文件中,从而得到linux启动的mbr

  再将该文件放置到默认开机Windows系统的活动分区,修改相关的boot.ini文件即可。

  该种方法笔者做过尝试但并未成功。个人认为这应该是最符合自身需求的方式,但失败原因不详,望能得到指点。(好像有结论说该种方式只能在Legacy BIOS模式系统中使用)

方法三:

通过Windows8.1 / Window10自带的工具bcdedit来进行开机启动设置。该工具在Windows NT之后的系统中提供。可通过bcdedit工具修改Win8.1下的BCD配置文件 和 设置对应的引导文件路径,这样Windows引导程序可以根据配置文件内容生成对应的引导菜单,引导程序也可根据设置路径信息找到对应的系统程序bcdedit的操作指令在文章开始的链接中有介绍。或者可以直接通过图形界面工具easyBCD进行配置。

  若自行手动配置,则需要新建一个启动引导项,给出相应的引导文件所在分区和路径、引导描述等参数。该种方式对于Windows系统引导其他Windows系统,如Win8.1引导Win10启动是有效的。但貌似在Windows8.1中引导Linux系统无法成功(最大的问题在于无法设置对应的path路径)。图示为笔者设备双系统Win10的相关信息。

  

方法四:  

Ubuntu12.04以及后续版本引入了对EFI模式的支持,所以可以将Ubuntu的引导程序GRUB安装在设备的EFI分区中(原系统Win8.1在安装时会划分,可以在磁盘管理中定位),此操作会在EFI分区中生成引导Ubuntu的文件,从而可以引导Ubuntu,《EFI GPT 预装Win8下ubuntu12.04的安装与引导》原帖。但该贴的内容仍旧是通过Linux系统来引导Windows系统。笔者这里并没有使用Linux系统来引导Windows系统,而是让两个系统的引导程序相互独立,想要使用另一个系统时,则通过BIOS修改引导程序的使用顺序。

  首先将Ubuntu安装至EFI分区,其中的目录内容会发生改变,在EFI文件夹下新增了ubuntu的引导程序。

  linux下的启动分区即EFI分区挂载在/boot/efi下(可以通过df指令查看)

  

  可以看到原EFI目录中新增了ubuntu目录

  

  目录中的内容如图所示,其中的grubx64.efi和shimx64.efi均可进行Ubuntu系统的引导。其中前者无法在开启安全启动选项下进行启动。

  

  此方法的实际原理是Ubuntu和Windows使用两个不同的引导系统,通过BIOS可以设置使用引导程序的顺序。当默认首先使用bootx64.efi作为引导程序时,则会引导Windows系统,而首先使用grubx64.efi作为引导程序时,则会引导Linux系统。这样的两个系统之间无法进行相互引导,但也保证了两个系统本身的情况不会相互干扰。设备开机时总是会默认载入BIOS中设置的第一顺序的引导程序对应的操作系统。这种方法相当于将Linux启动引导安装在EFI分区,从而多出一个启动文件grubx64.efi。通过选择grubx64.efi/bootx64.efi来对不同的系统进行引导。

方法五:

Win10与Ubuntu 18.04双系统安装。(Win10引导Linux) 

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

在ThinkPad X280加装M.2硬盘上安装 Ubuntu 18.04.3 填坑记录 的相关文章

随机推荐

  • 多个py文件同时执行(多进程与多线程实现)

    本人在编写python程序时 xff0c 需要多个py文件在不同终端内同时运行 xff0c 从而配合实现某种功能 xff0c 经过多方查找与实验 xff0c 排除了很多无法使用的方案 xff0c 最终确定了以下两个方案 xff0c 现将其记
  • nanopc-T4 开发板通过USB麦克风采集录制音频

    文章目录 1 使用 nanopc T4 开发板采集音频2 使用 Tyless外置usb麦克风录制声音3 使用 ffrmpeg 将实时视频与音频合并并推流到 rtmp 服务器中4 成功实现opencv采集图像与音频合并推送到rtmp 1 使用
  • 北京超级云计算中心操作训练指南

    北京超级云计算中心操作指南 本人在实验室做深度学习图像领域相关研究 xff0c 前期使用实验室的设备 2080Ti xff0c 运行时间较慢 xff1b 跑一轮需要6个小时以上 xff1b 后来开始使用超算 xff0c 运行速度比实验室快多
  • windows to go 和 linux to go 制作教程

    文章目录 使用 ventoy 制作windows to go 和 linux to go 教程 xff0c 将系统装进U盘中随身携带1 ventoy 介绍2 准备工作3 windows to go3 1 将 U盘初始化3 2 虚拟磁盘安装
  • 使用nps搭建内网穿透并配置泛域名解析

    使用nps搭建内网穿透并配置泛域名解析 前言1 准备工作2 服务器端搭建nps并配置2 1 配置nps配置文件2 2 docker安装nps2 3 web端配置nps并使用 3 客户端使用nps4 配置泛域名解析5 参考链接 前言 nps是
  • web内外网判断界面

    因日常需要 xff0c 我们在实验室内网中部署了一个服务 xff0c 在校园网内都能正常访问 xff0c 同时配置了内网穿透服务 xff0c 实现外网也能正常访问 但外网访问毕竟是通过内网穿透实现 xff0c 稳定性与网速都有限制 xff0
  • 为无登陆鉴权功能的接口与网站添加登陆鉴权功能

    1 缘由 本人部分服务的测试接口为方便日常测试调试 xff0c 使用了 ip 43 端口 的形式进行访问 xff0c 并且未配置账号密码鉴权机制 在日常测试一段时间后 xff0c 终于还是收到了来自腾讯云的监管通知 xff0c 说服务存在数
  • RoboMaster机器人运行教程(一)

    1 环境配置 系统 xff1a ubuntu16 04 xff0c 安装ROS 2 基础学习 需要C 43 43 和python基础 xff0c 和ROS的基础知识 xff0c 网上有很多教程 xff0c 推荐知乎大佬教程 xff1a 我的
  • slambook2+ch7+pose_estimation_2d2d+估计多张图像之间的位姿

    算法 计算第一张图和第二张图的关键点并匹配以第一张图的相机坐标为世界坐标 xff0c 计算第二张图相对第一张图的旋转矩阵 平移矩阵不断更新第一张图 xff0c 在进行第二次计算时 xff0c 以第二张图为第一张图 xff0c 以第二张图的相
  • 重做Unbuntu 18.0.43 LTS系统 并为SLAM配置环境

    目录 前言 一 安装列表 1 Ubuntu 18 0 43 LTS 1 0 A 搜狗输入法 1 0 B ibus输入法安装 1 1 更换软件源 1 2 安装vim curl等工具 1 3 安装浏览器Chrome git等 1 4 安装g 4
  • PostMan各个版本下载

    打开地址 xff1a https gitee com hlmd PostmanCn
  • 快速解决matlab出现错误使用mex,未找到支持的编译器或 SDK的提示

    matlab mex命令提示找不到编译器或SDK 参考博客 xff1a https blog csdn net cfqcfqcfqcfqcfq article details 63295746 utm source 61 blogxgwz1
  • linux 串口应用层API

    include lt termios h gt struct termios oldtio newtio fd 61 open dev tty0 O RDWR O NOCTTY tcgetattr fd amp oldtio 获取终端参数
  • 2022年中国研究生数学建模竞赛B题-方形件组批优化问题

    一 背景介绍 智能制造被 中国制造2025 列为主攻方向 而个性化定制 更短的产品及系统生命周期 互联互通的服务模式等成为目前企业在智能制造转型中的主要竞争点 以离散行业中的产品为例 xff0c 如电子器件 汽车 航空航天零部件等 xff0
  • 无线网络知识、WiFi原理

    无线网络 B站链接 一 电磁波的传输 电磁波传播方式 地波 xff08 低于2MHZ xff09 天波 2MHZ 30MHZ 直线波 30MHZ以上 电磁波的发射与接收装置 天线 作用 xff1a 将电磁波辐射到空间中或收集电磁波 辐射模式
  • yolov5输出检测到的目标坐标信息

    找到detect py文件 span class token keyword for span span class token operator span xyxy span class token punctuation span co
  • TCP之 select模型

    前记 xff1a select模型主要用于解决tcp通信中 xff0c 每次处理一个独立的客户都要单独的开线程 xff0c 这样会导致客户连接数很大时 xff0c 线程数也会很多 而使用select就会将线程缩减至2个 xff0c 一个主线
  • ROS入门:GPS坐标转换&Rviz显示轨迹

    GPS信息是无法直接绘制轨迹的 xff0c 因为其x xff0c y为经纬度 xff0c z为高度 xff0c 单位不一样 xff0c 本程序实现了以下功能 xff1a 1 将GPS轨迹 xff0c 从经纬度WGS 84坐标转换到真实世界x
  • ubuntu实用技巧

    ubuntu 截图 xff03 保存到图片文件夹 Print Screen 截取整个桌面 Alt 43 Print Screen 截取选中的窗口 Shift 43 Print Screen 自由选区 xff03 复制到剪贴板 Ctrl 43
  • 在ThinkPad X280加装M.2硬盘上安装 Ubuntu 18.04.3 填坑记录

    填坑背景 用了一段时间的X280后 xff0c 突然想在M 2接口上加装一个 NVMe 2242 的SSD xff0c 发现 Lenovo 的BIOS设置的非常奇特 能够检测到这个硬盘 xff0c 但是启动项里就是不能识别 xff01 或许