backup: fleecing: use exact size when allocating non-raw fleecing images

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@proxmox.com>
Tested-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Reviewed-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Link: https://lore.proxmox.com/20250404133204.239783-12-f.ebner@proxmox.com
This commit is contained in:
Fiona Ebner 2025-04-04 15:31:46 +02:00 committed by Thomas Lamprecht
parent 9891d05a97
commit 6c7e74c9d0

View File

@ -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);