UEFI安装没有/boot/efi挂载点,导致无法启动
Tofloor
poster avatar
Feng Yu
deepin
2015-07-29 22:20
Author
目标主机是一台dell的商用机Dell OptiPlex 7010,在BIOS中设置boot顺序为UEFI时,发现深度安装器并不会自动建立/boot/efi这个挂载点,只有一个/挂载点,导致重启的时候提示找不到引导项什么的。必须开机的时候按F12,在引导菜单中选择硬盘引导才可以正确引导。

我测试发现这个问题不只是deepin安装器有这个问题,ubuntu的安装器也是一样,选择清除整个硬盘并安装ubuntu这个选项,也不会检测到UEFI,只会分一个/和swap,效果一样。只能使用legacy模式引导

不知道这是什么问题。
Reply Favorite View the author
All Replies
lcw0268
deepin
2015-07-29 23:06
#1
沙发支持楼主。
不敢在楼主面前现丑,说说我的安装凑巧遇到的事,看看能不能提醒楼主。我都是光盘安装,debian光盘可以安装uefi引导,好像分了一个区专门存储efi文件的,我用deepin光盘重装,没有格那个efi区,deepin也可以uefi启动了,快的很,bios都不容易进入了。而同一个debian镜像,用deepin的U盘工具制作的安装U盘,就没有UEFI安装这回事了。搞不明白。
Reply View the author
Feng Yu
deepin
2015-07-29 23:48
#2
我似乎知道是为什么了,使用的是yumi烧录的U盘,yumi使用的是BIOS模式引导,而且官方FAQ写的是不支持UEFI。
猜测可能是这个问题导致的,U盘引导系统安装,U盘使用Legacy启动,那么安装的时候好像就无法选择UEFI,所以安装的时候按照Legacy模式安装了。
问下折腾过grub的大神们,这种情况下有可能手工将grub安装为UEFI模式么?我看是增加了/boot/efi这个挂载点,但是手工加上去之后安装完系统这里面什么文件都没有
Reply View the author
MattD
deepin
2015-07-30 00:41
#3
https://bbs.deepin.org/post/31672
我似乎知道是为什么了,使用的是yumi烧录的U盘,yumi使用的是BIOS模式引导,而且官方FAQ写的是不支持UEFI。 ...

可以啊,grub-install时候把target指定为x86_64-efi,同时也指定ESP路径和grub的ID
  1. grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=deepin --recheck
Copy the Code
或者极端一点,直接efi-stub
Reply View the author
Feng Yu
deepin
2015-07-30 01:13
#4
本帖最后由 abcfy2 于 2015-7-29 17:19 编辑
https://bbs.deepin.org/post/31672
可以啊,grub-install时候把target指定为x86_64-efi,同时也指定ESP路径和grub的ID
或者极端一点,直接efi ...

哦,多谢,下次试试看。
问下,按照这样方式安装,就会在/boot/efi生成efi文件了吗?
efi-stub这个是什么?在哪个包里?apt-cache search没发现这个包
Reply View the author
MattD
deepin
2015-07-30 01:31
#5
https://bbs.deepin.org/post/31672
哦,多谢,下次试试看。
问下,按照这样方式安装,就会在/boot/efi生成efi文件了吗?
efi-stub这个是什么 ...

对,指定target=x86_64-efi的作用就是生成efi并复制到指定的ESP路径。
efi stub是内核功能,允许UEFI固件直接把Linux内核作为efi可执行文件来加载,免去bootloader这个中间环节。
Reply View the author
Feng Yu
deepin
2015-07-30 02:20
#6
https://bbs.deepin.org/post/31672
对,指定target=x86_64-efi的作用就是生成efi并复制到指定的ESP路径。
efi stub是内核功能,允许UEFI固件 ...

efi stub看样子有点复杂,看了下askubuntu上的回答,要手工拷贝内核文件和建立软链接,然后做其他操作。先玩好grub-install吧。但是目前有报错:

  1. sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=deepin --recheck   
  2. Installing for x86_64-efi platform.
  3. Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
  4. Try 'modprobe efivars' as root.
  5. Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
  6. Try 'modprobe efivars' as root.
  7. Installation finished. No error reported.
