我尝试在LVM上递归创建LVM但似乎无法提供此功能。我做的方式是这样的:
首先,我在物理设备上创建了一个物理卷和一个卷组
$ vgcreate vgtest /dev/sda
Physical volume "/dev/sda" successfully created.
Volume group "vgtest" successfully created
vgtest
其次,我在创建的逻辑卷上创建了一个逻辑卷
$ lvcreate -n lvtest -L 1G vgtest
Logical volume "lvtest" created.
然后,我尝试在逻辑卷上创建LVM lvtest
,但显示失败信息:
$ vgcreate vgtest_recursive /dev/vgtest/lvtest
Cannot use /dev/vgtest/lvtest: device is an LV
我们可以使用LVM只在设备上创建卷,这与luks的做法不一致:luks可以用于在任何文件上创建文件甚至其他设备。现在,如果我打算以递归方式在另一个 LVM 中创建 LVM,我需要在两层 LVM 之间利用 luks。
LVM 设计选择背后的理由是什么?它似乎符合 Linux 的基本原则:“一切皆文件”。
答案1
默认情况下禁用“嵌套”LVM。如果你想在 VG 中创建 VG,你首先需要scan_lvs
在LVM配置。此类配置通常与虚拟化一起使用(LV 用作来宾系统的后备块设备),因此您通常不希望使用这些 VG 以避免主机和来宾 LVM 工具之间发生冲突。该scan_lvs
属性的评论/etc/lvm/lvm.conf
进一步解释了这一点:
# Configuration option devices/scan_lvs.
# Scan LVM LVs for layered PVs, allowing LVs to be used as PVs.
# When 1, LVM will detect PVs layered on LVs, and caution must be
# taken to avoid a host accessing a layered VG that may not belong
# to it, e.g. from a guest image. This generally requires excluding
# the LVs with device filters. Also, when this setting is enabled,
# every LVM command will scan every active LV on the system (unless
# filtered), which can cause performance problems on systems with
# many active LVs. When this setting is 0, LVM will not detect or
# use PVs that exist on LVs, and will not allow a PV to be created on
# an LV. The LVs are ignored using a built in device filter that
# identifies and excludes LVs.
# This configuration option has an automatic default value.
# scan_lvs = 0
答案2
感觉你误解了 LVM 的设计:卷组是由物理卷组成的。您可以在任何块设备上创建它。因此,您需要pvcreate
先lvtest
创建一个包含它的 VG。