From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id C54451FF161 for ; Tue, 13 Aug 2024 15:29:05 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 230D91F44; Tue, 13 Aug 2024 15:28:46 +0200 (CEST) From: Fiona Ebner To: pve-devel@lists.proxmox.com Date: Tue, 13 Aug 2024 15:28:21 +0200 Message-Id: <20240813132829.117460-18-f.ebner@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240813132829.117460-1-f.ebner@proxmox.com> References: <20240813132829.117460-1-f.ebner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.054 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [PATCH qemu-server v2 17/25] backup: keep track of block-node size instead of volume size X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" For fleecing, the size needs to match exactly with what QEMU sees. In particular, EFI disks might be attached with a 'size=' option, meaning that size can be different from the volume's size. Commit 36377acf ("backup: disk info: also keep track of size") introduced size tracking and it was only used for fleecing since then, so replace the existing 'size' key in the device info hash and replace it with an explicit 'block-node-size' for clarity. Should also help with the following issue reported in the community forum: https://forum.proxmox.com/threads/152202 Fixes: 36377acf ("backup: disk info: also keep track of size") Signed-off-by: Fiona Ebner --- New in v2. PVE/VZDump/QemuServer.pm | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/PVE/VZDump/QemuServer.pm b/PVE/VZDump/QemuServer.pm index c46e607c..98685127 100644 --- a/PVE/VZDump/QemuServer.pm +++ b/PVE/VZDump/QemuServer.pm @@ -106,6 +106,9 @@ sub prepare { PVE::Storage::activate_volumes($self->{storecfg}, $vollist); + my $block_info = mon_cmd($vmid, "query-block"); + $block_info = { map { $_->{device} => $_ } $block_info->@* }; + foreach my $ds (sort keys %$drivehash) { my $drive = $drivehash->{$ds}; @@ -133,11 +136,22 @@ sub prepare { die "cannot determine size and format of volume '$volid' - $@\n" if $@; } + # The size for fleecing images needs to be exactly the same size as QEMU sees. E.g. EFI disk + # can be attached with a smaller size then the underyling image on the storage. + my $block_node_size = + eval { $block_info->{"drive-$ds"}->{inserted}->{image}->{'virtual-size'}; }; + if (!$block_node_size) { + # TPM state is not attached yet and will be attached with same size, so don't warn then. + $self->loginfo("could not determine block node size of drive '$ds' - using fallback") + if $ds !~ m/^tpmstate\d+/; + $block_node_size = $size; + } + my $diskinfo = { path => $path, volid => $volid, storeid => $storeid, - size => $size, + 'block-node-size' => $block_node_size, format => $format, virtdev => $ds, qmdevice => "drive-$ds", @@ -551,7 +565,7 @@ my sub allocate_fleecing_images { my $name = "vm-$vmid-fleece-$n"; $name .= ".$format" if $scfg->{path}; - my $size = PVE::Tools::convert_size($di->{size}, 'b' => 'kb'); + my $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); @@ -600,7 +614,7 @@ my sub attach_fleecing_images { my $drive = "file=$path,if=none,id=$devid,format=$format,discard=unmap"; # Specify size explicitly, to make it work if storage backend rounded up size for # fleecing image when allocating. - $drive .= ",size=$di->{size}" if $format eq 'raw'; + $drive .= ",size=$di->{'block-node-size'}" if $format eq 'raw'; $drive =~ s/\\/\\\\/g; my $ret = PVE::QemuServer::Monitor::hmp_cmd($vmid, "drive_add auto \"$drive\"", 60); die "attaching fleecing image $volid failed - $ret\n" if $ret !~ m/OK/s; -- 2.39.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel