UEFI真有那么难理解?
Tofloor
poster avatar
woodelf
deepin
2014-06-20 19:05
Author
我发现不少已经在使用UEFI的用户,他们对UEFI的认识简直接近于无知……总是用传统MBR上那一套经验去理解UEFI,结果就是碰一鼻子灰。

boot manager和bootloader以及efi stub这些比较复杂的就不说了,很多人貌似连ESP的作用和挂载位置都搞不清(-__-)b

我翻译的那篇文章虽然没讲深入解释具体的细节,但是理解基本原理应该绰绰有余了。看来还是有必要把UEFI的基本知识普及一下。

本来想顺便有空翻译下UEFI规范,不过太长了……
Reply Favorite View the author
All Replies
xliang9550
deepin
2014-06-20 20:04
#1
既然阁下来了,学生有些问题不明,还望不吝赐教。

本人的计算机原来安装的是Mint 14.1单系统,启动正常,启动项名称为linuxmint。后来添加了一块SSD安装了正版Windows 7,然后对原来的HDD重新分区之后安装了Mint 17。(之间有一个插曲,同时存在多个ESP的时候,Windows 7的安装程序无法正常继续)

安装Mint 17的时候只划分了/和swap,根分区采用xfs文件系统,重启之后不能正常启动,进入grub的命令行界面。重新安装一次,选择ext4文件系统,其余设置不变,重启正常,启动项名称为ubuntu。然后会进入一个选择操作系统的界面, 可以选择Mint或Windows 7。我返回Windows系统下执行了一些操作,再次重启就直接进入Windows了。开机时按下F11也没有出现ubuntu的启动项。后来就只能在EFI Shell下进入现有的Linux系统。我注意到ESP分区的EFI目录下面除了Microsoft、ubuntu还有一个boot文件夹,里面有一个bootx64.efi,这个文件其实就是Windows 7的引导程序。我暂时没有测试如果用Linux的引导程序将其替换会有什么结果。

现在的问题:(一时总结不完,先问这些吧)
1,老的linuxmint启动项一直存在,不知如何删除(主板的UEFI设置程序中好像没有这个功能)
2,ESP分区下的/efi/boot/bootx64.efi是否是由Windows系统自动创建的,使得每次都默认进入Windows
3,初次使用xfs格式化根分区启动不成功是否和文件系统有关(如果划分出独立的/boot分区使用ext格式化会如何,尚未尝试)
4,如果可能,如何恢复UEFI启动选单中的ubuntu启动项
Reply View the author
woodelf
deepin
2014-06-20 20:33
#2
既然阁下来了,学生有些问题不明,还望不吝赐教。

本人的计算机原来安装的是Mint 14.1单系统,启动正常,启动项名称为linuxmint。后来添加了一块SSD安装了正版Windows 7,然后对原来的HDD重新分区之后安装了Mint 17。(之间有一个插曲,同时存在多个ESP的时候,Windows 7的安装程序无法正常继续)

安装Mint 17的时候只划分了/和swap,根分区采用xfs文件系统,重启之后不能正常启动,进入grub的命令行界面。重新安装一次,选择ext4文件系统,其余设置不变,重启正常,启动项名称为ubuntu。然后会进入一个选择操作系统的界面, 可以选择Mint或Windows 7。我返回Windows系统下执行了一些操作,再次重启就直接进入Windows了。开机时按下F11也没有出现ubuntu的启动项。后来就只能在EFI Shell下进入现有的Linux系统。我注意到ESP分区的EFI目录下面除了Microsoft、ubuntu还有一个boot文件夹,里面有一个bootx64.efi,这个文件其实就是Windows 7的引导程序。我暂时没有测试如果用Linux的引导程序将其替换会有什么结果。

