填坑背景

用了一段时间的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)

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

  1. 从硬盘中安装ubuntu 18,04

    在easyBCD 软件中,配置neoGrub,文本如下 title Install Ubuntu  root (hd0,0)  kernel (hd0,0)/vmlinuzi boot=casper ...

  2. ThinkPad X1 Carbon 安装Ubuntu 18.04到移动硬盘 教程指南

    ThinkPad X1 Carbon 安装Ubuntu 18.04到移动硬盘 教程指南 安装准备 步骤 下载ubuntu 制作启动盘 关闭Win系统快速启动 设置移动硬盘 设置BIOS 安全启动设置 ...

  3. 记一次安装 ubuntu 18.04 双系统 (双硬盘)

    安装 ubuntu 18.04 奉劝那些没装双系统的都装装,昨天一个晚上+今天一个早上+一会下午就弄完了.虽然感觉不是百分百弄完了,但是起码可以用了- 简明要点 就直接说要点了,大话就不聊了.同时默认 ...

  4. win10环境向移动固态硬盘安装Ubuntu 18.04.3 LTS系统(即插即用)

    win10环境向移动固态硬盘安装Ubuntu 18.04.3 LTS系统(即插即用) 一.从官网下载ubuntu18镜像 地址:https://ubuntu.com/download/desktop ...

  5. 戴尔(Dell)G3 3579(128 GB 固态硬盘+1 TB 机械硬盘)安装Ubuntu 16.04 LTS单系统(不是双系统,只装Ubuntu)

    Table of Contents 硬件: 目标: 步骤: 1. 关于系统盘(在另外一台机子上操作U盘文件) 2. BIOS设置 3.安装系统 4. 安装完成后注意事项 5. 附安装过程中遇到的错误( ...

  6. VMware安装Ubuntu 18.04虚拟机(镜像下载、硬盘分区、创建虚拟机、安装系统、桥接模式网络配置)

    1. VMware安装 安装VMware,Player免费,而且功能足够个人开发使用.(Pro的主要区别在于可以同时运行多个虚拟机,而Player只能同时运行一个) VMware Workstatio ...

  7. 通用pe 装linux系统,U盘“安装”Ubuntu 14.04操作系统详细教程(转)

    Ubuntu是目前主流的Linux桌面操作系统,学习Linux系统的新手首选也是Ubuntu 系统.下面"孤狼"就以最新版的Ubuntu 14.04.1为例,制作U盘启动安装的详细 ...

  8. ubuntu服务器接入两块系统盘,两块硬盘Raid0安装ubuntu server11.04

    身边有不少的破电脑,闲置的硬盘,这几天端午节放假,便凑活了一下自己组了一台双硬盘的 PC,废话不多说了,想用这台电脑做个文件服务器,所以想起来做个 raid0 来. 思路:对 Raid0 的理解就是两 ...

  9. xps15u盘装linux,Dell XPS 15 9560 安装 Ubuntu 18.04

    按照这个教程https://github.com/yxrdydh/dell-xps-9560-ubuntu-respin,找一个linux机器或者使用虚拟机制作启动U盘,不然直接制作启动U盘,会卡死在 ...

最新文章

  1. springboot 订单重复提交_Spring Boot (一) 校验表单重复提交
  2. 3dmax导出fbx时如何带贴图_houdini | 第一章 第三节 贴图与顶点动画
  3. php mysql 查询 where_PHP MySQL Where 子句
  4. TPL中Task执行的内联性线程重入
  5. Qt修炼手册6_图形:图形视图框架
  6. Linux c中使用系统时间
  7. 【zabbix】安装、配置agent,配置被监控端
  8. 【三种解法】剑指 Offer 06. 从尾到头打印链表【附完整可运行代码】
  9. 计算机世界的虚拟机,容器和医学界的人工硬脑膜
  10. Thinkphp5.0 阿里云OSS扩展类上传示例(轮子)
  11. Android 系统(135)---Android anr 分析步骤总结
  12. android传感器_Android传感器
  13. 字符集_一文搞清楚unicode字符集的三种实现方式
  14. 【2016.4.6】结对编程 第二章 基础设计
  15. JAVA基础(1/17)-JAVA语言概述
  16. Windows电脑把蓝牙耳机识别成未知设备怎么办?(无法识别蓝牙耳机)
  17. 2019年nodejs凉了吗?凉到什么程度了?
  18. 海外自媒体多账号运营注意事项看这里!
  19. macOS Ventura 13.1 系统问题:掉电快 充电慢
  20. 笔记本电脑很久没用键盘不灵解决方案

热门文章

  1. Codeforces 19E Fairy
  2. Qt中UI线程与子线程的交互
  3. 计算机动画算法与编程基础pdf,清华大学 计算机动画算法与编程基础2-图形绘制课件.ppt...
  4. win10+ubuntu的坑
  5. EarlyStopping早停法的实现原理
  6. python来判断三角形的性质
  7. mPEG-Tert 甲氧基PEG叔丁酯
  8. Adaptive AUTOSAR (AP) 平台设计(6)——通信管理
  9. zt陈辉生:登陆澳洲两周年记
  10. 解读电商平台10大促销活动类型