all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: Fiona Ebner <f.ebner@proxmox.com>
Cc: Thomas Lamprecht <t.lamprecht@proxmox.com>,
	Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Subject: Re: [pve-devel] [PATCH storage] plugin: file size info: use fallback for actual size
Date: Fri, 13 Jan 2023 12:50:04 +0100	[thread overview]
Message-ID: <20230113115004.cwfuh7wi4qcqo7fz@fwblub> (raw)
In-Reply-To: <81b59658-e60d-6899-dc73-4e5b02b151b9@proxmox.com>

On Thu, Jan 12, 2023 at 09:33:51AM +0100, Fiona Ebner wrote:
> Am 11.01.23 um 16:46 schrieb Thomas Lamprecht:
> > Am 28/11/2022 um 16:55 schrieb Fiona Ebner:
> >> The actual-size property is an optional property in the QAPI
> >> definition for ImageInfo. If it's not set, simply use the information
> >> from stat() as a fallback. This is essentially the same
> >> raw_get_allocated_file_size() in QEMU does anyways.
> >>
> >> Reported in the community forum:
> >> https://forum.proxmox.com/threads/118443/post-513421
> >>
> >> Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
> >> ---
> >>
> >> Thanks to Mira for setting up a GlusterFS instance and discussing the
> >> issue with me!
> >>
> >> I'm not sure why QEMU fails here, didn't see much that could go wrong
> >> beside the fstat() call failing. But our stat() call in the beginning
> >> of file_size_info already succeeded at that point :/ The mysteries of
> >> QEMU+GlusterFS.
> >>
> >> Also, it's a bit strange to call qemu-img info regardless of whether
> >> the image is a VM image or not. E.g., this results in the format
> >> property for backups to always be raw, rather than the backup format.
> >> Should we change that (for 8.0)?
> >>
> >>  PVE/Storage/Plugin.pm | 1 +
> >>  1 file changed, 1 insertion(+)
> >>
> >> diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm
> >> index 8a41df1..7773ac3 100644
> >> --- a/PVE/Storage/Plugin.pm
> >> +++ b/PVE/Storage/Plugin.pm
> >> @@ -899,6 +899,7 @@ sub file_size_info {
> >>      }
> >>  
> >>      my ($size, $format, $used, $parent) = $info->@{qw(virtual-size format actual-size backing-filename)};
> >> +    $used ||= $st->blocks * 512;
> > 
> > in general OK, but can we really be sure that blocks are always 512 bytes?
> > 
> 
> Initially, I only checked 'man 2 stat' where this is the case:
> >                blkcnt_t  st_blocks;      /* Number of 512B blocks allocated */
> 
> But checking again now, 'perldoc -f stat' (File::stat mentions it uses
> Perl's builtin stat()) actually states:
> >              12 blocks   actual number of system-specific blocks allocated
> >                          on disk (often, but not always, 512 bytes each)
> 
> Trying to decipher the Perl 5 source code, I /think/ it will just use
> stat(2) on Linux (a quick check with strace seems to confirm this) and
> I'd say it would be surprising if not, but I'm not 100% sure.

There aren't too many choices there. It may switch to `statx` at some
point where there's only `stx_blocks` which is specifically documented
as "Number of 512B blocks allocated".
The terminology in the I/O layer around blocks, sectors and "groups of
512 bytes" is quite annoying really.

But hey, at least it's not `statvfs` which fills a struct with
"garbage" on some systems (see `man 3 statvfs` on freebsd14)

As for why glusterfs would fail with our stat() having succeeded, that's
just glusterfs. Don't question it...

> 
> That said, the original issue here was GlusterFS reporting an incorrect
> value (see the forum thread). The new fallback introduced by this patch
> would only help if 'qemu-img info' fails to determine the size for some
> other reason (it also just does st_blocks * 512 in
> raw_get_allocated_file_size()), so I'm not sure the patch is even worth
> it after all.




      reply	other threads:[~2023-01-13 11:50 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-28 15:55 Fiona Ebner
2023-01-11 15:46 ` Thomas Lamprecht
2023-01-12  8:33   ` Fiona Ebner
2023-01-13 11:50     ` Wolfgang Bumiller [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230113115004.cwfuh7wi4qcqo7fz@fwblub \
    --to=w.bumiller@proxmox.com \
    --cc=f.ebner@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=t.lamprecht@proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal