标签: uefi

重启后 GRUB 在命令行中启动

我在我的笔记本电脑上安装了 Linux Mint 以及预装的 Windows 10。 当我打开电脑时,大部分时间都会出现正常的 GRUB 菜单:

GRUB 菜单

但是在启动 Linux 或 Windows 然后重新启动后,我 GRUB 以命令行模式启动,如下面的屏幕截图所示:

GRUB 命令行

可能我可以键入一个命令以从该提示符启动,但我不知道。有效的是使用 Ctrl+Alt+Del 重新启动,然后反复按 F12 直到出现正常的 GRUB 菜单。使用这种技术,它总是加载菜单。不按 F12 重新启动总是在命令行模式下重新启动。

我认为 BIOS 启用了 EFI,并且我在 /dev/sda 中安装了 GRUB 引导加载程序。

为什么会发生这种情况,我如何确保 GRUB 始终加载菜单?

编辑

正如评论中所建议的,我尝试清除grub-efi软件包并重新安装它。这并没有解决问题,但现在当它在命令提示符模式下启动时,GRUB 显示以下消息:

error: no such device: 6fxxxxx-xxxx-xxxx-xxxx-xxxxxee.
Entering rescue mode...
grub rescue>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我检查了blkid命令,这是我的 linux 分区的标识符。也许这些额外的信息可以帮助弄清楚发生了什么?

dual-boot boot-loader grub2 uefi

71
推荐指数
6
解决办法
45万
查看次数

如何知道我是否使用 UEFI 启动?

我一直在搜索,但没有找到一种明显的方法来了解 GRUB 是在系统引导中使用 UEFI,还是 BIOS 兼容模式,或完整的 BIOS。我只找到了Windows 方法。GRUB 或内核引导日志中是否有显示我使用的是 UEFI、EFI 或 BIOS 的内容?

boot grub2 uefi

60
推荐指数
2
解决办法
6万
查看次数

为什么大多数发行版链接 UEFI 和 grub?

大多数发行版会在 UEFI 系统上安装额外的引导加载程序。UEFI 本身是一个引导加载程序,它提供了一个菜单来选择不同的操作系统或单个内核。此外,UEFI 设置可以使用用户空间工具轻松更改,例如efibootmgr.

内核从 3.3 开始支持 EFI_STUB,这意味着内核可以直接从 UEFI 加载。发行版决定使用额外的引导加载程序的原因是什么?大多数关于 Linux/UEFI 的教程主要关注如何设置额外的引导加载程序(rEFInd、grub2、ELILO 等),而不是使用 EFI_STUB 引导 Linux。

发行版中唯一缺少的是支持。由于大多数发行版链接了第二个引导加载程序,因此内核不会添加到 UEFI 引导菜单,也不会复制到 EFI 系统分区。

三个脚本足以完成所有魔术。一种将 initramfs 复制到 ESP 的方法。第二个将内核复制到 ESP 并在 UEFI 启动菜单中创建一个新条目。第三个脚本从 ESP 中删除旧内核和 initramfs,并删除 UEFI 启动菜单项。这允许完全自动化的内核/initramfs 更新/清除,而无需用户交互。一年多以来,我一直在使用这种方法,并且效果很好。

为什么大多数发行版使用 grub 而不是 EFI_STUB?

链接:

编辑:我不是在谈论完全删除 grub 支持,而是为那些出于各种原因想要使用它的人提供选择。发行版可以grub-efi为那些想要链接 UEFI 和 grub 的人提供一个包,以及一个efistub-boot包含我上面提到的脚本的包。

boot boot-loader grub2 uefi

37
推荐指数
1
解决办法
8167
查看次数

如何使用 QEMU (kvm) 启动 EFI 内核?

我正在尝试使用 QEMU (kmv) 模拟 EFI 环境;使用 archboot 在 EFI 模式下启动 virtualbox 需要 15 分钟。

使用传统 BIOS 模式,我可以使用以下命令启动:

root@citsnmaiko-deb:/home/maiko/uefi/ovmf# qemu-system-x86_64 -kernel  ../bzImage -initrd ../rootfs.gz -append "rw root=/dev/ram0  ramdisk_size=40960"
Run Code Online (Sandbox Code Playgroud)

它适用于我的自定义内核和文件系统。

file ../bzImage 
../bzImage: Linux kernel x86 boot executable bzImage, version 3.6.1 (root@citsnmaiko-deb) #4 , RO-rootFS, swap_dev 0x3, Normal VGA
Run Code Online (Sandbox Code Playgroud)

它也有 EFI 支持。

我正在尝试对从此处下载的 EFI 文件执行相同操作

