diff --git a/src/com/mirantis/mk/Ceph.groovy b/src/com/mirantis/mk/Ceph.groovy
index bb837b2..5326321 100644
--- a/src/com/mirantis/mk/Ceph.groovy
+++ b/src/com/mirantis/mk/Ceph.groovy
@@ -41,52 +41,62 @@
     def salt = new com.mirantis.mk.Salt()
     def common = new com.mirantis.mk.Common()
     def partition = ""
-    if (type == 'lockbox') {
-        try {
-            // umount - partition = /dev/sdi2
-            partition = salt.cmdRun(master, target, "lsblk -rp | grep -v mapper | grep ${partition_uuid} ")['return'][0].values()[0].split()[0]
-            salt.cmdRun(master, target, "umount ${partition}")
-        } catch (Exception e) {
-            common.warningMsg(e)
+    def dev = ''
+    def lvm_enabled = salt.getPillar(master, "I@ceph:osd", "ceph:osd:lvm_enabled")['return'].first().containsValue(true)
+    if ( !lvm_enabled ){
+        if (type == 'lockbox') {
+            try {
+                // umount - partition = /dev/sdi2
+                partition = salt.cmdRun(master, target, "lsblk -rp | grep -v mapper | grep ${partition_uuid} ")['return'][0].values()[0].split()[0]
+                salt.cmdRun(master, target, "umount ${partition}")
+            } catch (Exception e) {
+                common.warningMsg(e)
+            }
+        } else if (type == 'data') {
+            try {
+                // umount - partition = /dev/sdi2
+                partition = salt.cmdRun(master, target, "df | grep /var/lib/ceph/osd/ceph-${id}")['return'][0].values()[0].split()[0]
+                salt.cmdRun(master, target, "umount ${partition}")
+            } catch (Exception e) {
+                common.warningMsg(e)
+            }
+            try {
+                // partition = /dev/sdi2
+                partition = salt.cmdRun(master, target, "blkid | grep ${partition_uuid} ")['return'][0].values()[0].split(":")[0]
+            } catch (Exception e) {
+                common.warningMsg(e)
+            }
+        } else {
+            try {
+                // partition = /dev/sdi2
+                partition = salt.cmdRun(master, target, "blkid | grep ${partition_uuid} ")['return'][0].values()[0].split(":")[0]
+            } catch (Exception e) {
+                common.warningMsg(e)
+            }
         }
-    } else if (type == 'data') {
-        try {
-            // umount - partition = /dev/sdi2
-            partition = salt.cmdRun(master, target, "df | grep /var/lib/ceph/osd/ceph-${id}")['return'][0].values()[0].split()[0]
-            salt.cmdRun(master, target, "umount ${partition}")
-        } catch (Exception e) {
-            common.warningMsg(e)
-        }
-        try {
-            // partition = /dev/sdi2
-            partition = salt.cmdRun(master, target, "blkid | grep ${partition_uuid} ")['return'][0].values()[0].split(":")[0]
-        } catch (Exception e) {
-            common.warningMsg(e)
-        }
-    } else {
-        try {
-            // partition = /dev/sdi2
-            partition = salt.cmdRun(master, target, "blkid | grep ${partition_uuid} ")['return'][0].values()[0].split(":")[0]
-        } catch (Exception e) {
-            common.warningMsg(e)
+        if (partition?.trim()) {
+            if (partition.contains("nvme")) {
+                // partition = /dev/nvme1n1p2
+                // dev = /dev/nvme1n1
+                dev = partition.replaceAll('p\\d+$', "")
+                // part_id = 2
+                def part_id = partition.substring(partition.lastIndexOf("p") + 1).replaceAll("[^0-9]+", "")
+
+            } else {
+                // partition = /dev/sdi2
+                // dev = /dev/sdi
+                dev = partition.replaceAll('\\d+$', "")
+                // part_id = 2
+                def part_id = partition.substring(partition.lastIndexOf("/") + 1).replaceAll("[^0-9]+", "")
+            }
         }
     }
-    if (partition?.trim()) {
-        if (partition.contains("nvme")) {
-            // partition = /dev/nvme1n1p2
-            // dev = /dev/nvme1n1
-            def dev = partition.replaceAll('p\\d+$', "")
-            // part_id = 2
-            def part_id = partition.substring(partition.lastIndexOf("p") + 1).replaceAll("[^0-9]+", "")
-
-        } else {
-            // partition = /dev/sdi2
-            // dev = /dev/sdi
-            def dev = partition.replaceAll('\\d+$', "")
-            // part_id = 2
-            def part_id = partition.substring(partition.lastIndexOf("/") + 1).replaceAll("[^0-9]+", "")
-        }
-        salt.cmdRun(master, target, "Ignore | parted ${dev} rm ${part_id}")
+    if (lvm_enabled && type != 'lockbox') {
+        salt.cmdRun(master, target, "ceph-volume lvm zap ${partition_uuid} --destroy")
+    } else if (dev != '') {
+        salt.cmdRun(master, target, "parted ${dev} rm ${part_id}")
+    } else {
+        common.infoMsg("Did not found any device to be wiped.")
     }
     return
 }
