]> git.proxmox.com Git - pve-storage.git/commit - PVE/Storage/LvmThinPlugin.pm
Fix #2050: only provide 'conv=sparse' for LvmThin
authorStoiko Ivanov <s.ivanov@proxmox.com>
Thu, 17 Jan 2019 15:31:51 +0000 (16:31 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 18 Jan 2019 09:46:33 +0000 (10:46 +0100)
commit4e8de9ad561b343dd4dbe7827603e68188bf99cb
tree5b6fe8210c95c997ce7077c2c6234f54e5c87ef8
parenta31cb84fd4676ce8049ce52840fa50a39591ca63
Fix #2050: only provide 'conv=sparse' for LvmThin

LVMPlugin->volume_import (used by storage_migrate on either offline
migration with local disks, or online migration with storage-only
referenced disks) passed 'conv=sparse' to `dd`. This can lead to
data-corruption, if the target volume is not zero-initialized.

dropping the sparse argument completely would fix the problem, but
breaks keeping data sparse for LvmThinPlugin.

This patch moves the dd out into (LVM*) plugin specific sub so that
each can control the parameters.

Steps for reproducing the issue:
* create a cluster with (at least) 2 nodes A and B, with a free
  disk-device (/dev/sdx)
* write a recognizable pattern to /dev/sdx on B:
  `dd if=/dev/zero bs=10M | tr '\000' '\255' | dd of=/dev/sdb bs=10M`
  (would be grateful for alternatives to the dd| tr| dd)
* on both A and B create a lvm-vg (pvcreate, vgcreate)
* add it as _not_ shared storage, which is available on nodes A and B
* create a small guest on A
* fill a file in the guest with zeros
  `dd if=/dev/zero of=/zerofil bs=10M`
* stop the guest, migrate it to B
* start the guest - check that the file `/zerofil` contains `ad`
  instead of `00`

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