public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Michal Fox <me@dualfroz.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH qemu-server] fix #4012: migrate: mention snapshots referencing a local ISO image
Date: Tue,  6 Oct 2026 08:52:53 +0000	[thread overview]
Message-ID: <20261006085253.7-1-me@dualfroz.com> (raw)

When a VM has no local ISO image attached anymore, but one of its
snapshots still references it, migration fails with:

  can't migrate local disk 'local:iso/debian.iso': local cdrom image

which does not tell where the image is coming from, since it is not
visible in the current configuration of the VM.

Add the names of the snapshots referencing the image to the error in
that case, like it is already done for a physical CD/DVD drive. The
check for the physical drive now reuses the same hint.

Signed-off-by: Michal Fox <me@dualfroz.com>
---
Tested with a new migration test for an ISO image on local storage
that is only referenced in a snapshot. Without the fix, the error does
not contain the snapshot name. The whole qemu-server test suite passes.

The test needed the ISO in the mocked volume list and 'iso' content on
the mocked 'local' storage.

The GUI still only shows 'Cannot migrate VM with local CD/DVD' in that
case, which could be done as a follow-up in pve-manager.

 src/PVE/QemuMigrate.pm             | 14 ++++-----
 src/test/run_qemu_migrate_tests.pl | 47 ++++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+), 7 deletions(-)

diff --git a/src/PVE/QemuMigrate.pm b/src/PVE/QemuMigrate.pm
index 8da6f15d..a9b69898 100644
--- a/src/PVE/QemuMigrate.pm
+++ b/src/PVE/QemuMigrate.pm
@@ -412,15 +412,15 @@ sub scan_local_volumes {
             }
 
             my $snaprefs = $attr->{referenced_in_snapshot};
+            my $snapshot_hint = '';
+            if (defined($snaprefs) && !$attr->{is_attached}) {
+                my $snapnames = join(', ', sort keys %$snaprefs);
+                $snapshot_hint = " (referenced in snapshot - $snapnames)";
+            }
 
             if ($attr->{cdrom}) {
                 if ($volid eq 'cdrom') {
-                    my $msg = "can't migrate local cdrom drive";
-                    if (defined($snaprefs) && !$attr->{is_attached}) {
-                        my $snapnames = join(', ', sort keys %$snaprefs);
-                        $msg .= " (referenced in snapshot - $snapnames)";
-                    }
-                    &$log_error("$msg\n");
+                    &$log_error("can't migrate local cdrom drive$snapshot_hint\n");
                     return;
                 }
                 return if $volid eq 'none';
@@ -475,7 +475,7 @@ sub scan_local_volumes {
                     $local_volumes->{$volid}->{ref} = 'generated';
                     return;
                 }
-                die "local cdrom image\n";
+                die "local cdrom image$snapshot_hint\n";
             }
 
             my ($path, $owner) = PVE::Storage::path($storecfg, $volid);
diff --git a/src/test/run_qemu_migrate_tests.pl b/src/test/run_qemu_migrate_tests.pl
index 05eed1d9..49248ed9 100755
--- a/src/test/run_qemu_migrate_tests.pl
+++ b/src/test/run_qemu_migrate_tests.pl
@@ -37,6 +37,7 @@ my $storage_config = {
         local => {
             content => {
                 images => 1,
+                iso => 1,
             },
             path => "/var/lib/vz",
             type => "dir",
@@ -346,6 +347,17 @@ my $source_vdisks = {
             'volid' => 'local-dir:4567/vm-4567-state-snap2.raw',
         },
     ],
+    'local' => [
+        {
+            'ctime' => 1589439681,
+            'format' => 'iso',
+            'parent' => undef,
+            'size' => 663748608,
+            'used' => 663748608,
+            'vmid' => '0',
+            'volid' => 'local:iso/debian.iso',
+        },
+    ],
     'local-lvm' => [
         {
             'ctime' => '1589277334',
@@ -1236,6 +1248,41 @@ my $tests = [
             },
         },
     },
+    {
+        name => '105_local_iso_in_snapshot',
+        target => 'pve1',
+        vmid => 105,
+        vm_status => {
+            running => 0,
+        },
+        config_patch => {
+            snapshots => {
+                ohsnap => {
+                    ide2 => 'local:iso/debian.iso,media=cdrom',
+                },
+            },
+        },
+        expected_calls => {},
+        expect_die =>
+            "can't migrate local disk 'local:iso/debian.iso': local cdrom image (referenced in snapshot - ohsnap)",
+        expected => {
+            source_volids => local_volids_for_vm(105),
+            target_volids => {},
+            vm_config => get_patched_config(
+                105,
+                {
+                    snapshots => {
+                        ohsnap => {
+                            ide2 => 'local:iso/debian.iso,media=cdrom',
+                        },
+                    },
+                },
+            ),
+            vm_status => {
+                running => 0,
+            },
+        },
+    },
     {
         name => '105_cdrom',
         target => 'pve1',
-- 
2.43.0




             reply	other threads:[~2026-10-06  8:53 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-06  8:52 Michal Fox [this message]
2026-10-06 10:00 ` [PATCH qemu-server] fix #4012: migrate: mention snapshots referencing a local ISO image Fiona Ebner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261006085253.7-1-me@dualfroz.com \
    --to=me@dualfroz.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal