我一直试图安装POP-OS20.10,但无法从usb映像启动:https://pop.system76.com/。我从UEFI获得的错误消息是:
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() failedaskubuntu.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上安装了弧线。
发布于 2021-06-27 20:34:25
ISO9660文件系统当然是只读的,是的。
但是,一个UEFI可引导的ISO映像已经为USB所用,它不仅仅是一个ISO9660文件系统:它还应该包含一个嵌入其中的辅助引导映像,以及一个嵌入式分区表,使它看起来像一个具有多个分区的HDD映像,而不仅仅是一个ISO9660文件系统。
一个常规的不可引导的ISO映像可以很容易地通过file命令来识别:
# 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映像这样做,您将得到完全不同的信息:
# 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:
# 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兼容的引导扇区:
# 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系统分区。这正是第二个分区的内容。
# 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变体)。它可以作为可写的安装:
# 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。
https://unix.stackexchange.com/questions/656062
复制相似问题