mbusb / multibootusb

Create multiboot live Linux on a USB disk...
http://multibootusb.org/
GNU General Public License v2.0
1.39k stars 201 forks source link

mbusb@Linux can hang due to sector size mismatch. #380

Open shinji-s opened 6 years ago

shinji-s commented 6 years ago

How to reproduce.

Selected device /dev/sdb Device /dev/sdb is a MBR disk... USB disk is not mounted and can't update list widget... Selected device /dev/sdc1 Warning: The driver descriptor says the physical block size is 2048 bytes, but Linux says it is 512 bytes.

Forcefully terminating mbusb and hitting ^C on the console yields the following traceback.

Traceback (most recent call last): File "/home/suzuki/src/multibootusb/scripts/mbusb_gui.py", line 171, in onComboChange usb.gpt_device(config.usb_disk) File "/home/suzuki/src/multibootusb/scripts/usb.py", line 409, in gpt_device _cmd_out = subprocess.check_output("parted " + dev_name[:-1] + " print", shell=True) File "/usr/lib/python3.5/subprocess.py", line 626, in check_output **kwargs).stdout File "/usr/lib/python3.5/subprocess.py", line 695, in run stdout, stderr = process.communicate(input, timeout=timeout) File "/usr/lib/python3.5/subprocess.py", line 1059, in communicate stdout = self.stdout.read() KeyboardInterrupt The X11 connection broke (error 1). Did the X11 server die?

1000283 commented 3 years ago

I have a similar issue without GUI.

This is my USB drive:

# fdisk -l /dev/sde
Disk /dev/sde: 29.45 GiB, 31611420672 bytes, 61741056 sectors
Disk model: Transcend 32GB  
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4089a39b

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sde1  *        2048 52430847 52428800   25G  c W95 FAT32 (LBA)
/dev/sde2       52430848 61741055  9310208  4.5G  c W95 FAT32 (LBA)

sde1 should be for all the ISOs, sde2 should be used as extra space or persistence. I'm running gentoo so i had to install the dependencies and run from the multiboot-9.2.0 folder.

This is what happens:

# python3 ./multibootusb -s /dev/sde1
Using python version  3.7.9 (default, Oct 30 2020, 15:26:17) 
[GCC 9.2.0] on platform Linux-4.19.82-gentoo-x86_64-AMD_Ryzen_7_1800X_Eight-Core_Processor-with-gentoo-2.7
Running multibootusb version 9.2.0 from source...
Starting multibootusb GUI...
Cleaning old multibootusb directory...
Syslinux exist in multibootusb directory...
Using pyudev for detecting USB drives...
    /dev/sde
    /dev/sde1
    /dev/sde2
Selected device /dev/sde
Warning: The driver descriptor says the physical block size is 2048 bytes, but Linux says it is 512 bytes.
Traceback (most recent call last):
  File "/home/user/app/multibootusb-9.2.0/scripts/mbusb_gui.py", line 162, in onComboChange
    usb.gpt_device(config.usb_disk)
  File "/home/user/app/multibootusb-9.2.0/scripts/usb.py", line 403, in gpt_device
    _cmd_out = subprocess.check_output("parted  " + dev_name + " print", shell=True)
  File "/usr/lib/python3.7/subprocess.py", line 411, in check_output
    **kwargs).stdout
  File "/usr/lib/python3.7/subprocess.py", line 490, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
  File "/usr/lib/python3.7/subprocess.py", line 951, in communicate
    stdout = self.stdout.read()
KeyboardInterrupt
Aborted

I assume syslinux is required, i haven't tried an actual ISO. The GUI ran once, but then stopped running. Should i format my USB differently?

The gptmbr.bin hack described here didn't work for me.

I've also reformatted the disk and got a bit further:

# fdisk -l /dev/sde
Disk /dev/sde: 29.45 GiB, 31611420672 bytes, 61741056 sectors
Disk model: Transcend 32GB  
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x61077338

Device     Boot Start      End  Sectors  Size Id Type
/dev/sde1  *     2048 61741055 61739008 29.5G  c W95 FAT32 (LBA)

When trying to install syslinux:

 python3 ./multibootusb -c -s -t /dev/sde1
Using python version  3.7.9 (default, Oct 30 2020, 15:26:17) 
[GCC 9.2.0] on platform Linux-4.19.82-gentoo-x86_64-AMD_Ryzen_7_1800X_Eight-Core_Processor-with-gentoo-2.7
Device /dev/sde1 is a MBR disk...

Initiating process for installing syslinux on /dev/sde1
Selected target device is  : "/dev/sde1"
Syslinux install directory :  "multibootusb"
Please confirm the option.
Y/y/Yes/yes/YES or N/n/No/no/NO
Please enter the option listed above : y
Traceback (most recent call last):
  File "/home/user/app/multibootusb-9.2.0/scripts/usb.py", line 481, in details
    details = details_udev(usb_disk_part)
  File "/home/user/app/multibootusb-9.2.0/scripts/usb.py", line 269, in details_udev
    mount_point = UDISKS.mount(usb_disk_part) or ""
  File "/home/user/app/multibootusb-9.2.0/scripts/udisks.py", line 145, in mount
    dbus_interface=self.FILESYSTEM))
  File "/usr/lib/python3.7/site-packages/dbus/proxies.py", line 147, in __call__
    **keywords)
  File "/usr/lib/python3.7/site-packages/dbus/connection.py", line 653, in call_blocking
    message, timeout)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.UDisks2.Filesystem” on object at path /org/freedesktop/UDisks2/block_devices/sde1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./multibootusb", line 204, in <module>
    cli_install_syslinux()
  File "/home/user/app/multibootusb-9.2.0/scripts/mbusb_cli.py", line 187, in cli_install_syslinux
    if syslinux.syslinux_default(config.usb_disk) is True:
  File "/home/user/app/multibootusb-9.2.0/scripts/syslinux.py", line 101, in syslinux_default
    usb_details = usb.details(usb_disk)
  File "/home/user/app/multibootusb-9.2.0/scripts/usb.py", line 483, in details
    details = details_udisks2(usb_disk_part)
  File "/home/user/app/multibootusb-9.2.0/scripts/usb.py", line 324, in details_udisks2
    mount_point = bd.Get('org.freedesktop.UDisks2.Filesystem', 'MountPoints', dbus_interface='org.freedesktop.DBus.Properties')
  File "/usr/lib/python3.7/site-packages/dbus/proxies.py", line 147, in __call__
    **keywords)
  File "/usr/lib/python3.7/site-packages/dbus/connection.py", line 653, in call_blocking
    message, timeout)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.UDisks2.Filesystem”

I do have dev-python/pyudev installed on my system.