引导到加密的 Debian 安装,该安装在 LVM-on-LUKS 上具有 /boot

引导到加密的 Debian 安装,该安装在 LVM-on-LUKS 上具有 /boot

我有一个 grub2 引导加载程序的设置,系统的其余部分位于加密分区 (LVM-on-LUKS) 上。我在 LUKS 容器内安装了两个操作系统:Kali Sana 和 Debian 8,以及一个共享交换分区。

这是通过安装带有全盘加密的 Kali,然后为 Debian 腾出空间来设置的。 grub 安装来自 Kali。

我完全意识到为 Debian 创建第二个 /boot 分区会更容易。然而,考虑到这种设置方式,Debian 引导加载程序没有剩余空间,调整所有内容的大小以腾出空间将是一件痛苦的事情。

所以,这是我在 grub 下需要做的事情:

  • 挂载加密分区(已经设法做到这一点)
  • 启动 Debian 的 initramfs 和内核(这是有问题的地方)。

我对此做了一些研究,并尝试通过编辑 /boot/grub/custom.cfg 文件来做到这一点。每次编辑后,我都会运行sudo grub-mkconfigsudo update-grub。然后我重新启动看看是否可以启动。虽然它可以解密 LUKS 容器,但无法找到 initramfs 或内核。

这是我的 custom.cfg 文件。注意:我对这一切的作用很模糊。这很可能是完全错误的。

menuentry "Debian 8 Jessie"{
  insmod luks
  insmod lvm
  cryptdevice=UUID=ffe7a64d-e552-4db9-b0f3-1e42be118059:cryptolvm
  set root=/dev/Outsider-vg/Outsider-debianroot
  linux /boot/vmlinuz-3.16.0-4-amd64 root=/dev/Outsider-vg/Outsider-debianroot
  initrd /boot/initrd.img-3.16.0-4-amd64
}

关于上述内容的注意事项:cryptdevice=UUID=ffe7a64d-e552-4db9-b0f3-1e42be118059:cryptolvm最初是set root=/dev/sda5.此版本的文件无法解密容器。请注意,我已经知道如何让它发挥作用,我只是在搞乱它,看看更改它是否有帮助。

我一直在参考这个链接寻求帮助编辑此文件。

基本上,我需要知道在 LUKS 分区解密后将 grub 指向正确的 initramfs 和 vmlinuz 文件的语法。它们位于逻辑卷下Outsider--debianroot。我唯一真正的问题是我不知道该怎么做。

我很抱歉说得有些含糊。部分问题是我不确定我在寻找什么。如果您没有答案,但可以指导我编辑 custom.cfg 的综合指南,我也将不胜感激。如果您需要更多详细信息,请告诉我。

编辑:经过进一步研究,我发现:

基本上,我需要为 Grub 提供 LVM 上根目录的正确路径。在对文件系统进行一番研究后,我发现了两条可行的路径:/dev/mapper/volumeGroup-volumeName/dev/volumeGroup/volumeName。在上述示例中,它们是/dev/mapper/Outsider--vg-Outsider--debianroot/dev/Outsider-vg/Outsider-debianroot

我需要知道哪个是正确的根目录的路径,以允许该发行版启动。两者之一都是正确的,两者都需要一起使用,或者我缺少一条不同的路径,我需要使用它。有任何想法吗?

此外,这两条路径有什么区别?它们各自指向什么?/dev/mapper/volumeGroup和 只是 和有什么不一样/dev/volumeGroup

编辑2:我相信这/dev/volumeGroup/volumeName是正确的路径,基于最终语法本教程。我将对此进行实验并报告。

注意:等我解决了这个问题后,我会来清理这个问题。

答案1

你应该有类似的东西:

menuentry 'Debian' --class debian --class gnu-linux --class gnu --class os {
  load_video
  set gfxpayload=keep
  insmod gzio
  insmod ext2
  insmod fat
  echo  'Loading Linux ...'
  linux /boot/vmlinuz-3.16.0-4-amd64 cryptdevice=UUID=ffe7a64d-e552-4db9-b0f3-1e42be118059:cryptolvm root=/dev/Outsider-vg/Outsider-debianroot rw
  echo  'Loading initial ramdisk ...'
  initrd /boot/initrd.img-3.16.0-4-amd64
}

但请注意,它insmod part_gpt应该已经添加到您的 grub.cfg 中。lvm并且luks不需要,因为内核将处理它(您需要适当的内核挂钩),grub 仅加载 Linux 映像。

答案2

在 Linux 拥有设备映射器子系统之前,早在 2.4.x 及更早的内核系列中,就有 Linux LVM 版本 1。现代版本是版本 2。

LVM v1 使用专门的/dev/vgName/lvName- 样式路径。

当引入设备映射器子系统和 LVM v2 时,新型 LVM 需要向后兼容旧版本,因此它保留旧式路径名作为真实设备的符号链接。

当前的 LVM v2 使用设备映射器,因此“真实”设备遵循其规则:它们将是/dev/dm-<number>.这对于低级设备映射器用户空间工具(例如 )来说很容易dmsetup,但对人类来说不方便,因此每个子系统(多路径、软件 RAID、磁盘加密、LVM v2 等)还将维护更人性化的名称,作为指向后面的符号链接到相关/dev/dm-*设备。这些链接通常位于 下/dev/mapper/,但为了向后兼容可能存在例外情况。

因此,当前的 LVM 设备命名方案使用/dev/mapper/vgName-lvNameschema 作为“官方”名称,尽管它们通常实现为/dev/dm-<number>设备的符号链接。但由于传统的 LVMv1 风格的命名方案简单方便,因此仍然得到维护。由于官方方案和遗留方案都以相同的方式实现为符号链接,因此它们之间实际上没有实际差异。

唯一的例外可能是 initramfs 内,为了简单起见,启动脚本可能被设计为仅处理一种特定形式的 LVM 设备名称。如果是这样,您的发行版文档应该明确提及它。

(曾经有一些内核/udev版本允许多个设备节点使用特定的主/次设备号组合,但这显然比它的价值更麻烦,打开了竞争条件和其他恶作剧的可能性。现代系统通常只创建每个设备下有一个实际设备节点/dev;任何别名都必须是符号链接。)

相关内容