On slow storages there is a chance the 10 second timeout is triggered when resizing a volume. If the timeout fires while the resize is in a certain state near the end, the operation can still complete successfully even though a timeout error is thrown. In that case the config is never updated and keeps the old, wrong size.
Because the config is out of sync, the volume is then displayed with the wrong size in the web interface. Link: https://bugzilla.proxmox.com/show_bug.cgi?id=7598 Signed-off-by: Jakob Klocker <[email protected]> --- src/PVE/Storage/Common.pm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/PVE/Storage/Common.pm b/src/PVE/Storage/Common.pm index 3932aee..ee2ea00 100644 --- a/src/PVE/Storage/Common.pm +++ b/src/PVE/Storage/Common.pm @@ -277,7 +277,17 @@ sub qemu_img_resize { push $cmd->@*, '-f', $format, $path, $size; $timeout = 10 if !$timeout; - run_command($cmd, timeout => $timeout); + eval { run_command($cmd, timeout => $timeout); }; + if (my $err = $@) { + + die $err if $err !~ /got timeout/; + + my $info = JSON::decode_json(qemu_img_info($path, $format)); + die $err if !$info; + + my $actual_size = $info->{'virtual-size'}; + die $err if !defined($actual_size) || $actual_size < $size; + } } 1; -- 2.47.3
