lsblk 说 EFI 分区的文件系统是 crypto_LUKS,而 diskutil 说它是 FAT32(双引导 arch/mac)

lsblk 说 EFI 分区的文件系统是 crypto_LUKS,而 diskutil 说它是 FAT32(双引导 arch/mac)

我试图在我的 MacBook 上双启动 Arch。起初,我尝试安装带有 LUKS 加密的 Arch。不幸的是,在指南的中间,我意识到它有点过时了,而且我不具备在没有指南的情况下继续安装的知识,所以我删除了所有内容并从头开始,这次没有加密。这很好,直到我无法做到mount /dev/<appleEFIpartition> /mnt/boot(如本指南)因为错误的文件系统,即 crypto_LUKS。我真的很惊讶这是怎么可能的,因为我没有加密我的 mac 引导加载程序,而且它仍然可以完美地工作,我可以启动到 macOS 并毫无问题地使用它(如果我加密我的引导加载程序,我预计我的计算机会崩溃) 。我决定仔细检查,macdiskutil说我的 EFI 是 FAT32(没有提及任何卷的 crypto_LUKS)。

我非常困惑这怎么可能。这里有截图我首先在 arch 安装介质上检查文件系统,然后diskutil从 macOS 中使用。

答案1

通常,LUKS 标头不会在格式化后保留下来。

设置:

# truncate -s 100M foobar.img
# losetup --find --show foobar.img
/dev/loop0
# parted /dev/loop0 mklabel gpt mkpart boot 1MiB 100%

卢克斯:

# cryptsetup luksFormat /dev/loop0p1
# wipefs /dev/loop0p1
DEVICE  OFFSET TYPE        UUID                                 LABEL
loop0p1 0x0    crypto_LUKS d9a4c128-1cb9-4252-a7ec-697ae4c35535
loop0p1 0x4000 crypto_LUKS d9a4c128-1cb9-4252-a7ec-697ae4c35535

胖的:

# mkfs.vfat /dev/loop0p1
# wipefs /dev/loop0p1
DEVICE  OFFSET TYPE UUID      LABEL
loop0p1 0x36   vfat 524F-02F3
loop0p1 0x0    vfat 524F-02F3
loop0p1 0x1fe  vfat 524F-02F3

因此,在 mkfs.vfat 之后,crypto_LUKS 标头签名就消失了。

然而,这毕竟是Linux……其中LUKS头是已知的东西,所以按理说它会被擦除。在另一个不使用 LUKS 的操作系统中,情况可能会有所不同。

修复已擦除的 LUKS 标头,可以同时拥有:

# wipefs /dev/loop0p1
DEVICE  OFFSET TYPE        UUID                 LABEL
loop0p1 0x0    crypto_LUKS key to try again ...
loop0p1 0x4000 crypto_LUKS
loop0p1 0x36   vfat        615E-AF44
loop0p1 0x1fe  vfat        615E-AF44

此时,如果指定的话,文件系统仍然可以正常安装:

# mount /dev/loop0p1 /mnt/foobar
mount: /mnt/foobar: unknown filesystem type 'crypto_LUKS'.
       dmesg(1) may have more information after failed mount system call.
# mount -t vfat /dev/loop0p1 /mnt/foobar
# grep foobar /proc/mounts
/dev/loop0p1 /mnt/foobar vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0

所以我们在同一设备上同时拥有 LUKS 和 vfat 魔法。

此时,您可以wipefs仅删除 LUKS 标头:

# umount /mnt/foobar
# wipefs -a -t crypto_LUKS /dev/loop0p1
/dev/loop0p1: 6 bytes were erased at offset 0x00000000 (crypto_LUKS): 4c 55 4b 53 ba be
/dev/loop0p1: 6 bytes were erased at offset 0x00004000 (crypto_LUKS): 53 4b 55 4c ba be

又回到了仅 vfat:

# wipefs /dev/loop0p1
DEVICE  OFFSET TYPE UUID      LABEL
loop0p1 0x36   vfat 615E-AF44
loop0p1 0x1fe  vfat 615E-AF44

并且它被检测为这样

# file -s /dev/loop0p1
/dev/loop0p1: DOS/MBR boot sector
# blkid /dev/loop0p1
/dev/loop0p1: SEC_TYPE="msdos" UUID="615E-AF44" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="boot" PARTUUID="e3d8e408-2e48-45c4-bd6d-9be685d95ed5"

并且它再次通过文件系统自动检测进行安装,因此-t vfat不再需要

# mount /dev/loop0p1 /mnt/foobar

相关内容