如何从EFI/UEFI启动Ubuntu?

我在新购买的联想ThinkCentre Edge 71(型号:1577-G3G)上安装了Ubuntu 11.10,并启用了EFI引导。我选择了“使用整个磁盘”的选项。尽管安装过程没有出现任何问题/错误,但重新启动后只显示:

没有可引导的操作系统。插入可引导的磁盘并按任意键...

我认为这是因为EFI的原因。

回归:

  • 我已经检查了系统设置(POST期间按F1),寻找禁用EFI / UEFI引导的BIOS选项,但对于这台机器来说没有这样的选项。
  • 这可能是BIOS中的“安全引导”功能引起的。
  • 硬件供应商不知道BIOS中是否有任何阻止Linux引导的“安全引导”设置。
  • 联想支持部门对名为“安全引导”的BIOS设置一无所知。他们也不知道有什么限制会阻止Linux引导。
  • ThinkCentre 1577 BIOS手册中没有提到EFI、UEFI或安全引导。
如何在使用EFI的计算机上安装Ubuntu? - 或者,如果Ubuntu已经安装:如何使其启动Ubuntu?

3由于Ubuntu已经成功安装,您只需要重新安装grub-efi即可。这就是我昨天所做的:http://superuser.com/q/372962/37511,请看一下。 - Maxime R.
我尝试按照您在superuser.com帖子中的指示操作,但Ubuntu仍无法启动 :( - ervingsb
你能给一些关于你的主题http://ubuntuforums.org/showthread.php?t=1901748的详细信息吗?哪些是有效的,哪些是无效的,是否有任何错误信息等等。 - Maxime R.
12个回答

这是nerasezi在Ubuntu论坛上修改过的帖子

UEFI的主要来源是Ubuntu UEFI指南

他所做的步骤如下:

  1. 使用与UEFI架构相匹配的Live CD。大多数是x86-64。 启动Live CD(xubuntu或lubuntu。这些都是轻量级桌面环境,但也可以使用Ubuntu和kubuntu)。

    确保您的Live系统以UEFI模式启动。您可以在UEFI设置中检查它,可能在“引导选项”或类似位置。在我的情况下,它只是在设备名称前加上了“UEFI”前缀。

  2. 一旦Live系统运行起来,在终端中通过输入以下命令设置root密码:
    sudo passwd root

    然后退出默认的Live CD用户,并以root身份登录到图形界面。 插入硬盘。我使用的是USB3便携式硬盘,但在大多数情况下,硬盘是SATA内部硬盘。无论如何,请确保您已备份所有数据,因为该过程将清除驱动器上的所有内容。 启动Gparted(图形界面工具比文本工具更容易操作),并选择要安装系统的驱动器。(务必选择正确的驱动器!) 指向顶部菜单,选择“设备”>“创建分区表”...会弹出一个警告消息。点击“高级”并选择“gpt”。点击“确定”。 新的GPT磁盘布局已创建。 现在您需要在其上创建分区。非常重要的是,您需要创建一个FAT32卷作为第一个主分区,并将其标记为EFI。创建分区后,右键单击它并选择“管理标志”。勾选“引导”标志,然后点击“确定”。 继续创建/分区(您可能希望将/home和/boot分开。按照您通常的做法进行操作。在我的情况下,我只创建了/分区)和交换区域。始终首选主分区,因为使用GPT,4个主分区的限制已被移除。 关闭Gparted。

  3. 将系统安装到硬盘的“/”分区,并记得将引导加载程序(GRUB 1.99)安装到此处。如果您创建了单独的“/boot”分区,则必须选择该分区进行引导加载程序的安装。

  4. 接下来是UEFI引导指南的部分:

    构建GRUB2 (U)EFI

    下载最新的grub2源代码ZIP文件。ftp://ftp.gnu.org/gnu/grub/

    构建grub2需要安装以下程序(构建依赖项):

    bison autoconf automake flex autogen python(2.x系列)(用于从bzr存储库构建时的autogen.sh) texinfo help2man gettext(NLS支持) device-mapper freetype2(libs)

    sudo apt-get install bison libopts25 libselinux1-dev autogen m4 autoconf help2man libopts25-dev flex libfont-freetype-perl automake autotools-dev freetype2-demos texinfo efibootmgr

    添加了efibootmgr到您需要安装的软件中,因为您以后会需要它。

    对于64位(U)EFI:

export EFI_ARCH=x86_64 ./configure --with-platform=efi --target=${EFI_ARCH} --program-prefix="" make

如果您使用的是32位架构,请查看我在顶部提供的链接上的在线文档。

在(U)EFI系统中安装GRUB2

确定您的EFI系统分区。(如果设置在第二个硬盘上,它应该是/dev/sda1或/dev/sdb1)

然后将分区挂载到/mnt/EFISYS(或任何您希望的挂载点)。以下代码假设/dev/sda1是EFISYS分区。

sudo mkdir -p /mnt/EFISYS

sudo modprobe dm-mod

sudo mount -t vfat -o rw,users /dev/sda1 /mnt/EFISYS

sudo mkdir -p /mnt/EFISYS/efi/grub

然后,为GRUB构建一个EFI应用程序,并复制它和其他模块:

进入“grub2编译源代码/grub-core”目录 - 默认:/usr/lib/grub/{EFI_ARCH}
grub-mkimage -O ${EFI_ARCH}-efi -d . -o grub.efi -p "" part_gpt part_msdos ntfs ntfscomp hfsplus fat ext2 normal chain boot configfile linux multiboot
sudo cp grub.efi *.mod *.lst /mnt/EFISYS/efi/grub
注意:-p ""选项对于创建可移植的grub.efi应用程序很重要。现在在/mnt/EFISYS/efi/grub中创建一个grub.cfg:
sudo touch /mnt/EFISYS/efi/grub/grub.cfg
将固件设置为默认启动GRUB2 (U)EFI
对于非Mac UEFI系统,使用efibootmgr来修改UEFI固件引导管理器。这需要在UEFI模式下启动内核,并且内核处理器架构应与固件架构匹配(并且未使用'noefi'),以便加载'efivars'内核模块并让efibootmgr访问引导管理器变量。最初,如果在BIOS模式下安装了grub2-efi,则需要手动从固件控制台启动"efi/grub/grub.efi"。然后运行efibootmgr来创建引导项。
sudo modprobe efivars
进入"grub2编译源码/grub-core"目录
grub-probe --target=device /boot/efi/efi/grub/grub.efi
假设grub-probe的输出为/dev/sda1
sudo efibootmgr --create --gpt --disk /dev/sda --part 1 --write-signature --label "GRUB2" --loader "\\EFI\\grub\\grub.efi"
在上述命令中,/boot/efi/efi/grub/grub/efi 可以分解为 /boot/efi 和 /efi/grub/grub.efi,对应的是 (/dev/sda) -> 分区1 -> \EFI\grub\grub.efi。
1. 打开Synaptic并删除所有的grub软件包,只安装grub-efi软件包(对于我来说是amd64),以及所有必要的依赖项。 安装完成后,在终端中运行sudo update-grub。您应该编辑/boot/grub下的"grub.cfg"文件,并检查磁盘UUID是否与您的磁盘和分区匹配,"insmod part_"和"set root='(hd0,"这两个地方是否有"gpt"文本行。如果一切正常,将"grub.cfg"复制到EFI系统分区下的"efi/grub"目录中。 如果之前提到的任何内容不匹配,只需编辑grub.cfg并手动更改相应的值。然后将该文件复制到Efi系统分区下的"efi/grub"目录中(应仍然挂载在/mnt下)。
然后当我重新启动系统时,在UEFI设置的引导选项卡下出现了一个名为GRUB2的新条目,并将其设置为默认引导选项。

能否在非EFI安装上安装efibootmgr?是否仍然有必要从源代码编译grub2?Boot-repair是另一个选择,但由于不同厂商对UEFI规范的实现方式不同,成功率也会有所不同。这也意味着对于某些机器来说,“将固件设置为默认启动GRUB2 (U)EFI”可能是不可能的。 - geezanansa
哇,这个回答太老了。我会提一个新问题来问你在提到什么,因为自那时以来有很多变化,而且对于我所处理的一些情况来说,关于不同供应商的实施已经变得有些失控了。 - Luis Alvarado
如果你在这里找不到你要的答案,那么(作为楼主)这并不是重复问题,因为我假设你还没有找到你要的答案。除此之外,关于如何解决过去6-12个月中我们所见到的整个EFI问题,还有许多类似的问题,实际上在某种程度上有所不同。 - Luis Alvarado
1有一件事是肯定的 - 共同点 = GRUB - geezanansa
那么,我如何将支持UEFI的Grub安装到非UEFI系统的USB闪存驱动器上呢? - trusktr

为了确认您的机器是否支持U/EFI,请在实时桌面会话中从终端运行dmesg | grep EFI
为了确认您安装的Ubuntu是否使用U/EFI启动,请查看/sys/firmware/efi返回的内容。
一个节省时间的解决方案是确保Ubuntu在安装时实际上是以UEFI模式启动的。参考较新的Ubuntu UEFI指南第2.4节对此进行了精彩阐述。
识别计算机是否以EFI模式引导CD
警告:即使您的PC以EFI模式引导CD,它也可能以传统模式引导HDD(反之亦然)。
在64位Ubuntu光盘上引导时:
- 如果BIOS设置为以EFI模式引导CD,则会看到下面的屏幕: ![UEFI mode](https://istack.dev59.com/MPCT3.webp)
- 如果BIOS未设置为以EFI模式引导CD,或者光盘不是64位,则会看到下面的屏幕: ![BIOS mode](https://istack.dev59.com/ljHCe.webp)
请确保使用相同的指南来确保硬盘也是使用UEFI引导。这可能只需将SATA设置为AHCI,但取决于所使用的固件。
一旦进入grub界面,可以通过按下"c"键并尝试`lsefisystab`命令来进入命令行,该命令应该提供带有GUID的EFI条目表,这是另一种识别是否在安装之前使用UEFI的便捷方法。
可以使用 dmesg | grep EFI 命令来确定您的计算机是否支持 UEFI。 在我的一台不支持 U/EFI 的计算机上,执行此命令会返回 UEFI capable?
这可能会误导人,因为在使用 EFI 引导启动时,在支持 UEFI 的计算机上执行相同的命令会返回更多行(可能超过 50 行)。 我在 rodsbooks 上找到了这个简单的提示(链接是关于 rEFInd 的,它是 Grub2 的替代品)。rodsbooks 的网页定期更新,并且是非常可靠的信息来源。作者至少是一个 UEFI 教授,如果不是天才的话!
关于rodsbooks上的这个页面,它指出Ubuntu 11.10使用FAT16文件系统创建了一个ESP,而一些UEFI固件需要使用FAT32文件系统的ESP。如果你在这段文字中按下Ctrl + F并搜索Fedora,你会找到完整的解释。(点击“Find bar”中的Next一次,直接跳转到所引用的信息)。 考虑到UEFI规范要求安全启动需要UEFI 2.2版本,而预装有Windows 8的机器将使用UEFI 2.3.1版本。 所有这些都证实了Ubuntu 11.10不支持安全引导,因此安全引导不是问题所在。
在使用UEFI安装Windows之后,可能由于安装程序的缺陷,Ubuntu使用BIOS/传统设置进行安装,因为只有在使用UEFI时才能使用GPT。也就是说,Ubuntu可以使用BIOS或UEFI安装到GPT,然后需要切换固件设置以启动每个操作系统。
要确定Windows是否使用UEFI,可以使用磁盘管理确认是否正在使用GPT。可以使用此指南将Windows BIOS安装转换为UEFI 将Windows BIOS安装转换为UEFI
一个简单的解决方案是运行Boot-repair-disk(下载cd .iso文件将比使用完整的Ubuntu.iso文件然后安装boot-repair更快启动)。在运行推荐修复之前,请检查高级选项,并考虑您用于引导boot-repair的固件设置。Boot-Repair将安装grub-efi并修复固件硬编码问题,以便系统可以使用UEFI引导Ubuntu以及使用UEFI引导的任何其他现有安装。
一个重要的部分(可能是特定于供应商的)是如何以EFI模式启动(即,相同的Ubuntu 14.04 LTS CD可以检测到两种不同的模式,并呈现与非文本引导屏幕相比不同的文本)。

http://forum.hardware.fr/hfr/OrdinateursPortables/portable/resolu-installation-probleme-sujet_67937_1.htm

或者这样:

http://rog.asus.com/220572013/rampage-motherboards/rampage-iv-uefi-boot-installation-guide-on-windows-7-or-8/

请注意,在BIOS设置中的启动优先级中,通常有两个不同的选项:Px或UEFI(或其他一些词)。其中一个是用于UEFI,另一个是用于传统的基于MBR的引导。

解决了我ACER笔记本5560G上的EFI问题,结果发现将Wubi USB盘上的EFI目录和EFI文件重新命名起作用了(感谢immerohnegott)。
通过GParted在USB闪存上强制执行正常的GRUB安装,预先创建的分区有:
- /boot(100 MB) - /(70 GB)
重启进入Windows 7并安装EasyBCD的免费版本。添加一个新条目:Linux -->> Grub 2,它将搜索所有分区以找到GRUB引导加载程序。
这样一来,Windows的“系统保留”分区和Acer的PQSERVICE隐藏分区不会被触及。

谢谢。我拒绝按照Luis Alvarado的步骤操作,而是采用了这种简单的方法。我并不是说Luis的答案不正确,但如果为了让Ubuntu启动而要费这么大劲,我宁愿使用Windows。是的,我说了这句话。 所以朋友们,在尝试几乎从零开始构建自己的Linux之前,请先尝试这个方法。它可能会避免你不得不把UEFI主板和Ubuntu USB键从窗户扔出去的情况发生。 - Gabriel
你链接中的第一句话是“这仅适用于未在EFI模式下运行的Windows系统”……嗯嗯。 - geezanansa

你可以制作与EFI系统兼容的USB启动驱动器,我不像你们中的一些人那样经验丰富,所以我找到了一种简单有效的方法 :)
在一台具有EFI BIOS的机器上,插入一张带有Parted Magic的CD/DVD(我将其制作成了CD而不是USB的HIREN Boot CD)。从该CD/DVD引导。
一旦进入Parted Magic,插入一个至少有2GB内存的空USB闪存驱动器。打开Parted Magic中包含的Unetbooten实用程序。运行该程序,并选择您要加载到闪存驱动器上的任何发行版。按照说明进行操作,等待完成。
现在,该USB驱动器应该能够在任何EFI系统上启动。至少对我来说是这样的 :oP

Unetbootin是创建USB安装介质的好方法。我还可以推荐pendrivelinux工具,其中包括通用USB安装程序(http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/)。这些工具简单地提供了.iso文件和格式化驱动器(FAT32)的图形用户界面,一旦你练习了几次,就可以轻松地使用命令行界面实现相同的效果。然而,这仍然不是解决使用U/EFI运行Ubuntu安装程序的方法。也就是说,无论使用DVD还是USB,.iso文件都是相同的。问题在于安装程序本身,而不是用于挂载它的介质。 - geezanansa

你需要弄清楚如何让你的BIOS以EFI模式而不是BIOS模式启动安装光盘。如果以EFI模式启动,你会看到一个GRUB菜单而不是通常的Syslinux菜单。

我觉得它已经以EFI模式启动了。我看到了一个GRUB菜单,不是通常带有Ubuntu标志的半图形菜单,而是一个黑白的GRUB菜单,上面有三个选项:
  • 在安装之前尝试Ubuntu
  • 安装Ubuntu
  • 检查缺陷。
- ervingsb
@ervingsb,那就可以了,假设你告诉安装程序使用整个磁盘,而不是手动分区。 - psusi
1好吧,USB安装失败了。Ubuntu论坛上有人建议我使用光盘安装而不是USB。这样就成功了。 - ervingsb

在您的BIOS设置中,将硬盘模式更改为IDE,并从USB闪存驱动器启动。它将以非UEFI模式安装,并且安装后的引导也将正常工作。
这种特定方法对我来说非常有效,在最新的BIOS版本下,Ubuntu 16.04在联想ThinkCentre Edge 71上运行良好。

1欢迎来到AskUbuntu!感谢您的帮助尝试!由于这篇帖子已经几年了,而且问题涉及的版本已不再受支持,并且有多个答案,我相信社区会很感激您能将精力集中在这里 - Elder Geek
谢谢你的想法,不过我之所以看到这篇帖子是因为我在最新支持的版本中遇到了这个问题,而且通过按照我提供的步骤解决了。如果你能推荐一篇描述同样问题的更新帖子,我也很愿意在那里发帖。 - Gregg B.
如果您在当前版本中遇到了这个问题,请[编辑]您的答案,以指明您所使用的版本,以便帮助那些遇到相同问题和版本的人找到您的答案。谢谢! - Elder Geek
这就是我的OP的“16.04”已经提到的:最新和最新的LTS版本。还有什么其他需要我编辑的吗? - Gregg B.
对不起,我错过了。+1 - Elder Geek

我在安装Ubuntu 14.04到联想ThinkCentre M91p时遇到了这个问题,我有一个快速/简单的解决方案:

  1. 在从Ubuntu安装光盘/USB启动之前,进入BIOS,在“启动”选项卡下将“引导模式”从“自动”更改为“传统模式”。
  2. 安装Ubuntu。
  3. 如果需要,可以在BIOS中将引导模式更改回自动模式。

这对我来说一直有效。

我相当确定这个方法有效,因为Ubuntu安装程序在决定安装哪个引导加载程序时会检测BIOS是否支持EFI。通过将BIOS设置为传统模式,Ubuntu会安装与这些联想机器兼容的旧引导加载程序。


我遇到了同样的问题...我买了这台新的联想台式机,也遇到了同样的问题,我根本不想在上面安装WIN 8.1(我从Red Hat 6.1开始就一直在使用Linux)。然而,我对UEFI/EFI一点都不熟悉。电脑甚至无法启动liveCD。在这个博客上找到了一些信息后,我发现你必须在UEFI/EFI/BIOS中改变一些设置,首先是禁用CSM,并在启动选项中选择“仅传统”。重新启动,噢!我成功进入系统了。安装了Ubuntu 12.04后一切正常。后来我发现,在将这些设置改回“仅UEFI”后,12.04无法启动,出现“未找到操作系统”的错误。据我所知,Ubuntu从12.10开始支持UEFI,我升级到了13.04,改变了相同的设置,启用了CSM和UEFI only,噢!我成功从UEFI启动了,并且注意到机器运行得更好!你不需要从UEFI进行全新安装,只需升级到13.04/10并改回UEFI,这对我有效...迫不及待地想看看Linux会如何利用这个相当新的UEFI/EFI功能,这里有一些潜力。

请编辑您的回答,并尝试通过在正文中添加段落来使其更易读。此外,如果能提供一些参考资料就更好了。 - Danatela

我也遇到过类似的问题。
我的经验是,装有EFI的计算机也同时配备了BIOS。我疯狂地按F2键,结果出现了使用EFI或标准BIOS的选择。
不过要小心,如果你使用BIOS,计算机将会启动显示“找不到操作系统”的消息。
所以你有可能从那里格式化你的计算机,并使其像普通个人电脑一样启动。

我解决了这个问题, 我使用的是Ubuntu 16.04和Windows 10,但是我的Ubuntu无法自动启动。 我的EFI分区是FAT32格式。
请确保你的Ubuntu分区在启动顺序中排在第一位。
$ sudo su
# cd /boot/efi/EFI/Boot
# mv bootx64.efi bootx64_.efi
# cp ../ubuntu/shimx64.efi bootx64.efi
# cp ../ubuntu/grubx64.efi grubx64.efi
# update-grub
# reboot