Reread partition table after installing MBR to ensure devices exist
[grml2usb.git] / grml2usb
index 846c799..867bea0 100755 (executable)
--- a/grml2usb
+++ b/grml2usb
@@ -518,7 +518,7 @@ def check_boot_flag(device):
         else:
             logging.debug("boot flag is NOT enabled on %s" % device)
             raise VerifyException(
-                "Device %s does not have the bootflag set. "
+                "Device %s does not have the boot flag set. "
                 "Please enable it to be able to boot." % device
             )
     except ImportError:
@@ -748,16 +748,14 @@ def install_mbr(mbrtemplate, device, partition, ismirbsdmbr=True):
     "mbrtemplate" file, set the "partition" (0..3) active, and install the
     result back to "device".
 
-    @mbrtemplate: default MBR file
+    @mbrtemplate: default MBR file (must be a valid MBR file of at least 440
+    (or 439 if ismirbsdmbr) bytes)
 
     @device: name of a file assumed to be a hard disc (or USB stick) image, or
     something like "/dev/sdb"
 
     @partition: must be a number between 0 and 3, inclusive
 
-    @mbrtemplate: must be a valid MBR file of at least 440 (or 439 if
-    ismirbsdmbr) bytes.
-
     @ismirbsdmbr: if true then ignore the active flag, set the mirbsdmbr
     specific flag to 0/1/2/3 and set the MBR's default value accordingly. If
     false then leave the mirbsdmbr specific flag set to FFh, set all
@@ -875,6 +873,14 @@ def install_mbr(mbrtemplate, device, partition, ismirbsdmbr=True):
     proc = subprocess.Popen(["sync"])
     proc.wait()
 
+    logging.debug("Probing device via 'blockdev --rereadpt %s'", device)
+    proc = subprocess.Popen(["blockdev", "--rereadpt", device])
+    proc.wait()
+    if proc.returncode != 0:
+        raise Exception(
+            "Couldn't execute blockdev on '%s' (install util-linux?)", device
+        )
+
     set_rw(device)