When discovering a new volume group (VG), for example on boot, LVM triggers autoactivation. With the default settings, this activates all logical volumes (LVs) in the VG. Activating an LV creates a device-mapper device and a block device under /dev/mapper.
Autoactivation is problematic for shared LVM storages, see #4997 [1]. For the inherently local LVM-thin storage it is less problematic, but it still makes sense to avoid unnecessarily activating LVs and thus making them visible on the host at boot. To avoid that, disable autoactivation after creating new LVs. lvcreate on trixie does not accept the --setautoactivation flag for thin LVs yet, support was only added with [2]. Hence, setting the flag is is done with an additional lvchange command for now. With this setting, LVM autoactivation will not activate these LVs, and the storage stack will take care of activating/deactivating LVs when needed. The flag is only set for newly created LVs, so LVs created before this patch can still trigger #4997. To avoid this, users will be advised to run a script to disable autoactivation for existing LVs. [1] https://bugzilla.proxmox.com/show_bug.cgi?id=4997 [2] https://gitlab.com/lvmteam/lvm2/-/commit/1fba3b876bbd912a53e13bdf1b4de8792e8400d4 Signed-off-by: Friedrich Weber <f.we...@proxmox.com> --- Notes: - would be great to get your opinion on whether we should consider LVM-thin storages in this series or not. changes since v3: - run perltidy - since we now know that lvcreate will support the flag in the future, reword the code comment and add TODO for PVE 10 - reword commit message accordingly - reword commit message to mention the flag is only set for newly created LVs new in v3 src/PVE/Storage/LvmThinPlugin.pm | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/PVE/Storage/LvmThinPlugin.pm b/src/PVE/Storage/LvmThinPlugin.pm index c244c91..fe8a986 100644 --- a/src/PVE/Storage/LvmThinPlugin.pm +++ b/src/PVE/Storage/LvmThinPlugin.pm @@ -83,6 +83,18 @@ sub filesystem_path { return wantarray ? ($path, $vmid, $vtype) : $path; } +# lvcreate on trixie does not accept --setautoactivation for thin LVs yet, so set it via lvchange +# TODO PVE 10: evaluate if lvcreate accepts --setautoactivation +my $set_lv_autoactivation = sub { + my ($vg, $lv, $autoactivation) = @_; + + my $cmd = [ + '/sbin/lvchange', '--setautoactivation', $autoactivation ? 'y' : 'n', "$vg/$lv", + ]; + eval { run_command($cmd); }; + warn "could not set autoactivation: $@" if $@; +}; + sub alloc_image { my ($class, $storeid, $scfg, $vmid, $fmt, $name, $size) = @_; @@ -112,6 +124,7 @@ sub alloc_image { ]; run_command($cmd, errmsg => "lvcreate '$vg/$name' error"); + $set_lv_autoactivation->($vg, $name, 0); return $name; } @@ -298,6 +311,7 @@ sub clone_image { my $cmd = ['/sbin/lvcreate', '-n', $name, '-prw', '-kn', '-s', $lv]; run_command($cmd, errmsg => "clone image '$lv' error"); + $set_lv_autoactivation->($vg, $name, 0); return $name; } @@ -346,7 +360,7 @@ sub volume_snapshot { my $cmd = ['/sbin/lvcreate', '-n', $snapvol, '-pr', '-s', "$vg/$volname"]; run_command($cmd, errmsg => "lvcreate snapshot '$vg/$snapvol' error"); - + # disabling autoactivation not needed, as -s defaults to --setautoactivationskip y } sub volume_snapshot_rollback { @@ -360,6 +374,7 @@ sub volume_snapshot_rollback { $cmd = ['/sbin/lvcreate', '-kn', '-n', $volname, '-s', "$vg/$snapvol"]; run_command($cmd, errmsg => "lvm rollback '$vg/$snapvol' error"); + $set_lv_autoactivation->($vg, $volname, 0); } sub volume_snapshot_delete { -- 2.47.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel