From: Michael Prokop Date: Wed, 3 Jun 2020 11:45:54 +0000 (+0200) Subject: Reread partition table after installing MBR to ensure devices exist X-Git-Tag: v0.18.1~1^2 X-Git-Url: https://git.grml.org/?p=grml2usb.git;a=commitdiff_plain;h=fcf63b74e77193db1cc5e797e79f20736de23222 Reread partition table after installing MBR to ensure devices exist We need to execute blockdev after installing the MBR, otherwise the devices might not exist yet as expected and executing syslinux can fail therefore. While at it remove duplicate mbrtemplate python docstring in install_mbr Closes: grml/grml2usb#33 Thanks: Darshaka Pathirana for debugging --- diff --git a/grml2usb b/grml2usb index fdc0cac..867bea0 100755 --- a/grml2usb +++ b/grml2usb @@ -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)