我已经在我的 USB 磁盘上创建了分区parted
parted /dev/sdb
mklabel gpt
mkpart boot fat32 0% 1024MB
set 1 esp on
set 1 boot on
然后我格式化了分区
mkfs.vfat -F 32 /dev/sdb1
安装并复制我的文件
最后,我跑了:
efibootmgr --create --disk /dev/sdb --part 1 --loader /EFI/BOOT/syslinux.efi --label "Syslinux" --unicode
之后,我无法再挂载该分区:
# mount /dev/sdb1 /mnt/tmp/
mount: /mnt/tmp: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error.
dmesg(1) may have more information after failed mount system call.
但该磁盘作为可启动 UEFI 磁盘,因此分区仍然存在。我就是无法安装它!
我在 Debian 12 上这样做
这是strace:https://ctxt.io/2/AABQzO6_EQ
更新:
这很奇怪:
我刚刚发现,如果我首先使用以下命令映射它,我可以安装分区kpartx
:
kpartx -a -p -kpartx- -s -v /dev/sdb
mount /dev/mapper/sdb-kpartx-1 /mnt/tmp/
答案1
看来您需要加载以下附加内核模块才能挂载 EFI 分区:
efi_pstore
efivarfs
答案2
您的内核是否没有CONFIG_EFI_PARTITION
启用该选项(标题为“EFI GUID 分区支持”,这意味着 GPT 分区表)?
这意味着内核将无法解析 GPT 分区表,并且需要用户空间工具,例如kpartx
为各个分区构建映射。
kpartx
自带了解析 MBR 和 GPT 分区表的代码,因此即使内核不理解 GPT,它也能工作。
由于 GPT 分区表包含保护性MBR,不支持 GPT 的内核通常会在任何 GPT 分区磁盘上检测到类型 0xee 的单个 MBR 主分区。该分区将覆盖整个磁盘,或者 MBR 分区表可以处理的 2 TB 左右。它的目的只是向任何仅 MBR 的操作系统和分区工具指示“此磁盘正在被您不知道的东西使用”。