[pve-devel] [PATCH v4 qemu-server 6/12] migration: scan_local_volumes: adapt refs handling

Aaron Lauterer a.lauterer at proxmox.com
Fri Jun 16 11:57:02 CEST 2023

Since we don't scan all storages for matching disk images anymore for a
migration don't have any images found via storage alone. They will be
referenced in the config somehwere.

Therefore, there is no need for the 'storage' ref.
A new ref, 'config_unused' is introduced to distinguish between a disk
image that is attached or not (unusedX in the config).

We can now also detect if a disk image is only referenced in the pending

The refs are mostly used for informational use to print out in the logs
why a disk image is part of the migration. Except for the 'config' case.

The 'config' case is used to determine if the disk image needs to be
live migrated if the VM is currently running. Therefore, only set the
ref to 'config' if it is a used/attached disk image.

Signed-off-by: Aaron Lauterer <a.lauterer at proxmox.com>
changes since v3:
Parts of this were touched by patch 1, now its own dedicated patch.
Different changes than in the previous version, overworking the whole
refs handling a lot more.

 PVE/QemuMigrate.pm | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm
index 5f61bcd..9e80866 100644
--- a/PVE/QemuMigrate.pm
+++ b/PVE/QemuMigrate.pm
@@ -361,8 +361,11 @@ sub scan_local_volumes {
 	    $self->target_storage_check_available($storecfg, $targetsid, $volid);
 	    return if $scfg->{shared} && !$self->{opts}->{remote};
-	    $local_volumes->{$volid}->{ref} = $attr->{referenced_in_config} ? 'config' : 'snapshot';
-	    $local_volumes->{$volid}->{ref} = 'storage' if $attr->{is_unused};
+	    $local_volumes->{$volid}->{ref} = 'pending' if $attr->{referenced_in_pending};
+	    $local_volumes->{$volid}->{ref} = 'snapshot' if $attr->{referenced_in_snapshot};
+	    if ($attr->{referenced_in_config}) {
+		$local_volumes->{$volid}->{ref} = $attr->{is_unused} ? 'config_unused' : 'config';
+	    }
 	    $local_volumes->{$volid}->{ref} = 'generated' if $attr->{is_tpmstate};
 	    $local_volumes->{$volid}->{bwlimit} = $self->get_bwlimit($sid, $targetsid);
@@ -425,14 +428,16 @@ sub scan_local_volumes {
 	foreach my $vol (sort keys %$local_volumes) {
 	    my $type = $replicatable_volumes->{$vol} ? 'local, replicated' : 'local';
 	    my $ref = $local_volumes->{$vol}->{ref};
-	    if ($ref eq 'storage') {
-		$self->log('info', "found $type disk '$vol' (via storage)\n");
-	    } elsif ($ref eq 'config') {
+	    if ($ref eq 'config') {
 		&$log_error("can't live migrate attached local disks without with-local-disks option\n", $vol)
 		    if $self->{running} && !$self->{opts}->{"with-local-disks"};
 		$self->log('info', "found $type disk '$vol' (in current VM config)\n");
+	    } elsif ($ref eq 'config_unused') {
+		$self->log('info', "found $type, unused disk '$vol' (in current VM config)\n");
 	    } elsif ($ref eq 'snapshot') {
 		$self->log('info', "found $type disk '$vol' (referenced by snapshot(s))\n");
+	    } elsif ($ref eq 'pending') {
+		$self->log('info', "found $type disk '$vol' (pending change)\n");
 	    } elsif ($ref eq 'generated') {
 		$self->log('info', "found generated disk '$vol' (in current VM config)\n");
 	    } else {

More information about the pve-devel mailing list