wget http://ufpr.dl.sourceforge.net/project/edk2/OVMF/OVMF-X64-r11337-alpha.zip -P ovmf
cd ovmf/
unzip -x OVMF-X64-r11337-alpha.zip
# rename the files for QEMU find them
mv OVMF.fd bios.bin
mv CirrusLogic5446.rom vgabios-cirrus.bin
# start QEMU
root@citsnmaiko-deb:/home/maiko/uefi/ovmf# …
Run Code Online (Sandbox Code Playgroud)

ubuntu qemu linux-kernel uefi

34
推荐指数
1
解决办法
10万
查看次数

为什么 USB 在 UEFI/BIOS 中工作时在 Linux 中不起作用?

作为背景,我刚刚用现代硬件构建了一台新机器,包括:

  • AMD FX-8350
  • 技嘉GA-990FXA-UD3主板
  • 16GB 内存
  • 英伟达 GTX 650 Ti
  • 金士顿固态硬盘

鉴于此,我尝试在 SSD 上安装各种版本的 Linux,几乎每次都失败。我尝试从 USB 拇指驱动器安装 Arch、Debian stable、Debian sid 和 Ubuntu 12.10,但是当 BIOS 看到 USB 驱动器并开始从它启动时,一旦操作系统尝试枚举 USB 设备,我就失去了所有 USB 功能(包括引导设备)。

最后我刻录了一张 DVD 并将 Ubuntu 12.10 安装到 SSD 上。应该注意的是,我的 USB 键盘(和鼠标)在 American Megatrends UEFI/BIOS 中工作正常。即使我在 Live Ubuntu DVD 上的预安装菜单中,键盘也能正常工作。

一旦 Linux 启动(Live DVD 或 SSD),我就失去了所有 USB 功能,只能使用 PS/2 键盘导航操作系统。

我在 dmesg/syslog 中看到的是关于“ failed to load microcode amd_ucode/microcode_amd_fam15h.bin”的几行,我可以看到 USB 设备初始化失败。

如果我这样做,lsusb我可以看到所有 USB 主机控制器,但看不到任何设备。做一个lspci向我展示了我期望的所有硬件。并且做一个lsmod我没有看到加载的任何 USB …

linux usb bios troubleshooting uefi

34
推荐指数
3
解决办法
15万
查看次数

“此系统不支持 EFI 变量”

我正在尝试将 Arch linux 安装到新的(非常糟糕的)HP Pavillion 15 笔记本电脑上。

这是一台基于 UEFI 的机器。经过几次摆动后,我已经走得很远了。传统模式在系统设置中被禁用,我已经通过 EFI 引导到我刻录的 Arch DVD,并通过 Arch初学者指南和更高级的安装指南进行到我安装 grub 的地步。

chrooted 时,我执行:

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug
Run Code Online (Sandbox Code Playgroud)

这会发出大量输出,包括:

此系统不支持 EFI 变量

我第一次到这一步时,我继续安装,不知道这是否是一个实际问题。原来是这样,因为当我重新启动机器时,找不到可启动的媒体,机器拒绝启动。那时我可以进入 UEFI 设置菜单并选择要启动的 EFI 文件,然后 Arch Linux 就会启动。

但我现在要回去重新安装,试图解决上述问题。

如何让 GRUB 正确安装?

uefi

34
推荐指数
5
解决办法
14万
查看次数

GRUB2 可以和 Windows 共享 EFI 系统分区吗?

我有一个现有的 Windows 7 GPT 安装,它已经有一个 EFI 系统分区。

我现在正在尝试在单独的硬盘上安装 Linux,该硬盘也是 GPT 格式。我没有找到任何可以在没有 EFI 系统分区的情况下启动 grub 的工作方法,所以我的问题是:

grub2 是否可以使用与 Windows 相同的 EFI 系统分区?我如何告诉 grub2 使用它?

澄清我的设置:

gpt /dev/sda:
    1 EFI System partition created by windows (100MB)
    2 "Microsoft reserved partition" (200MB)
    3 Windows root (rest of disk)

gpt /dev/sdb:
    # After answering my own question: this partition is not needed
    1 boot partition containing grub, kernels etc.(32MB)
    2 crypto LVM partition (rest of disk)
Run Code Online (Sandbox Code Playgroud)

我希望 grub2 使用现有的/dev/sda1EFI 分区。

PS:我的主板支持 EFI。

dual-boot windows grub2 gpt uefi

33
推荐指数
1
解决办法
5万
查看次数

我什么时候需要在 UEFI/EFI 引导中指定 add_efi_memmap 作为内核参数?

我正在阅读一些如何使用 EFI 存根 (efistub) 加载 Linux 内核的教程。这些指令经常使用内核引导参数add_efi_memmap。预期的硬件是具有 8GB RAM 的 Intel x64。我当前的设置正在运行grub-efi引导加载程序和内核 v3.13。