Copy the Code
Reply View the author
MattD
deepin
2015-07-30 03:01
#7
https://bbs.deepin.org/post/31672
efi stub看样子有点复杂,看了下askubuntu上的回答,要手工拷贝内核文件和建立软链接,然后做其他操作。 ...

Ubuntu有喜欢随意拆包的坏习惯,efi支持需要安装grub-efi包。
Reply View the author
Feng Yu
deepin
2015-07-30 05:02
#8
本帖最后由 abcfy2 于 2015-7-29 21:04 编辑
https://bbs.deepin.org/post/31672
Ubuntu有喜欢随意拆包的坏习惯,efi支持需要安装grub-efi包。

这个已经装了,否则报错就是没有x86_64-efi这个target

我发现我还有很多操作不对,在BIOS中检测不到EFI分区,明明已经是fat32格式化了,设置了boot flag,但在UEFI引导菜单就是看不到。使用gdisk分区的时候还有警告,无法转换为gpt分区什么的。反正MBR方式转GPT问题还有很多。还得重新折腾
Reply View the author
xliang9550
deepin
2015-07-30 06:06
#9
我用的是最笨的方法:从EFI Shell手动引导系统。
Reply View the author
Feng Yu
deepin
2015-07-30 06:25
#10
https://bbs.deepin.org/post/31672
我用的是最笨的方法:从EFI Shell手动引导系统。

连efi文件还没生成呢,怎么手动引导?
Reply View the author
MattD
deepin
2015-07-30 06:36
#11
https://bbs.deepin.org/post/31672
这个已经装了,否则报错就是没有x86_64-efi这个target

我发现我还有很多操作不对,在BIOS中检测不到EFI分 ...

仔细看了下你的报错,是在chroot环境操作的?没挂载/proc和/sys?
但是最后并没有安装失败的提示。
MBR转GPT并没有特殊要求,只要磁盘首尾各留有1MiB的自由空间即可。UEFI很大程度上取决于厂商对UEFI标准的遵循程度,曾经遇到过多款UEFI主板都有不同程度的缺陷,有的是不识别Linux的boot entry,无论怎么设置都只能识别到一个Windows Boot Manager,有的是UEFI模式和CSM无法同时启用,有的是虽然支持UEFI,但就是无法以UEFI模式引导Linux。
Reply View the author
Feng Yu
deepin
2015-07-30 06:48
#12
本帖最后由 abcfy2 于 2015-7-29 22:51 编辑
https://bbs.deepin.org/post/31672
仔细看了下你的报错,是在chroot环境操作的?没挂载/proc和/sys?
但是最后并没有安装失败的提示。
MBR转 ...

非chroot,在legacy模式引导下这样装的。最后的确没有失败提示,但是同样/boot/efi下没有生成grub.cfg这样的文件,只有一个linux64.efi文件。我在虚拟机下用ubuntu uefi安装,对比了下这个目录,下面应该是有一个grub.cfg和3个efi文件的。
最主要的是,在BIOS中显示不出来这个efi分区,怀疑是没有将/boot/efi标记为EFI,google了一下似乎只有用gdisk标记的操作,但是使用gdisk会报错分区表有问题,无法保存。看了下parted和gparted,没找到可以标记分区的选项。
Reply View the author
MattD
deepin
2015-07-30 07:05
#13
https://bbs.deepin.org/post/31672
非chroot,在legacy模式引导下这样装的。最后的确没有失败提示,但是同样/boot/efi下没有生成grub.cfg这样 ...

grub.cfg不必要放在ESP,我的就是仍然放在/boot/grub下,ESP里面只有一个grubx64.efi。
而且我也无法理解“BIOS中不显示efi分区”指的是什么,我并没有对我的ESP做特殊处理,只是一开始安装时候就用gdisk分了一个ID为EF00的分区,之后就是正常的挂载ESP和安装grub。
前面也提过,主板厂商未必严格实施UEFI标准,如果你指的是UEFI Boot Manager无法正确识别你所标记的grub boot entry,那应该考虑是否是主板本身的缺陷。
另一种方法,用efibootmgr手动建立一个boot entry。
无论采用何种方法,包括10楼提到的用UEFI shell来执行efi文件,最终目的都只不过是让UEFI固件能够正确执行ESP里面的efi而已。
Reply View the author
isunny
deepin
2015-07-30 07:22
#14
本帖最后由 isunny 于 2015-7-29 23:28 编辑

