From 955c1f2cf7e358c03e9ee8e5245195010223172a Mon Sep 17 00:00:00 2001 From: Stoiko Ivanov Date: Fri, 4 Jan 2019 14:06:24 +0100 Subject: [PATCH] fix #2046 add volume_size_info to LVMPlugin 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 --- 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.39.2