[pve-devel] [PATCH qemu-server 3/3] image convert: make using zeroinit with target-image-opts work

Fiona Ebner f.ebner at proxmox.com
Wed Jul 30 17:03:17 CEST 2025


Also add a test to witness this combination.

Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
 src/PVE/QemuServer/QemuImage.pm        | 17 +++++++++++------
 src/test/run_qemu_img_convert_tests.pl | 21 +++++++++++++++++++++
 2 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/src/PVE/QemuServer/QemuImage.pm b/src/PVE/QemuServer/QemuImage.pm
index f2cadd69..71be3abb 100644
--- a/src/PVE/QemuServer/QemuImage.pm
+++ b/src/PVE/QemuServer/QemuImage.pm
@@ -33,16 +33,16 @@ sub convert_iscsi_path {
 }
 
 my sub qcow2_target_image_opts {
-    my ($storecfg, $drive, @qcow2_opts) = @_;
+    my ($storecfg, $drive, $qcow2_opts, $zeroinit) = @_;
 
     # There is no machine version, the qemu-img binary version is what's important.
     my $version = PVE::QemuServer::Helpers::kvm_user_version();
 
+    my $blockdev_opts = { 'no-throttle' => 1 };
+    $blockdev_opts->{'zero-initialized'} = 1 if $zeroinit;
+
     my $blockdev = PVE::QemuServer::Blockdev::generate_drive_blockdev(
-        $storecfg,
-        $drive,
-        $version,
-        { 'no-throttle' => 1 },
+        $storecfg, $drive, $version, $blockdev_opts,
     );
 
     my $opts = [];
@@ -166,7 +166,12 @@ sub convert {
         # don't use any other drive options, those are intended for use with a running VM and just
         # use scsi0 as a dummy interface+index for now
         my $dst_drive = { file => $dst_volid, interface => 'scsi', index => 0 };
-        $dst_path = qcow2_target_image_opts($storecfg, $dst_drive, 'discard-no-unref=true');
+        $dst_path = qcow2_target_image_opts(
+            $storecfg,
+            $dst_drive,
+            ['discard-no-unref=true'],
+            $opts->{'is-zero-initialized'},
+        );
     } else {
         push @$cmd, '-O', $dst_format;
     }
diff --git a/src/test/run_qemu_img_convert_tests.pl b/src/test/run_qemu_img_convert_tests.pl
index 393fc4a8..8a0ad283 100755
--- a/src/test/run_qemu_img_convert_tests.pl
+++ b/src/test/run_qemu_img_convert_tests.pl
@@ -548,6 +548,27 @@ my $tests = [
                 . ",file.filename=/var/lib/vzsnapext/images/$vmid/vm-$vmid-disk-target.qcow2",
         ],
     },
+    {
+        name => "qcow2_external_snapshot_target_zeroinit",
+        parameters => [
+            "local:$vmid/vm-$vmid-disk-0.raw",
+            "localsnapext:$vmid/vm-$vmid-disk-target.qcow2",
+            1024 * 10,
+            { 'is-zero-initialized' => 1 },
+        ],
+        expected => [
+            "/usr/bin/qemu-img",
+            "convert",
+            "-p",
+            "-n",
+            "-f",
+            "raw",
+            "--target-image-opts",
+            "/var/lib/vz/images/$vmid/vm-$vmid-disk-0.raw",
+            "driver=zeroinit,file.discard-no-unref=true,file.driver=qcow2,file.file.driver=file"
+                . ",file.file.filename=/var/lib/vzsnapext/images/$vmid/vm-$vmid-disk-target.qcow2",
+        ],
+    },
     {
         name => "lvmqcow2_external_snapshot_target",
         parameters => [
-- 
2.47.2





More information about the pve-devel mailing list