diff --git a/drivers/XE_SR_ERRORCODES.xml b/drivers/XE_SR_ERRORCODES.xml index e846666d8..fe06819bc 100755 --- a/drivers/XE_SR_ERRORCODES.xml +++ b/drivers/XE_SR_ERRORCODES.xml @@ -881,6 +881,12 @@ 460 + + WipefsFailure + Failed to wipe pre-existing filesystem signature. + 461 + + GenericException SM has thrown a generic python exception diff --git a/drivers/lvutil.py b/drivers/lvutil.py index 40bde905c..5539e4f04 100755 --- a/drivers/lvutil.py +++ b/drivers/lvutil.py @@ -503,24 +503,12 @@ def createVG(root, vgname): f = _openExclusive(dev, True) os.close(f) + + # Wipe any fs signature try: - # Overwrite the disk header, try direct IO first - cmd = [util.CMD_DD, "if=/dev/zero", "of=%s" % dev, "bs=1M", - "count=10", "oflag=direct"] - util.pread2(cmd) + util.wipefs(dev) except util.CommandException as inst: - if inst.code == errno.EPERM: - try: - # Overwrite the disk header, try normal IO - cmd = [util.CMD_DD, "if=/dev/zero", "of=%s" % dev, - "bs=1M", "count=10"] - util.pread2(cmd) - except util.CommandException as inst: - raise xs_errors.XenError('LVMWrite', \ - opterr='device %s' % dev) - else: - raise xs_errors.XenError('LVMWrite', \ - opterr='device %s' % dev) + raise xs_errors.XenError('WipefsFailure', opterr='device %s' % dev) # from inst if not (dev == rootdev): try: diff --git a/drivers/util.py b/drivers/util.py index 8c5bd372b..45362f723 100755 --- a/drivers/util.py +++ b/drivers/util.py @@ -637,6 +637,11 @@ def zeroOut(path, fromByte, bytes): return True +def wipefs(blockdev): + "Wipe filesystem signatures from `blockdev`" + pread2(["/usr/sbin/wipefs", "-a", blockdev]) + + def match_rootdev(s): regex = re.compile("^PRIMARY_DISK") return regex.search(s, 0)