Skip to content

Commit 92989f1

Browse files
committed
lvutil: use wipefs not dd to clear existing signatures (#624)
Signed-off-by: Yann Dirson <[email protected]>
1 parent a82ff6c commit 92989f1

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

drivers/XE_SR_ERRORCODES.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -881,6 +881,12 @@
881881
<value>460</value>
882882
</code>
883883

884+
<code>
885+
<name>WipeFS</name>
886+
<description>Failed to wipe pre-existing filesystem signature.</description>
887+
<value>461</value>
888+
</code>
889+
884890
<code>
885891
<name>GenericException</name>
886892
<description>SM has thrown a generic python exception</description>

drivers/lvutil.py

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -503,24 +503,12 @@ def createVG(root, vgname):
503503

504504
f = _openExclusive(dev, True)
505505
os.close(f)
506+
507+
# Wipe any fs signature
506508
try:
507-
# Overwrite the disk header, try direct IO first
508-
cmd = [util.CMD_DD, "if=/dev/zero", "of=%s" % dev, "bs=1M",
509-
"count=10", "oflag=direct"]
510-
util.pread2(cmd)
509+
util.wipefs(dev)
511510
except util.CommandException as inst:
512-
if inst.code == errno.EPERM:
513-
try:
514-
# Overwrite the disk header, try normal IO
515-
cmd = [util.CMD_DD, "if=/dev/zero", "of=%s" % dev,
516-
"bs=1M", "count=10"]
517-
util.pread2(cmd)
518-
except util.CommandException as inst:
519-
raise xs_errors.XenError('LVMWrite', \
520-
opterr='device %s' % dev)
521-
else:
522-
raise xs_errors.XenError('LVMWrite', \
523-
opterr='device %s' % dev)
511+
raise xs_errors.XenError('WipeFS', opterr='device %s' % dev) # from inst
524512

525513
if not (dev == rootdev):
526514
try:

drivers/util.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,17 @@ def zeroOut(path, fromByte, bytes):
637637
return True
638638

639639

640+
def wipefs(blockdev):
641+
"Wipe filesystem signatures from `blockdev`"
642+
cmdlist = ["wipefs", "-a", blockdev]
643+
(rc, stdout, stderr) = doexec(cmdlist)
644+
if rc != 0:
645+
SMlog("FAILED in util.wipefs: (rc %d) stdout: '%s', stderr: '%s'" %
646+
(rc, stdout, stderr))
647+
SMlog("Command was: %s" % cmdlist)
648+
raise CommandException(rc, str(cmdlist), stderr.strip())
649+
650+
640651
def match_rootdev(s):
641652
regex = re.compile("^PRIMARY_DISK")
642653
return regex.search(s, 0)

0 commit comments

Comments
 (0)