UEFI用来替代传统BIOS引导操作系统,学会修改UEFI启动项也变得十分重要,UEFI全称为:“统一的可扩展固件接口”(Unified Extensible Firmware Interface),目前新购入的计算机都支持UEFI固件,若是需要启动传统MBR设备,则需开启CSM(Compatibility Support Module)。关闭CSM则变成纯UEFI启动,且完全支持安全启动。Secure Boot(安全启动),安全启动仅适用于使用UEFI启动的操作系统。如果电脑要启动不完全支持UEFI的设备,就必须关闭Secure Boot,然后打开CSM。如Win7系统,必须开启CSM兼容模式。Windows8及以上都能很好的支持UEFI,而为了设置系统引导,必须要管理UEFI启动项。

在国内个人物理机直接安装Linux系统时,一般都会再安装个Windows系统实现双系统,这样有时候就会出现系统启动项丢失的情况多为Linux系统

解决方法就是使用efibootmgr命令添加启动项,而在Windows下可以使用EasyUEFI这个软件。

1、如果系统丢失Linux启动项,如果是双系统就只能进入Windows,但是我不喜欢用EasyUEFI,这时可以选择一个Linux liveCD系统,如Ubuntu,
将Ubuntu liveCD 刻录成U盘启动,如果刻录成光驱启动系统会很慢。

2、在Ubuntu(非liveCD)下我使用efibootmgr命令,显示如下:

pipci@ubuntu:~$ efibootmgr
BootCurrent: 0012
Timeout: 0 seconds
BootOrder: 0012,0010,0011,000F,000B,000A,0006,0007,0008,0009,000C,000D,000E
Boot0000  Setup
Boot0001  Boot Menu
Boot0002  Diagnostic Splash Screen
Boot0003  Lenovo Diagnostics
Boot0004  Rescue and Recovery
Boot0005  Startup Interrupt Menu
Boot0006* USB CD
Boot0007* USB FDD
Boot0008* ATAPI CD0
Boot0009* ATAPI CD1
Boot000A* ATA HDD0
Boot000B* ATA HDD1
Boot000C* ATA HDD2
Boot000D* USB HDD
Boot000E* PCI LAN
Boot000F* Windows Boot Manager
Boot0010* ubuntu
Boot0011* ubuntushim
Boot0012* opensuse-secureboot
pipci@ubuntu:~$

列表还是很直观的显示了当前启动项,启动超时,EFI启动顺序,0012是第一启动项对应的是opensuse系统,0011是第二启动项对应ubuntu系统这个是我手动添加的,
000F是四启动项对应的Windows系统。

3、查找系统启动文件,每个系统都会在EFI分区建立自己的启动文件。

pipci@ubuntu:~$ sudo fdisk -l      #产看EFI所在分区

设备           Start    末尾    扇区  Size 类型
/dev/sdb1       2048    206847    204800  100M EFI System                   #EFI所在分区                  
/dev/sdb2     206848    468991    262144  128M Microsoft reserved
/dev/sdb3     468992  83888127  83419136 39.8G Microsoft basic data
/dev/sdb4   83888128  92276735   8388608    4G Microsoft basic data
/dev/sdb5   92276736 176168959  83892224   40G Microsoft basic data
/dev/sdb6  176168960 254294015  78125056 37.3G Linux filesystem
/dev/sdb7  254294016 262682623   8388608    4G Linux filesystem
/dev/sdb8  262682624 468860927 206178304 98.3G Microsoft basic data
pipci@ubuntu:~$

4、挂在EFI分区

pipci@ubuntu:~$ sudo mount /dev/sdb1 /mnt/      #挂载EFI分区到/mnt目录

5、进入EFI分区
pipci@ubuntu:~$ cd /mnt/
bash: cd: /mnt/: 权限不够
pipci@ubuntu:~$ sudo -i                #以root用户身份运行一个登录 shell
root@ubuntu:~# cd /mnt/

6、产出EFI分区
root@ubuntu:/mnt# ls
EFI

7、进入EFI目录,查看

root@ubuntu:/mnt# cd EFI/
root@ubuntu:/mnt/EFI# ls
Boot  Microsoft  opensuse  ubuntu           #可以看出安装的系统
root@ubuntu:/mnt/EFI#

8、查看EFI下各目录内容:
root@ubuntu:/mnt/EFI# ls Boot/
bootx64.efi
root@ubuntu:/mnt/EFI# ls Microsoft/
Boot
root@ubuntu:/mnt/EFI# ls opensuse/
boot.csv  grub.cfg  grub.efi  grubx64.efi  MokManager.efi  shim.efi
root@ubuntu:/mnt/EFI# ls ubuntu/
fw  fwupx64.efi  grub.cfg  grubx64.efi  mmx64.efi  shimx64.efi
root@ubuntu:/mnt/EFI#

9、添加启动项

root@ubuntu:~# efibootmgr -c -w -L "BootOptionName" -d /dev/sda -p 1 -l \\EFI\\Boot\\bootx64.efi