GRUB引导,而不add_efi_memmap引导参数:

  • 23BIOS-e820 线dmesg | grep BIOS-e820: | wc -l
  • 243EFI 内存行计数dmesg | grep efi:\ mem | wc -l
  • DMA 区域:24保留的页面
  • 内存:7840568K/8283384K可用
  • 442816K 保留

GRUB引导 add_efi_memmap和EFI存储器映射大小似乎确实有所不同:

  • 23 BIOS-e820线
  • 57 EFI 内存线
  • DMA 区域:22保留的页面
  • 内存:7885076K/8283384K可用
  • 398308K 预留

EFI 存根启动没有 add_efi_memmap

  • 22 BIOS-e820线
  • 60 EFI …

boot linux-kernel arguments uefi

30
推荐指数
1
解决办法
2万
查看次数

具有持久性的 UEFI + BIOS 可启动实时 Debian 拉伸 amd64

我目前在这件事上找到的所有信息都不足以满足我的口味。它要么是过时的,要么是误导性的,要么是错误的,似乎过于复杂或没有涵盖这个特定问题。

目标:

  • 可启动 USB 驱动器(支持 UEFI 和传统 BIOS)
  • (基于) live Debian 9 (stretch)
  • 持久性(默认情况下以及 UEFI 和传统 BIOS)
  • 默认德语键盘布局
  • 适用于对其他 GNU/Linux 系统进行故障排除

原因:

  • 每次使用时都必须设置键盘布局真的很头疼
  • 默认的 Debian 实时映像中缺少 cryptsetup 和 efibootmgr
  • gnome-terminal 默认有这个烦人的白色背景

没有解决办法:

  • (重新)构建自定义的 debian live image(看起来很乏味,虽然我还没有尝试过)
  • unetbootin(在 debian stretch 上启动时要求输入未知密码,我认为它无论如何都不支持 UEFI)
  • 一些外国自动化流程,我看不到发生了什么

Debian live 和 install 映像是isohybrid 的,可以方便地使用dd. 它们确实可以通过这样的 USB 驱动器工作,这非常好!但是,如果不编辑包含在实时 ISO 映像的只读 ISO9660 文件系统中的 grub 和 isolinux 配置,则默认情况下将没有持久性,也无法从非英文键盘布局开始。因此,即使将 live ISO 写入 USB 驱动器后,这些参数仍然无法更改。

debian live-usb uefi persistence

21
推荐指数
1
解决办法
2万
查看次数

UEFI & SecureBoot 的影响,有多严重?

我打算在未来几天购买一台新笔记本电脑,我对新的、酷炫的超极本印象深刻。作为 GNU/Linux 的长期用户,我当然会在其上安装我选择的发行版。

很有可能我必须购买一台预装了 Windows 8 的电脑;并且很有可能它会运行 UEFI 并具有“安全启动”,在该安全启动上未签名的内核将无法启动。

UEFI 可能不错,BIOS 可能需要退休。我猜毛茸茸的东西是Secure Boot

据我所知,一些受信任的证书将嵌入到固件中,因此嵌入到内核等中。如果内核的证书可以追溯到固件中的任何一个,内核将启动,否则 UEFI 会告诉我关闭并拒绝启动。此过程将阻止未经认证的软件启动。这可能有好处,尽管我看不到它们。

我想知道开源内核如何获得这些密钥之一并且仍然是免费的。我已经阅读了 Linux 邮件列表上的一个线程,其中 Red hat 员工要求 Linus Torvalds 提取一个变更集,该变更集实现了解析 PE 二进制文件的工具并采取一组复杂的操作让内核在安全启动模式下启动(据我所知)。他们想这样做是因为微软只对 PE 二进制文件进行签名。Torvalds 先生善意地拒绝了这个变更集,指出内核已经实现了标准,而不是 PE。RedHat 正在尝试将此代码推送到内核,以便他们有一天不必分叉它。

看,这是一件复杂的事情。让我问我的问题:

  • 作为家庭用户,使用 UEFI 和安全启动可以获得哪些好处?
  • 这个签名是怎么做的?
  • 谁可以获得签名/证书?是付费的吗?可以公开吗?(它应该在 Linux 的源代码中可用,不是吗?)
  • Microsoft 是唯一提供签名的机构吗?不应该有一个独立的基金会来提供它们吗?
  • 这将如何影响开源和免费内核、爱好者/学术内核开发人员。例如,这会引导吗(一个非常基本的引导扇区代码):

    hang:
       jmp hang
    times 510-($-$$) db 0
    db 0x55
    db 0xAA
    
    Run Code Online (Sandbox Code Playgroud)

这个网站上的一条新闻是对这个问题的启发。一个名为 …

free-software linux-kernel uefi secure-boot

18
推荐指数
2
解决办法
2268
查看次数