[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