[pve-devel] [PATCH qemu-server v5 16/32] backup: fleecing: use exact size when allocating non-raw fleecing images

Fiona Ebner f.ebner at proxmox.com
Fri Mar 21 14:48:36 CET 2025


A non-1KiB aligned source image could cause issues when used with
qcow2 fleecing images, e.g. for an image with size 4.5 KiB:
> Size mismatch for 'drive-tpmstate0-backup-fleecing' - sector count 10 != 9

Raw images are attached to QEMU with an explicit 'size' argument, so
rounding up before allocation doesn't matter, but it does for qcow2.

Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---

New in v5.

 PVE/VZDump/QemuServer.pm | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/PVE/VZDump/QemuServer.pm b/PVE/VZDump/QemuServer.pm
index 4a258895..6562aba6 100644
--- a/PVE/VZDump/QemuServer.pm
+++ b/PVE/VZDump/QemuServer.pm
@@ -558,7 +558,15 @@ my sub allocate_fleecing_images {
 		my $name = "vm-$vmid-fleece-$n";
 		$name .= ".$format" if $scfg->{path};
 
-		my $size = PVE::Tools::convert_size($di->{'block-node-size'}, 'b' => 'kb');
+		my $size;
+		if ($format ne 'raw') {
+		    # Since non-raw images cannot be attached with an explicit 'size' parameter to
+		    # QEMU later, pass the exact size to the storage layer. This makes qcow2
+		    # fleecing images work for non-1KiB-aligned source images.
+		    $size = $di->{'block-node-size'}/1024;
+		} else {
+		    $size = PVE::Tools::convert_size($di->{'block-node-size'}, 'b' => 'kb');
+		}
 
 		$di->{'fleece-volid'} = PVE::Storage::vdisk_alloc(
 		    $self->{storecfg}, $fleecing_storeid, $vmid, $format, $name, $size);
-- 
2.39.5





More information about the pve-devel mailing list