现在的问题:(一时总结不完,先问这些吧)
1,老的linuxmint启动项一直存在,不知如何删除(主板的UEFI设置程序中好像没有这个功能)
2,ESP分区下的/efi/boot/bootx64.efi是否是由Windows系统自动创建的,使得每次都默认进入Windows
3,初次使用xfs格式化根分区启动不成功是否和文件系统有关(如果划分出独立的/boot分区使用ext格式化会如何,尚未尝试)
4,如果可能,如何恢复UEFI启动选单中的ubuntu启动项
1、这个是由UEFI固件本身的配置程序管理的,这些启动选项的配置存放在UEFI固件的NVRAM中,而不是在硬盘上,所以只能从UEFI固件界面进行配置。具体的选项应该是类似boot option这样的选项。我的UEFI主板就可以自行添加和删除boot option。如果想要从操作系统层管理,在Windows可以使用easyUEFI,linux可以使用efibootmgr。
2、是的。根据UEFI规范,/efi/boot下面存放的bootx64.efi启动程序是备用的,以防OS vendor定义的其他子目录损坏。任何OS vendor都可以把自己的efi执行文件放在这里,但是每种计算机架构的名称必须是唯一的,比如对于x86,这里的efi文件名称只能是bootx64.efi和bootia32.efi这两种。
但是Windows却独自占用了这个目录,以确保自己的引导处在最优先的位置。也就是说,/efi/boot下的bootx64.efi是优先级最高的引导项。Windows真正的efi启动程序应该是/efi/microsoft/boot下面的bootmgfw.efi。
举个例子,假设我的磁盘名为STXXXXXX,我的UEFI启动项有这么几个:
Windows Boot Manager
ubuntu
UEFI: STXXXXXX
STXXXXXX
那么,在我选择从UEFI: STXXXXXX启动时,UEFI固件就会去找/efi/boot/bootx64.efi,并执行这个文件。如果我选择从Windows Boot Manager启动,那么UEFI就会执行/efi/microsoft/boot/bootmgfw.efi。
关于EFI目录的说明,具体可参考UEFI规范的12.3.1.3 Directory Structure一节。
3、grub2的行为有时候令人难以理解。以前在ZFS安装linux时,即使是同一个打了ZFS支持补丁的grub2版本,我在不同的发行版也遇到过不同的结果。因此只要是非ext的/分区,为了保险起见,我都会单独分一个ext的/boot。
4、如果你的UEFI主板不具有修改boot option的功能,大概只能在操作系统层重新管理或者删除/efi/boot。
还是那句话,UEFI规范就在那里,遵不遵守只能靠厂商自觉。
Reply View the author
oyanghome
deepin
2014-06-20 21:14
#3
电脑太久 用不到 哈哈 帮顶,,,,计划下一个 硬件上 minipc
Reply View the author
a287740928
deepin
2014-06-20 22:08
#4
其实很多人估计只想知道uefi模式下怎么把系统正常的安装上就够了。
Reply View the author
xliang9550
deepin
2014-06-21 09:07
#5
承蒙阁下赐教,看来学生在底下独立思考的时候也蒙对了一部分……

主板的UEFI设置程序中好像只能设置UEFI启动项的优先级,并没有自动检测ESP中存在的启动项或者手动设置的功能。也罢,尝试在作业系统下进行设置吧。毕竟每次都进入EFI Shell还是有些麻烦。

最后问一句,若干年后的UEFI会不会像现在的BIOS那样成熟和标准化?(最近几年新出的主板或笔记本整机仍有使用BIOS的)
Reply View the author
woodelf
deepin
2014-06-21 18:11
#6
承蒙阁下赐教,看来学生在底下独立思考的时候也蒙对了一部分……

主板的UEFI设置程序中好像只能设置UEFI启动项的优先级,并没有自动检测ESP中存在的启动项或者手动设置的功能。也罢,尝试在作业系统下进行设置吧。毕竟每次都进入EFI Shell还是有些麻烦。

最后问一句,若干年后的UEFI会不会像现在的BIOS那样成熟和标准化?(最近几年新出的主板或笔记本整机仍有使用BIOS的)
UEFI生来就比BIOS更成熟、更标准化。毕竟从Intel最初开发EFI,到现在为止,已经有20多年了。
但是和其他不少自由软件规范一样,UEFI只提供机制和协议,不提供具体的实现,也不对主板制造商进行强制约束,所以才导致目前的混乱情况。
我个人也很痛恨主板制造商随意修改和阉割UEFI功能,市面上几乎就找不到完全符合UEFI规范的主板。
所以还是那句话,UEFI的完整实现要靠厂商自觉遵守。
Reply View the author
xliang9550
deepin
2014-06-21 19:35
#7
看了一下,本人前年购入的一台华硕Zenbook Prime笔记本有添加删除EFI启动项的功能,说实话这还是第一次遇见。
Reply View the author