其中BootOptionName替换成你设定的名字,-d后面是启动分区所在的硬盘(默认为/dev/sda),-p后面是分区位置(默认为1),-l是启动efi文件的路径。
这样就添加了EFI启动项。
举例:
root@ubuntu:~# efibootmgr -c -w -L "BootOptionName" -d /dev/sdb -p 1 -l \\EFI\\Boot\\bootx64.efi    #我的启动分区所在的硬盘为/dev/sdb
BootCurrent: 0012
Timeout: 0 seconds
BootOrder: 0013,0012,0010,0011,000F,000B,000A,0006,0007,0008,0009,000C,000D,000E
Boot0000  Setup
Boot0001  Boot Menu
Boot0002  Diagnostic Splash Screen
Boot0003  Lenovo Diagnostics
Boot0004  Rescue and Recovery
Boot0005  Startup Interrupt Menu
Boot0006* USB CD
Boot0007* USB FDD
Boot0008* ATAPI CD0
Boot0009* ATAPI CD1
Boot000A* ATA HDD0
Boot000B* ATA HDD1
Boot000C* ATA HDD2
Boot000D* USB HDD
Boot000E* PCI LAN
Boot000F* Windows Boot Manager
Boot0010* ubuntu
Boot0011* ubuntushim
Boot0012* opensuse-secureboot
Boot0013* BootOptionName

通过上面的操作可以看出已经添加了 BootOptionName这个启动项,编号是0013,BootOrder:处可以看出已经成为第一启动项。

如果是Linux系统启动项丢失不要添加/EFI/Boot/bootx64.efi这个启动项,因为这个文件可能被Windows系统替换,添加后会直接进入Windows系统,
不能进入GRUB引导程序,可以尝试添加/EFI/opensuse/ 目录下的grubx64.efi  grub.efi  shim.efi MokManager.efi 等文件,每个Linux发行版
对应的目录下的文件可能不一样,根据实际情况添加,我的电脑安装了3个系统,安装顺序为Windows Ubuntu openSUSE,所以要添加最后安装的那个
系统对应的启动文件,因为最后安装的系统的GRUB才会把前面系统添加进去,才可以通过一个GRUB管理多个系统。

10、删除启动项的命令为:

root@ubuntu:~# efibootmgr -b 0013 -B      #删除刚才添加的BootOptionName启动项,对应的编号为0013
BootCurrent: 0012
Timeout: 0 seconds
BootOrder: 0012,0010,0011,000F,000B,000A,0006,0007,0008,0009,000C,000D,000E
Boot0000  Setup
Boot0001  Boot Menu
Boot0002  Diagnostic Splash Screen
Boot0003  Lenovo Diagnostics
Boot0004  Rescue and Recovery
Boot0005  Startup Interrupt Menu
Boot0006* USB CD
Boot0007* USB FDD
Boot0008* ATAPI CD0
Boot0009* ATAPI CD1
Boot000A* ATA HDD0
Boot000B* ATA HDD1
Boot000C* ATA HDD2
Boot000D* USB HDD
Boot000E* PCI LAN
Boot000F* Windows Boot Manager
Boot0010* ubuntu
Boot0011* ubuntushim
Boot0012* opensuse-secureboot

11、删除多余的启动项从新查看启动项:
root@ubuntu:~# efibootmgr
BootCurrent: 0012
Timeout: 0 seconds
BootOrder: 0012,0010,0011,000F,000B,000C,000D
Boot0000  Setup
Boot0001  Boot Menu
Boot0002  Diagnostic Splash Screen
Boot0003  Lenovo Diagnostics
Boot0004  Rescue and Recovery
Boot0005  Startup Interrupt Menu
Boot000B* ATA HDD1
Boot000C* ATA HDD2
Boot000D* USB HDD
Boot000F* Windows Boot Manager
Boot0010* ubuntu
Boot0011* ubuntushim
Boot0012* opensuse-secureboot

12、修改boot 顺序
root@ubuntu:~# efibootmgr -o 0012,0010,0011,000F,000D,000C,000B    
BootCurrent: 0012
Timeout: 0 seconds
BootOrder: 0012,0010,0011,000F,000D,000C,000B
Boot0000  Setup
Boot0001  Boot Menu
Boot0002  Diagnostic Splash Screen
Boot0003  Lenovo Diagnostics
Boot0004  Rescue and Recovery
Boot0005  Startup Interrupt Menu
Boot000B* ATA HDD1
Boot000C* ATA HDD2
Boot000D* USB HDD
Boot000F* Windows Boot Manager
Boot0010* ubuntu
Boot0011* ubuntushim
Boot0012* opensuse-secureboot
root@ubuntu:~#

通过efibootmgr -o 命令将000B和000D调换,如果要设置第一启动,把相应的编号放到命令后的最前面,如上面的0012

