dm-crypt 容器内 LVM 分区上的 PV

dm-crypt 容器内 LVM 分区上的 PV

我正在尝试在 LUKS 上设置 LVM。这是我所做的:

head -c 100M /dev/zero > test-file
losetup /dev/loop0 test-file
cryptsetup luksFormat /dev/loop0
cryptsetup open /dev/loop0 cryptlvm
gdisk /dev/mapper/cryptlvm

然后我在那里放了一个 GPT 和一个单分区 8e00 LVM。

fdisk -l /dev/mapper/cryptlvm
# => /dev/mapper/cryptlvm-part1  2048 200670  198623  97M Linux LVM

然而

pvcreate /dev/mapper/cryptlvm-part1
# => Device /dev/mapper/cryptlvm-part1 not found.

该分区也没有显示lsblk。人们似乎普遍提倡在 LVM 下使用分区表,以确保分区程序看到某些内容,所以我想坚持这一点。当我跳过 LUKS 容器时,将 LVM 放在 GPT 之上的分区上没有任何问题。

当我尝试在分区上设置 LUKS 容器时,这也能正常工作,即 gdisk,然后 cryptsetup 到 LVM 分区。

我预计应该可以将分区方案放入 LUKS 容器中,然后在其中的单个分区上使用 LVM。我很感激任何关于为什么这(看起来)不可能的提示或解释。

答案1

Linux 内核是唯一处理分区的部分,不会尝试发现分区中的分区,因此尝试到此为止。

只需创建PV直接地加密虚拟机映射。设备映射扮演的是容器而不是分区的角色。

[...]
# cryptsetup open /dev/loop0 cryptlvm
# pvcreate /dev/mapper/cryptlvm
  Physical volume "/dev/mapper/cryptlvm" successfully created.
# pvs /dev/mapper/cryptlvm
  PV                   VG Fmt  Attr PSize  PFree 
  /dev/mapper/cryptlvm    lvm2 ---  98.00m 98.00m

然后您可以继续vgcreate

# vgcreate testvg /dev/mapper/cryptlvm 
  Volume group "testvg" successfully created
# vgs testvg
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   1   0   0 wz--n- 96.00m 96.00m

通常系统(这里可能是内核、事件和用户空间的混合)应该自动检测并激活 VG。如果您将结果传输到其他系统上,您可能还需要摆弄然后pvscanvgscan或者vgchange -ay ...打开 LUKS 卷后,我没有进一步测试它。

你应该真的由于不明原因想要继续最初的尝试,您可以使用kpartx检测任何东西内的分区。它将创建一个新的设备映射,此时您pvcreate无论如何都将在设备映射(而不是“简单”分区)上使用。没有常见的 Linux 发行版会这样做,因此这必须全部“检测”并手动处理。

相关内容