首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法启动Pop-OS:未能打开\EFI\ boot \mm64.efi

无法启动Pop-OS:未能打开\EFI\ boot \mm64.efi
EN

Unix & Linux用户
提问于 2021-06-27 19:45:59
回答 1查看 2.4K关注 0票数 2

我一直试图安装POP-OS20.10,但无法从usb映像启动:https://pop.system76.com/。我从UEFI获得的错误消息是:

代码语言:javascript
复制
Failed to open \EFI\BOOT\mmx64.efi - Not Found
Failed to load image \EFI\BOOT\mmx64.efi: Not Found
Failed to start MokManager: Not Fond
Something has gone seriously wrong: import_mok_state() failed

askubuntu.com中有一个以前的线程试图解决这个问题,https://askubuntu.com/questions/1085550/cant-install-ubuntu-18-10-on-xps-15-efi-boot-mmx64-efi-not-found。然而,那里的解决办法并不令人满意。它们都建议将grubx64.efi重新命名或复制到.iso的efi/boot目录中的mmx64.efi文件中;由于.iso文件是只读的,所以我无法这样做。

这台机器是一台Thinkpad T570,我在它的主NVMe驱动器上安装了Windows 10,在WiFi插槽SSD上安装了弧线。

EN

回答 1

Unix & Linux用户

发布于 2021-06-27 20:34:25

ISO9660文件系统当然是只读的,是的。

但是,一个UEFI可引导的ISO映像已经为USB所用,它不仅仅是一个ISO9660文件系统:它还应该包含一个嵌入其中的辅助引导映像,以及一个嵌入式分区表,使它看起来像一个具有多个分区的HDD映像,而不仅仅是一个ISO9660文件系统。

一个常规的不可引导的ISO映像可以很容易地通过file命令来识别:

代码语言:javascript
复制
# file virtio-win-0.1.102.iso 
virtio-win-0.1.102.iso: ISO 9660 CD-ROM filesystem data 'virtio-win-0.1.102'

但是,如果对Pop_OS ISO映像这样做,您将得到完全不同的信息:

代码语言:javascript
复制
# file pop-os_20.10_amd64_intel_18.iso 
pop-os_20.10_amd64_intel_18.iso: DOS/MBR boot sector; partition 2 : ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsector 484, 8192 sectors

它似乎包含一个分区表。要使用该分区表,可以使用losetup -P

代码语言:javascript
复制
# losetup -P /dev/loop0 pop-os_20.10_amd64_intel_18.iso
# ls -l /dev/loop0*
brw-rw---- 1 root disk   7, 0 Jun 27 23:10 /dev/loop0
brw-rw---- 1 root disk 259, 6 Jun 27 23:10 /dev/loop0p1
brw-rw---- 1 root disk 259, 7 Jun 27 23:10 /dev/loop0p2

# fdisk -l /dev/loop0
Disk /dev/loop0: 2.4 GiB, 2516582400 bytes, 4915200 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: dos
Disk identifier: 0x3c3f6082

Device       Boot Start     End Sectors  Size Id Type
/dev/loop0p1 *        0 4915199 4915200  2.4G  0 Empty
/dev/loop0p2        484    8675    8192    4M ef EFI (FAT-12/16/32)

第一个分区的类型ID被注册为0,因为ISO9660文件系统没有标准的MBR分区类型值。第一个分区包含这个ISO混合映像的主要ISO9660内容。但是嵌入在里面的是另一个小的分区。

请注意,根据MBR,第一个分区是可引导的,因此它很可能包含与BIOS兼容的引导扇区:

代码语言:javascript
复制
# file -s /dev/loop0p1
/dev/loop0p1: DOS/MBR boot sector; partition 2 : ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsector 484, 8192 sectors

另一方面,UEFI并不关心MBR风格的引导标志。如果磁盘是MBR分区的,UEFI希望看到一个带有特殊类型ID 0xef的FAT分区,以指示EFI系统分区。这正是第二个分区的内容。

代码语言:javascript
复制
# file -s /dev/loop0p2
/dev/loop0p2: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "mkfs.fat", sectors/cluster 4, root entries 512, sectors 8192 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 6, sectors/track 32, heads 64, serial number 0x80bb708e, unlabeled, FAT (12 bit)

您甚至可以挂载它,并看到Linux将它标识为vfat文件系统类型(其中包括除ExFAT之外的所有FAT变体)。它可以作为可写的安装:

代码语言:javascript
复制
# mount /dev/loop0p2 /mnt
# grep /mnt /proc/mounts
/dev/loop0p2 /mnt vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0

# tree /mnt
/mnt
└── efi
    └── boot
        ├── bootx64.efi
        └── grubx64.efi

# df -h /mnt
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0p2    4.0M  2.7M  1.4M  67% /mnt

在这里,bootx64.efi实际上是安全引导程序( Secure Boot shimx64.efi ),它被重命名为匹配特殊的UEFI可移动媒体/回退引导程序文件名。grubx64.efi是GRUB的UEFI版本,所有模块都内置并使用一个证书进行签名,该证书的公共部分嵌入在shim中,以满足安全启动要求。

mmx64.efi应该很好地适应那个胖文件系统中1.4M的空闲空间。或者,如果禁用了安全引导,可以执行mv grubx64.efi bootx64.efi来消除安全启动(这是调用mmx64.efi的启动),并直接引导到UEFI版本的GRUB。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/656062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档