我正在尝试在 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。如果您将结果传输到其他系统上,您可能还需要摆弄然后pvscan
,vgscan
或者vgchange -ay ...
打开 LUKS 卷后,我没有进一步测试它。
你应该真的由于不明原因想要继续最初的尝试,您可以使用kpartx
检测任何东西内的分区。它将创建一个新的设备映射,此时您pvcreate
无论如何都将在设备映射(而不是“简单”分区)上使用。没有常见的 Linux 发行版会这样做,因此这必须全部“检测”并手动处理。