]> git.proxmox.com Git - pve-storage.git/commitdiff
LVM: Add '--refresh' when activating volumes
authorStoiko Ivanov <s.ivanov@proxmox.com>
Fri, 4 Jan 2019 13:06:25 +0000 (14:06 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 15 Jan 2019 08:43:07 +0000 (09:43 +0100)
From `man 8 lvchange`:
  --refresh
      If the logical volume is active, reload its metadata. This is not
      necessary in normal operation, but may be useful ... if you're doing
      clustering manually without a clustered lock manager.

Fixes migration in a shared LVM (iscsi) setup, where a disk gets resized on one
node A and the guest is afterwards migrated to another node B: B still presents
the old size to the guest, leading to data corruption.

It is necessary to run `lvchange` twice because the options `-ay` and
`--refresh` are mutually exclusive.

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
PVE/Storage/LVMPlugin.pm

index 3be680b4d605a2f6364406be8b34f4e830639ef9..72d74646349a3b1808fd4966e609081fd191bdd8 100644 (file)
@@ -362,6 +362,8 @@ sub free_image {
 
     my $cmd = ['/sbin/lvchange', '-aly', "$vg/$volname"];
     run_command($cmd, errmsg => "can't activate LV '$vg/$volname' to zero-out its data");
+    $cmd = ['/sbin/lvchange', '--refresh', "$vg/$volname"];
+    run_command($cmd, errmsg => "can't refresh LV '$vg/$volname' to zero-out its data");
 
     if ($scfg->{saferemove}) {
        # avoid long running task, so we only rename here
@@ -472,6 +474,8 @@ sub activate_volume {
 
     my $cmd = ['/sbin/lvchange', "-a$lvm_activate_mode", $path];
     run_command($cmd, errmsg => "can't activate LV '$path'");
+    $cmd = ['/sbin/lvchange', '--refresh', $path];
+    run_command($cmd, errmsg => "can't refresh LV '$path' for activation");
 }
 
 sub deactivate_volume {