[pve-devel] [PATCH qemu-server] check if base volumes are unused before deleting a template

Dominik Csapak d.csapak at proxmox.com
Fri Oct 13 10:00:53 CEST 2017


we only checked if a vm had in use base disks when deleting them,
at which point we do not stop to delete the vm even when a
disk deletion fails, which means we could successfully delete the config
and all not used (base) disks of a template, resulting in left over vm disks

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 PVE/QemuServer.pm | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 2b6fda9..54775c1 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -2111,6 +2111,23 @@ sub destroy_vm {
 
     PVE::QemuConfig->check_lock($conf) if !$skiplock;
 
+    if ($conf->{template}) {
+	# check if any base image is still used by a linked clone
+	foreach_drive($conf, sub {
+		my ($ds, $drive) = @_;
+
+		return if drive_is_cdrom($drive);
+
+		my $volid = $drive->{file};
+
+		return if !$volid || $volid =~ m|^/|;
+
+		die "base volume '$volid' is still in use by linked cloned\n"
+		    if PVE::Storage::volume_is_base_and_used($storecfg, $volid);
+
+	});
+    }
+
     # only remove disks owned by this VM
     foreach_drive($conf, sub {
 	my ($ds, $drive) = @_;
-- 
2.11.0





More information about the pve-devel mailing list