[pve-devel] [PATCH pve-storage v4 2/2] lvmthin: disable autoactivation for new logical volumes
Friedrich Weber
f.weber at proxmox.com
Mon Jul 7 10:03:28 CEST 2025
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.weber at 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
More information about the pve-devel
mailing list