用efibootmgr管理UEFI启动项,添加丢失的启动项的更多相关文章

  1. UEFI启动视频详解:启动分析+N项操作实例

    ============================================================= ※※※※最给力的视频解说※※※※ 2011hiboy全部共享资料:立刻去   ...

  2. 为win7添加ubuntu的启动引导项

    利用MBRFix删除ubuntu的开机引导界面,恢复成win7引导之后,为win7添加ubuntu的启动引导项: 直接利用EasyBCD添加一个Grub2的引导项即可 参考:http://mathis ...

  3. win10应用程序添加到开机启动项的两种解决办法

    原文 win10应用程序添加到开机启动项的两种解决办法 在windows10系统中,如果想让应用程序在开机之后自动运行起来,可以怎么做呢? 方法一: 1.首先创建应用程序的快捷方式 找到自己想加入开机 ...

  4. 使用GRUB 添加新的启动项 (menu entry)

    GRUB版本: Grub2 基础知识: 相关的文件和目录结构: A./etc/grub.d/ 上图中有一个40_custom的脚本: 可以通过修改40_custom脚本来加入自定义的启动项. B./e ...

  5. win10启动项添加方法

    1.添加或删除启动文件夹下的快捷方式实现开机自启动 我们可以直接将应用软件的快捷方式拖到启动文件夹里,下次开机时便会自动运行这些软件. 不需要开机启动某些软件了就将启动文件夹里的该软件的快捷方式删除掉 ...

  6. .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加

    在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...

  7. 每日学习心得:SharePoint 2013 自定义列表项添加Callout菜单项、文档关注、SharePoint服务端对象模型查询

    前言: 前一段时间一直都比较忙,没有什么时间进行总结,刚好节前项目上线,同时趁着放假可以好好的对之前遇到的一些问题进行总结.主要内容有使用SharePoint服务端对象模型进行查询.为SharePoi ...

  8. redis 3.2.5单机版安装、使用、systemctl管理Redis启动、停止、开机启动

    参照地址 http://www.mamicode.com/info-detail-1488639.html 前提:防火墙安装,然后打开端口,设置开机启动 一.redis源码安装 [root@host- ...

  9. 如何添加Tomcat为启动服务

    tomcat8.0, 可以用startup.bat启动, 但注销又不能启动服务,但现在的系统不知出了什么问题 ? 答 1.我这个是zip版本的,所以里面有一个service.bat的文件,所以很简单 ...

随机推荐

  1. STM32中assert_param的使用

    在STM32的固件库和提供的例程中.到处都能够见到assert_param()的使用. 假设打开不论什么一个例程中的stm32f10x_conf.h文件,就能够看到实际上assert_param是一个 ...

  2. Linux硬链接和软链接的差别

    1.硬链接文件和原文件指向相同的数据,两者就像克隆一样,inode号也相同,当删除原 文件时. 硬链接文件仍然存在有效. 但硬链接文件不同于文件的复制.应该说硬链接文件的产生仅仅是原文件所 在文件夹文 ...

  3. [数位dp] bzoj 3209 花神的数论题

    题意:中文题. 思路:和普通数位dp一样,这里转换成二进制,然后记录有几个一. 统计的时候乘起来就好了. 代码: #include"cstdlib" #include"c ...

  4. JavaWeb利用cookie记住账号

    JavaWeb利用cookie记住账号. 首先,来看看界面什么样子. 记住账号最普遍的做法,就是在点击登录时,将账号保存到cookie中. 材料准备 <script src="${ct ...

  5. 全栈JavaScript之路(十一)学习 Attr 类型 节点

    元素的特性在DOM 中用Attr 类型的节点表示.在全部浏览器中都能够訪问 Attr 类型的构造函数与原型. 从技术上讲,Attr 类型节点 就是指,元素的 Attrbutes 属性 中的节点.构造器 ...

  6. SqlServer 错误日志切换和查看

    Sql Server 日志 和 代理错误日一般在实例重新启动后自己主动切换,假设实例久未重新启动,将可能积累太多的日志,不方便查看. 查看错误日志大小: --查看日志大小 EXEC xp_enumer ...

  7. Android新手入门2016(14)--FragmentTabHost实现选项卡和菜单

    本文来自肥宝传说之路,引用必须注明出处! 这章憋了好久.本来想写选项卡的,学到TabHost,TabWidget的,把代码拿过来准备研究的时候,发现竟然在4.0.3版本号被废弃了. 百度一下,发如今后 ...

  8. POJ 1012 Joseph(打表题)

    题意:约瑟夫环的变形.要求寻找到一个杀人循环节m使后半节的坏人先被所有杀光. 直接链表模拟出结果,再打表即可: 代码:(凝视的是打表码) #include<iostream> #inclu ...

  9. 如何解读「量子计算应对大数据挑战:中国科大首次实现量子机器学习算法」?——是KNN算法吗?

    作者:知乎用户链接:https://www.zhihu.com/question/29187952/answer/48519630 我居然今天才看到这个问题,天……本专业,有幸听过他们这个实验的组会来 ...

  10. 8.ES6测试

    转自:http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html 如果测试脚本是用ES6写的,那么运行测试之前,需 ...