首先,声明以下回答只是经验,没有太多正确性,如有错误,欢迎指正,也让我可以更正自己的认知,谢谢,只是希望可以帮到楼主。

我想问下   楼主  你的分区表 是gpt  的吗?  gpt 的第一分区  就是  efi 分区

efi  分区好像  esp  分区吧 ?  而且默认就是fat32类型分区    默认不会被挂载   也不会被分配 卷标或者 盘符    里面存储系统的启动文件  主要为 efi 启动文件

   我只会 win下的  diskpart  分区


  1. diskpart-------------------------------------------------------------------
  2. 打开diskpart工具
  3. list disk----------------------------------------------------------------列出系统拥有的磁盘
  4. select disk 0-----------------------选择0号磁盘,请根据磁盘大小,自行判断你的目标磁盘
  5. clean----------------------------------------------清除磁盘,该命令会抹去磁盘上所有数据
  6. convert gpt-------------------------------------------------将磁盘转换为GPT格式
  7. list partition--------列出磁盘上的分区,因为我们刚转换成GPT格式,因此,分区为空
  8. create partition efi size=200------------------建立EFI分区,安装mac需大于200M
  9. create partition msr size=128-----------------------------MSR分区,微软默认128M
  10. create partition primary size=50000---------------建立主分区,自己调整,安装win7
  11. list partition-------------------------------------------------列出磁盘上的分区
Copy the Code


另外支持uefi的主板  想要使用uefi方式引导linux   就必须使用 uefi 引导 u 盘安装

而u 盘制作方法   就是直接解压系统镜像 iso 中的文件 至 u 盘 根目录          u盘需要为fat32格式化过的  才支持uefi 引导

当然系统镜像也要支持uefi 引导才可以的,就是iso根目录 有 efi 文件夹  文件夹里面有相应的efi引导文件

然后f12 在启动菜单里面选择带uefi的那个选项   安装后就会自动安装相应的efi启动文件到 efi 分区  并且在bios里面添加相应 系统引导菜单
Reply View the author
Feng Yu
deepin
2015-07-30 17:56
#15
https://bbs.deepin.org/post/31672
grub.cfg不必要放在ESP,我的就是仍然放在/boot/grub下,ESP里面只有一个grubx64.efi。
而且我也无法理解 ...

dell的这个型号是可以手工选择efi文件引导的,选择UEFI的时候右边有Add boot menu可以手工选择efi文件,但是我这边点击的话提示没有分区。应该是没有识别到ESP。

猜测应该是上面那位说的,以前是MBR分区模式,不是GPT,所以使用gdisk的时候有分区警告,而且无法保存为GPT,看来需要重装了,下次先用gdisk手工分区之后再用深度安装器安装
Reply View the author
Feng Yu
deepin
2015-07-30 18:02
#16
https://bbs.deepin.org/post/31672
首先,声明以下回答只是经验,没有太多正确性,如有错误,欢迎指正,也让我可以更正自己的认知,谢谢,只是 ...

你说的应该是对的。我去看了一下yumi的官方FAQ,写的就是暂不支持UEFI,所以U盘是用Legacy模式(MBR)烧录的,引导的时候需要按F12按照legacy模式选择USB引导启动。这种情境下安装器并不会识别到系统主板选择的是UEFI模式,和光盘安装是不一样的。所以需要手工分区,手工安装引导。

否则的话,我试过即时按照ESP的规范(Ubuntu官方文档写的,FAT32格式,boot flag,推荐200MB容量)挂载到/boot/efi也是没用的,而且分区也会按照MBR模式进行分区,使用gdisk检测的时候还会给你报警告。

因此我的想法是需要先用livecd按照GPT模式手工分区(gdisk, parted等支持GPT的分区工具分区),然后再用安装器安装,最后手工安装grub-efi,应该可以解决,今天找时间重装系统再折腾一下试试
Reply View the author
leozrb
deepin
2017-01-20 19:21
#17
deepin基于ubuntu设计的原因吧
Reply View the author