[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH OSSTEST] Debian: Wait for udev devices to settle in erase-other-disks



Otherwise we, apparently, have a race between the "test -b" + dd
against the sda1 device node being removed and end up creating a file
called /dev/sda1 containing 32K of zeroes, which will later render
mke2fs very confused.

For some reason we seem to reliably loose the race on Jessie i386 host
installs, but not on Wheezy or other arches on Jessie.

This was tricky to diagnose because the Debian installer main-menu
process appears to buffer the output of things it runs before logging
them to /var/log/syslog, which means the output of "set -x" and the
actual affect of the commands (e.g. in the kernel messages) can be
presented in very confusing orders. Hence this patch also adds
extensive use of logger(1) to record what it is actually doing at the
time it does it. These logs include the pid of the command too  since
main-menu only logs its own pid, not that of the subcommand which
gneerated the output.

Lastly this patch adds an explicit test that each device it touches is
actually still a block device afterwards.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
 Osstest/Debian.pm | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/Osstest/Debian.pm b/Osstest/Debian.pm
index fb2e56a..a421d74 100644
--- a/Osstest/Debian.pm
+++ b/Osstest/Debian.pm
@@ -975,13 +975,26 @@ END
 #!/bin/sh
 set -ex
 stamp=/var/erase-other-disks.stamp
-if test -f \$stamp; then exit 0; fi
+if test -f \$stamp; then
+    logger -t osstest-erase-other-disks-\$\$ "Already ran, exiting"
+    exit 0
+fi
 >\$stamp
+logger -t osstest-erase-other-disks-\$\$ "Running..."
 zero () {
     if test -b \$dev; then
+        logger -t osstest-erase-other-disks-\$\$ "Erasing \$dev"
         dd if=/dev/zero of=\$dev count=64 ||:
+        if ! test -b \$dev; then
+            logger -t osstest-erase-other-disks-\$\$ "\$dev is no longer a 
block device!"
+            exit 1
+        fi
+    else
+        logger -t osstest-erase-other-disks-\$\$ "\$dev does not exist or is 
not a block device."
     fi
 }
+
+udevadm settle
 for sd in sd hd; do
     for b in a b c d e f; do
         dev=/dev/\${sd}\${b}
-- 
2.5.1


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.