[pve-devel] [PATCH storage 1/2] fix #2046 add volume_size_info to LVMPlugin
Stoiko Ivanov
s.ivanov at proxmox.com
Fri Jan 4 14:06:24 CET 2019
Without volume_size_info a Storage plugin falls back to the Implementation
in PVE/Storage/Plugin.pm, which relies on `qemu-img info`.
`qemu-img info` returns wrong results on a node in the case of shared volume
groups (e.g. when sharing disks via iSCSI), if a disk was resized on another
node (it lseeks to the end of the block-device, and this yields the old size).
Using lvs directly fixes the issue, since the LVM metadata gets updated when
invoking lvs.
Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
---
PVE/Storage/LVMPlugin.pm | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/PVE/Storage/LVMPlugin.pm b/PVE/Storage/LVMPlugin.pm
index 79d527d..3be680b 100644
--- a/PVE/Storage/LVMPlugin.pm
+++ b/PVE/Storage/LVMPlugin.pm
@@ -499,6 +499,21 @@ sub volume_resize {
return 1;
}
+sub volume_size_info {
+ my ($class, $scfg, $storeid, $volname, $timeout) = @_;
+ my $path = $class->filesystem_path($scfg, $volname);
+
+ my $cmd = ['/sbin/lvs', '--separator', ':', '--noheadings', '--units', 'b',
+ '--unbuffered', '--nosuffix', '--options', 'lv_size', $path];
+
+ my $size;
+ run_command($cmd, timeout => $timeout, errmsg => "can't get size of '$path'",
+ outfunc => sub {
+ $size = int(shift);
+ });
+ return wantarray ? ($size, 'raw', 0, undef) : $size;
+}
+
sub volume_snapshot {
my ($class, $scfg, $storeid, $volname, $snap) = @_;
--
2.11.0
More information about the pve-devel
mailing list