[pve-devel] [PATCH container v5 3/4] fix #3711: lxc: allow removing unused mp if storage no longer exists

Michael Köppl m.koeppl at proxmox.com
Tue May 13 10:03:54 CEST 2025


Detaching a mount point with a removed underlying storage causes it to
be labeled as an unused disk. With this change, removing an unused disk
with a removed underlying storage causes it to be removed from the
configuration instead of failing. Deleting the mount point is skipped in
this case to avoid failing and to allow removing the unused volume from
the CT configuration and to achieve behavior consistent with destroying
a CT.

Co-authored-by: Stefan Hrdlicka
Signed-off-by: Michael Köppl <m.koeppl at proxmox.com>
---
 src/PVE/LXC/Config.pm | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm
index 7f76b34..15d52cb 100644
--- a/src/PVE/LXC/Config.pm
+++ b/src/PVE/LXC/Config.pm
@@ -1470,11 +1470,17 @@ sub vmconfig_hotplug_pending {
     foreach my $opt (sort keys %$pending_delete_hash) {
 	next if $selection && !$selection->{$opt};
 	eval {
+	    my $mp = $class->parse_volume($opt, $conf->{$opt});
+	    my ($storeid, undef) = PVE::Storage::parse_volume_id($mp->{volume});
+
 	    if ($LXC_FASTPLUG_OPTIONS->{$opt}) {
 		# pass
-	    } elsif ($opt =~ m/^unused(\d+)$/) {
+	    } elsif (
+		$opt =~ m/^unused(\d+)$/
+		&& PVE::Storage::storage_config($storecfg, $storeid, 1)
+	    ) {
 		PVE::LXC::delete_mountpoint_volume($storecfg, $vmid, $conf->{$opt})
-		    if !$class->is_volume_in_use($conf, $conf->{$opt}, 1, 1);
+		    if !$class->is_volume_in_use($conf, $mp->{volume}, 1, 1);
 	    } elsif ($opt eq 'swap') {
 		$hotplug_memory->(undef, 0);
 	    } elsif ($opt eq 'cpulimit') {
@@ -1558,13 +1564,17 @@ sub vmconfig_apply_pending {
 	next if $selection && !$selection->{$opt};
 	eval {
 	    my $mp = $class->parse_volume($opt, $conf->{$opt});
+	    my ($storeid, undef) = PVE::Storage::parse_volume_id($mp->{volume});
 
 	    if ($opt =~ m/^mp(\d+)$/) {
 		if ($mp->{type} eq 'volume') {
 		    $class->add_unused_volume($conf, $mp->{volume})
 			if !$class->is_volume_in_use($conf, $conf->{$opt}, 1, 1);
 		}
-	    } elsif ($opt =~ m/^unused(\d+)$/) {
+	    } elsif (
+		$opt =~ m/^unused(\d+)$/
+		&& PVE::Storage::storage_config($storecfg, $storeid, 1)
+	    ) {
 		PVE::LXC::delete_mountpoint_volume($storecfg, $vmid, $conf->{$opt})
 		    if !$class->is_volume_in_use($conf, $mp->{volume}, 1, 1);
 	    } elsif ($opt =~ m/^net(\d+)$/) {
-- 
2.39.5





More information about the pve-devel mailing list