* [pve-devel] [PATCH storage] plugin: file size info: use fallback for actual size @ 2022-11-28 15:55 Fiona Ebner 2023-01-11 15:46 ` Thomas Lamprecht 0 siblings, 1 reply; 4+ messages in thread From: Fiona Ebner @ 2022-11-28 15:55 UTC (permalink / raw) To: pve-devel 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; ($size) = ($size =~ /^(\d+)$/) or die "size '$size' not an integer\n"; # untaint # coerce back from string -- 2.30.2 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [pve-devel] [PATCH storage] plugin: file size info: use fallback for actual size 2022-11-28 15:55 [pve-devel] [PATCH storage] plugin: file size info: use fallback for actual size Fiona Ebner @ 2023-01-11 15:46 ` Thomas Lamprecht 2023-01-12 8:33 ` Fiona Ebner 0 siblings, 1 reply; 4+ messages in thread From: Thomas Lamprecht @ 2023-01-11 15:46 UTC (permalink / raw) To: Proxmox VE development discussion, Fiona Ebner 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? > > ($size) = ($size =~ /^(\d+)$/) or die "size '$size' not an integer\n"; # untaint > # coerce back from string ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [pve-devel] [PATCH storage] plugin: file size info: use fallback for actual size 2023-01-11 15:46 ` Thomas Lamprecht @ 2023-01-12 8:33 ` Fiona Ebner 2023-01-13 11:50 ` Wolfgang Bumiller 0 siblings, 1 reply; 4+ messages in thread From: Fiona Ebner @ 2023-01-12 8:33 UTC (permalink / raw) To: Thomas Lamprecht, Proxmox VE development discussion 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. 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. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [pve-devel] [PATCH storage] plugin: file size info: use fallback for actual size 2023-01-12 8:33 ` Fiona Ebner @ 2023-01-13 11:50 ` Wolfgang Bumiller 0 siblings, 0 replies; 4+ messages in thread From: Wolfgang Bumiller @ 2023-01-13 11:50 UTC (permalink / raw) To: Fiona Ebner; +Cc: Thomas Lamprecht, Proxmox VE development discussion 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. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-01-13 11:50 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-11-28 15:55 [pve-devel] [PATCH storage] plugin: file size info: use fallback for actual size Fiona Ebner 2023-01-11 15:46 ` Thomas Lamprecht 2023-01-12 8:33 ` Fiona Ebner 2023-01-13 11:50 ` Wolfgang Bumiller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox