没有任何启动分区的单个加密系统分区——这怎么可能?

没有任何启动分区的单个加密系统分区——这怎么可能?

我最近安装的 Lubuntu KVM 虚拟机的虚拟磁盘映像分区如下所示:

# lsblk -f
NAME   FSTYPE      LABEL              UUID                                 FSAVAIL FSUSE% MOUNTPOINT
loop0  squashfs 
                                                                 0   100% /rofs
... SNIP ...

sr0    iso9660     Ubuntu 19.10 amd64 2019-10-17-12-53-34-00                     0   100% /cdrom
vda                                                                                       
└─vda1 crypto_LUKS                    xxxx-yyyy-zzzz    

换句话说,它有一个加密的系统分区 ( vda1),并且没有启动分区。 (注意。我启动到实时映像来检查/调整加密分区的大小,我对缺少启动分区感到惊讶。)

问题:尽管没有启动分区,系统如何能够启动(因为它确实启动了!)?

为了让我更好地理解后续问题:

  • 引导是否有效,因为 KVM 自己管理解密?
  • 或者,这也适用于主机系统吗?
  • 如果它也可以在独立设置上工作,为什么我们要创建(未加密的)启动分区,而不仅仅是像这样的独立加密分区?
  • 如果是 KVM 管理解密,那么如何确保 KVMcryptsetup安装了用于创建加密设备的正确/兼容版本?如果版本不匹配怎么办?
  • 如果是 KVM 管理解密,那么我假设在使用全盘加密安装 Lubuntu 时,安装程​​序注意到它正在虚拟机中运行,并决定创建一个加密分区就足够了。是这样吗?如果是这样,为什么它不询问我是否想要带有启动分区的“正常”设置?

备注:确实,启动时打开加密磁盘的 GUI 相当简洁。这是一个基于文本的图形用户界面,我在那里一张单曲尝试输入密码短语来打开加密分区,完全没有任何反馈(星号似乎没有显示至少我输入了多少个字符)。之前我假设原因是 Lubuntu 比 Ubuntu 简单,但现在我怀疑(如上所述)KVM 自己管理解密。

答案1

有几种可能:

  • 使用 MBR/DOS 分区、具有加密盘支持的 GRUB 以及 LUKS 1(或具有 PBKDF2 密码的 LUKS 2)时,不需要引导分区。 GRUB 的未来版本可能会完全支持 LUKS 2,但据我所知,它还没有完全实现(目前尚不支持 argon2i)。

  • kernel/initramfs 可以存储在外部,并通过-kernel -initrd向 qemu 传递适当的选项由 qemu/KVM 直接加载。在这种情况下,qemu 本身充当引导加载程序,因此虚拟机内也不需要引导分区。

  • 内核映像可能存在于第一个分区之前的特定设备偏移处 - 不是分区/文件系统/文件,而是直接作为原始数据写入设备,并且引导加载程序知道在哪里查找它。这种方法通常仅出现在嵌入式设备上。


为什么我们要创建(未加密的)启动分区,而不仅仅是像这样的独立加密分区?

问题是引导加载程序毕竟必须去某个地方,因此对于 MBR/DOS 分区,很多操作都在未分区的空间中进行。当然这可以工作......直到两个不同的东西尝试将它们的数据放置在相同的偏移量并互相覆盖。

我们决定对这些进行适当的分区会更好。因此,使用 GPT,您可以获得一个 EFI 分区,并且/或者 GRUB 获得一个用于其核心映像的 BIOS_grub 分区,等等。

理想情况下,您可以查看分区表并了解它是如何设置的,而不是挠头询问事情是如何工作的,因为它都隐藏在分区之外的某个地方。

相关内容