我需要实现一个在操作系统之外与 BIOS 同一级别的程序,它将从 BIOS 芯片中读取所有 UEFI 固件数据,需要读取哪些内存地址(是否有某种 API 可以获取所有 UEFI 固件数据?)以及 UEFI 固件到底在哪里?
我想知道删除EFI分区是否也会删除初始化硬件呈现启动模式的UEFI固件。
在配备两个金士顿 M.2 NVMe SSD 的 HP ZBook G6 上,Windows 运行没有问题。但是,当从 USB 硬盘引导 Debian 12 安装程序 ISO 时,Linux 6.0 内核不会检测到这些 NVMe 磁盘,而仅检测/proc/partitions
.
我尝试过modprobe nvme-core nvme nvmet
,但重复的 Debian 安装程序“检测磁盘”仍然没有检测到这些。(安装程序 ISO initrd 不包含partprobe
可执行文件,因此我没有尝试 /that。)lspci
不显示有关 NVMe 的任何信息。
与默认图形安装和文本模式专家安装程序的结果相同。
如何检测 NVMe 磁盘?
编辑:更新 BIOS 和禁用安全启动没有帮助。硬件 RAID 已禁用。
我拥有一台相当旧的服务器,戴尔 PowerEdge T20,具有最新的BIOS 版本 A20,戴尔更新链接,更新屏幕,以防链接及时失效:
今天早上,当 SSH 进入这台服务器时,我收到一条消息,有一个可用的固件更新,请参阅下面的完整详细信息,它还说我可以运行:
fwupdmgr get-upgrades
获取有关它的信息,我做到了。
$ ssh-s
up 18 hours, 31 minutes
1 device has a firmware upgrade available.
Run `fwupdmgr get-upgrades` for more information.
root @ dell-poweredge-t20 /root # fwupdmgr get-upgrades
WARNING: UEFI capsule updates not available or enabled in firmware setup
See https://github.com/fwupd/fwupd/wiki/PluginFlag:capsules-unsupported for more information.
Devices with no available firmware updates:
• Samsung SSD 860 PRO 256GB
• WDC WD5000BMVU-11A08S0
PowerEdge T20
│
└─UEFI dbx:
│ Device ID: 362301da643102b9f38477387e2193e57abaa590
│ Summary: UEFI Revocation Database
│ Current version: 77
│ Minimum Version: 77
│ Vendor: UEFI:Linux Foundation
│ Install Duration: 1 second
│ GUIDs: c6682ade-b5ec-57c4-b687-676351208742 ← UEFI\CRT_A1117F516A32CEFCBA3F2D1ACE10A87972FD6BBE8FE0D0B996E09E65D802A503
│ f8ba2887-9411-5c36-9cee-88995bb39731 ← UEFI\CRT_A1117F516A32CEFCBA3F2D1ACE10A87972FD6BBE8FE0D0B996E09E65D802A503&ARCH_X64
│ Device Flags: • Internal device
│ • Updatable
│ • Supported on remote server
│ • Needs a reboot after installation
│
├─Secure Boot dbx:
│ New version: 217
│ Remote ID: lvfs
│ Summary: UEFI Secure Boot Forbidden Signature Database
│ License: Proprietary
│ Size: 13.8 kB
│ Created: 2020-07-29
│ Urgency: High
│ Vendor: Linux Foundation
│ Duration: 1 second
│ Flags: is-upgrade
│ Description:
│ This updates the dbx to the latest release from Microsoft which adds insecure versions of grub and shim to the list of forbidden signatures due to multiple discovered security updates.
│
│ Before installing the update, fwupd will check for any affected executables in the ESP and will refuse to update if it finds any boot binaries signed with any of the forbidden signatures. If the installation fails, you will need to update shim and grub packages before the update can be deployed.
│
│ Once you have installed this dbx update, any DVD or USB installer images signed with the old signatures may not work correctly. You may have to temporarily turn off secure boot when using recovery or installation media, if new images have not been made available by your distribution.
│
├─Secure Boot dbx:
│ New version: 211
│ Remote ID: lvfs
│ Summary: UEFI Secure Boot Forbidden Signature Database
│ License: Proprietary
│ Size: 13.5 kB
│ Created: 2021-04-29
│ Urgency: High
│ Vendor: Linux Foundation
│ Duration: 1 second
│ Flags: is-upgrade
│ Description:
│ This updates the dbx to the latest release from Microsoft which adds insecure versions of grub and shim to the list of forbidden signatures due to multiple discovered security updates.
│
└─Secure Boot dbx:
New version: 190
Remote ID: lvfs
Summary: UEFI Secure Boot Forbidden Signature Database
License: Proprietary
Size: 14.4 kB
Created: 2020-07-29
Urgency: High
Vendor: Linux Foundation
Duration: 1 second
Flags: is-upgrade
Description:
This updates the dbx to the latest release from Microsoft which adds insecure versions of grub and shim to the list of forbidden signatures due to multiple discovered security updates.
root @ dell-poweredge-t20 /root #
我从来没有用 Linux 更新过我的 BIOS/UEFI。我的第一个问题是:
这个更新究竟是为了什么而设计的?(新的 BIOS?)
其次,继续更新是否安全,是否有任何缺点/优点?
谢谢你。
笔记:
此服务器运行 Debian 11。
此计算机上禁用了安全启动。
作为预防措施,我在 BIOS 中禁用了UEFI 胶囊更新。
我的 Windows 10 笔记本电脑上有 Hyper-V,第一代 VM 运行 RHEL 7.9。我正在尝试使用 UEFI 引导更新它以在第 2 代 VM 上运行。
作为迁移到第 2 代 VM 的一部分,我需要将 UEFI 引导代码安装到 /boot 分区中。
我安装了以下软件包,我认为这是我需要的:
grub2-efi-x64.x86_64 (1:2.02-0.07.el7_9.9)
shim-x64.x86_64 (15-11.el7)
grub2-efi-x64-modules.noarch (1:2.02-0.07.el7_9.9)
shim-unsigned-x64.x86_64 (15-9.el7)
efibootmgr -v
显示以下内容:
如您所见,我通过 尝试了几种不同efibootmgr
的配置,但似乎都不起作用。
虚拟机的启动设置:
所以理论上,VM 应该从 启动\EFI\redhat\shimx64.efi
,据我所知,它应该是/boot/efi/EFI/redhat/shimx64.efi
文件,它确实存在:
df -h
显示在我通过救援 DVD 引导时/boot
已安装。/dev/sda1
chroot /mnt/sysimage
正如您从 /boot 分区的截图中看到的那样,在我看来,内核的有效 initramfs 文件(我认为我们甚至没有做到这一点):
我还尝试使用以下方法重置 grubs 配置:
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
该grub.cfg
文件包含从内核版本的角度来看看起来正确的菜单条目,但是我什至没有看到 grub 菜单,所以我不认为我们已经走到了这一步。对我来说听起来像是 UEFI 引导加载程序问题,但我不知道如何解决问题。
当我取出 DVD 并启动机器时,Hyper-V 会降低启动顺序,直到遇到网络适配器。
最终,Hyper-V 显示了这一点:
我究竟做错了什么?
如果我从救援 DVD 启动,然后在 grub 菜单中拖放到命令行(通过c
)并运行configfile (hd0,gpt1)/efi/EFI/redhat/grub.cfg
,我可以启动已安装的 Linux 操作系统。
mount | grep -i "boot"
从启动的操作系统显示:
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
我对某事有点困惑。我在 Digital Ocean 上有一台服务器,我想知道用于系统启动的 BIOS 或 UEFI。
我尝试过以下事情:
root@debian:~$ dmidecode -t 0
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 2.4 present.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: DigitalOcean
Version: 20171212
Release Date: 12/12/2017
Address: 0xE8000
Runtime Size: 96 kB
ROM Size: 64 kB
Characteristics:
BIOS characteristics not supported
Targeted content distribution is supported
BIOS Revision: 1.0
root@debian:/~$ efibootmgr
EFI variables are not supported on this system.
root@debian:/~$ ls -l /sys/firmware/efi
ls: cannot access '/sys/firmware/efi': No such file or directory
看起来像是使用了BIOS。但也有efi
目录/boot
。
root@debian:/~$ ls -l /boot/
drwxr-xr-x 3 root root 16384 Jan 1 1970 efi
drwxr-xr-x 6 root root 4096 Mar 30 18:48 grub
除此之外,当我查看磁盘分区表时,它是 GPT。我知道 GPT 不与 BIOS 一起使用,至少不是首选。磁盘也有 EFI 系统分区。
root@debian:/mnt$ fdisk -l /dev/vda
Disk /dev/vda: 80 GiB, 85899345920 bytes, 167772160 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 72FE8E7C-20D9-2A4A-8AFF-75948771F0DA
Device Start End Sectors Size Type
/dev/vda1 262144 167772126 167509983 79.9G Linux filesystem
/dev/vda14 2048 8191 6144 3M BIOS boot
/dev/vda15 8192 262143 253952 124M EFI System
Partition table entries are not in disk order.
我错过了什么?我如何确定该系统上使用的是哪一个?
我正在阅读 UEFI 标准:https ://uefi.org/sites/default/files/resources/UEFI_Spec_2_9_2021_03_18.pdf
第 115 页第 5 节讨论了 GPT 磁盘布局。我对这到底是如何工作的有点困惑。从下面听起来 UEFI 会忽略 MBR。
如果遗留 MBR 不使用 GPT 磁盘布局(即,如果它使用 MBR 磁盘布局),它可能位于磁盘的 LBA 0(即第一个逻辑块)。UEFI 固件不执行 MBR 上的引导代码。
那么这基本上是说如果您将固件置于传统引导模式,这就是如何定义一个可以很好地与该传统引导模式配合使用的 MBR?我是否正确地说,如果系统的固件处于 UEFI 模式,那么具有第 5 章中指定的 MBR 的系统将无法启动?
我正在尝试在旧的联想 ThinkCentre M92p(英特尔酷睿 i5-3470)上安装 Debian 11.2.0(debian-11.2.0-amd64-netinst.iso)。
我将 BIOS 升级到最新版本(9SKT9CA,2018 年 12 月 24 日发布)并禁用 CSM。
安装程序工作正常,直到引发以下两个错误。
创建文件系统失败
当我选择继续...
这台机器的固件已经在 UEFI 模式下启动,但看起来可能已经使用“BIOS 兼容模式”安装了现有的操作系统。
我正在一个空的 exFAT 格式的三星 T7 Touch SSD 上安装 Debian……除了实时安装程序之外,没有其他操作系统存在。
我错过了什么?感谢您的帮助!
我正在 UEFI 中编写自己的操作系统加载程序(引导加载程序)。操作系统加载程序是 Microsoft 签名的,因此它可以在安全启动下运行。OS Loader 将能够根据用户的选择加载 Windows 或 Linux Kernel(类似于 GRUB) 因为我将 Linux Kernel 构建为 EFI Stub,所以我可以从我的 OS Loader 加载它。
但是,我有一个具体的要求。我将对 Linux 内核进行自签名。
如何建立信任链以确保我加载的是我自己的自签名 Linux 内核而不是其他未签名的内核?
根据电信公司的建议于 2022 年 1 月 21 日编辑
继续 telcoM 的回答,我从https://github.com/rhboot/shim下载了 SHIM 源,我还在https://www.rodsbooks.com/efi-bootloaders/secureboot.html#initial_shim
之后创建了 PKI 密钥
$ openssl req -new -x509 -newkey rsa:2048 -keyout MOK.key -out MOK.crt -nodes -days 3650 -subj "/CN=Your Name/"
$ openssl x509 -in MOK.crt -out MOK.cer -outform DER
使用构建的 SHIM 源
make VENDOR_CERT_FILE=MOK.cer
用 MOK.key 签署了我的 kernel.efi 以获得签署的 grubx64.efi(这是因为 SHIM 中的默认加载器是 grubx64.efi。我只是继续使用默认值)
sbsign --key MOK.key --cert MOK.crt --output grubx64.efi kernel.efi
最后,使用 shimx64.efi 作为 loader.efi (使用 PreLoader https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/)因为目前我没有微软签署的 shimx64.efi . 此外,mmx64.efi 和 fbx64.efi 也通过 HashTool.efi 与 shimx64.efi (loader.efi) 一起注册
这是流程。
PreLoader.efi --> loader.efi(shimx64.efi) --> grubx64.efi(kernel.efi)
禁用 SecureBoot 后,一切正常,我可以启动 Linux 内核。
但是,启用 SecureBoot 后,我无法启动 grubx64.efi 映像。
进一步更新
我发现我应该使用 MokManager (mmx64.efi) 来注册 MOK.cer。尝试使用 mmx64.efi 并注册 MOK.cer。但是,看起来 Key 没有成功注册。
我错过了什么吗?
我有一个笔式驱动器或磁盘,可以通过以下方式访问
/dev/sda
并且分区在
/dev/sda1
/dev/sda2
/dev/sda...
我想知道磁盘本身和每个分区:
- 它是经典可启动的(BIOS 启动模式/UEFI 之前)(我认为使用了 MBR)
- 它是 UEFI 可引导的吗(我认为那时没有使用 MBR)
- 以上都不是
- 以上两者
我知道有 fdisk 但它不支持 GPT 所以我不能将它用于 GPT 磁盘。并且 parted 只显示“启动”标志,但它不知道它是 BIOS 可启动还是 UEFI 可启动。
我知道这项任务不会那么难,因为每个现代 BIOS 都可以列出可启动设备,并且它还显示它是否是 UEFI。