udisks
udisks copied to clipboard
Sandisk Clip Sport Plus partition only detected when connected on boot
I have an annoying issue that the partition on my MP3 player (Sandisk Clip Sport Plus) at /dev/sda1 is only detected when connected on boot. Otherwise if it connected after boot, it shows as /dev/sda. The device is a USB mass storage device.
Curiously running sudo dosfsck /dev/sda allows the /dev/sda1 partition to be detected, so that it can then be mounted. I am not sure if this issue relates to udev, udisks2 or something else. I have included the output from udevadm below.
Any ideas would be very much appreciated - not sure if there is something that can easily be tweaked here in udev rules for example.
$ udevadm info --attribute-walk --path=$(udevadm info --query=path --name=/dev/sda)
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/host0/target0:0:0/0:0:0:0/block/sda':
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{alignment_offset}=="0"
ATTR{capability}=="41"
ATTR{discard_alignment}=="0"
ATTR{diskseq}=="11"
ATTR{events}=="media_change"
ATTR{events_async}==""
ATTR{events_poll_msecs}=="-1"
ATTR{ext_range}=="256"
ATTR{hidden}=="0"
ATTR{inflight}==" 0 0"
ATTR{integrity/device_is_integrity_capable}=="0"
ATTR{integrity/format}=="none"
ATTR{integrity/protection_interval_bytes}=="0"
ATTR{integrity/read_verify}=="0"
ATTR{integrity/tag_size}=="0"
ATTR{integrity/write_generate}=="0"
ATTR{mq/0/cpu_list}=="0, 1, 2, 3, 4, 5, 6, 7"
ATTR{mq/0/nr_reserved_tags}=="0"
ATTR{mq/0/nr_tags}=="1"
ATTR{power/control}=="auto"
ATTR{power/runtime_active_time}=="0"
ATTR{power/runtime_status}=="unsupported"
ATTR{power/runtime_suspended_time}=="0"
ATTR{queue/add_random}=="1"
ATTR{queue/chunk_sectors}=="0"
ATTR{queue/dax}=="0"
ATTR{queue/discard_granularity}=="0"
ATTR{queue/discard_max_bytes}=="0"
ATTR{queue/discard_max_hw_bytes}=="0"
ATTR{queue/discard_zeroes_data}=="0"
ATTR{queue/fua}=="0"
ATTR{queue/hw_sector_size}=="512"
ATTR{queue/io_poll}=="0"
ATTR{queue/io_poll_delay}=="-1"
ATTR{queue/io_timeout}=="30000"
ATTR{queue/iosched/async_depth}=="1"
ATTR{queue/iosched/fifo_batch}=="16"
ATTR{queue/iosched/front_merges}=="1"
ATTR{queue/iosched/read_expire}=="500"
ATTR{queue/iosched/write_expire}=="5000"
ATTR{queue/iosched/writes_starved}=="2"
ATTR{queue/iostats}=="1"
ATTR{queue/logical_block_size}=="512"
ATTR{queue/max_discard_segments}=="1"
ATTR{queue/max_hw_sectors_kb}=="120"
ATTR{queue/max_integrity_segments}=="0"
ATTR{queue/max_sectors_kb}=="120"
ATTR{queue/max_segment_size}=="65536"
ATTR{queue/max_segments}=="2048"
ATTR{queue/minimum_io_size}=="512"
ATTR{queue/nomerges}=="0"
ATTR{queue/nr_requests}=="2"
ATTR{queue/nr_zones}=="0"
ATTR{queue/optimal_io_size}=="0"
ATTR{queue/physical_block_size}=="512"
ATTR{queue/read_ahead_kb}=="128"
ATTR{queue/rotational}=="1"
ATTR{queue/rq_affinity}=="1"
ATTR{queue/scheduler}=="[mq-deadline] kyber bfq none"
ATTR{queue/stable_writes}=="0"
ATTR{queue/throttle_sample_time}=="100"
ATTR{queue/virt_boundary_mask}=="0"
ATTR{queue/wbt_lat_usec}=="75000"
ATTR{queue/write_cache}=="write through"
ATTR{queue/write_same_max_bytes}=="0"
ATTR{queue/write_zeroes_max_bytes}=="0"
ATTR{queue/zone_append_max_bytes}=="0"
ATTR{queue/zone_write_granularity}=="0"
ATTR{queue/zoned}=="none"
ATTR{range}=="16"
ATTR{removable}=="1"
ATTR{ro}=="0"
ATTR{size}=="62333952"
ATTR{stat}==" 491 15532 31822 4514 1 0 1 10 0 2957 4525 0 0 0 0 0 0"
ATTR{trace/act_mask}=="disabled"
ATTR{trace/enable}=="0"
ATTR{trace/end_lba}=="disabled"
ATTR{trace/pid}=="disabled"
ATTR{trace/start_lba}=="disabled"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/host0/target0:0:0/0:0:0:0':
KERNELS=="0:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{blacklist}==""
ATTRS{device_blocked}=="0"
ATTRS{device_busy}=="0"
ATTRS{dh_state}=="detached"
ATTRS{eh_timeout}=="10"
ATTRS{evt_capacity_change_reported}=="0"
ATTRS{evt_inquiry_change_reported}=="0"
ATTRS{evt_lun_change_reported}=="0"
ATTRS{evt_media_change}=="0"
ATTRS{evt_mode_parameter_change_reported}=="0"
ATTRS{evt_soft_threshold_reached}=="0"
ATTRS{inquiry}==""
ATTRS{iocounterbits}=="32"
ATTRS{iodone_cnt}=="0x3a2"
ATTRS{ioerr_cnt}=="0x0"
ATTRS{iorequest_cnt}=="0x3a2"
ATTRS{max_sectors}=="240"
ATTRS{model}=="Clip Sport Plus "
ATTRS{power/autosuspend_delay_ms}=="-1"
ATTRS{power/control}=="on"
ATTRS{power/runtime_active_time}=="529192"
ATTRS{power/runtime_status}=="active"
ATTRS{power/runtime_suspended_time}=="0"
ATTRS{queue_depth}=="1"
ATTRS{queue_type}=="none"
ATTRS{rev}==" "
ATTRS{scsi_level}=="0"
ATTRS{state}=="running"
ATTRS{timeout}=="30"
ATTRS{type}=="0"
ATTRS{vendor}=="SanDisk "
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/host0/target0:0:0':
KERNELS=="target0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""
ATTRS{power/control}=="auto"
ATTRS{power/runtime_active_time}=="529192"
ATTRS{power/runtime_status}=="active"
ATTRS{power/runtime_suspended_time}=="0"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/host0':
KERNELS=="host0"
SUBSYSTEMS=="scsi"
DRIVERS==""
ATTRS{power/control}=="auto"
ATTRS{power/runtime_active_time}=="529194"
ATTRS{power/runtime_status}=="active"
ATTRS{power/runtime_suspended_time}=="1024"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0':
KERNELS=="1-1:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="usb-storage"
ATTRS{authorized}=="1"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceClass}=="08"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bInterfaceProtocol}=="50"
ATTRS{bInterfaceSubClass}=="05"
ATTRS{bNumEndpoints}=="02"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-1':
KERNELS=="1-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{bMaxPower}=="300mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0100"
ATTRS{bmAttributes}=="c0"
ATTRS{busnum}=="1"
ATTRS{configuration}==""
ATTRS{devnum}=="14"
ATTRS{devpath}=="1"
ATTRS{idProduct}=="d001"
ATTRS{idVendor}=="0781"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="SanDisk "
ATTRS{maxchild}=="0"
ATTRS{power/active_duration}=="530537"
ATTRS{power/autosuspend}=="2"
ATTRS{power/autosuspend_delay_ms}=="2000"
ATTRS{power/connected_duration}=="530537"
ATTRS{power/control}=="on"
ATTRS{power/level}=="on"
ATTRS{power/persist}=="1"
ATTRS{power/runtime_active_time}=="530232"
ATTRS{power/runtime_status}=="active"
ATTRS{power/runtime_suspended_time}=="0"
ATTRS{product}=="Clip Sport Plus "
ATTRS{quirks}=="0x0"
ATTRS{removable}=="removable"
ATTRS{rx_lanes}=="1"
ATTRS{serial}=="246887076C4241A6"
ATTRS{speed}=="480"
ATTRS{tx_lanes}=="1"
ATTRS{urbnum}=="2438"
ATTRS{version}==" 2.00"
Do you see the partition in lsblk output? What does fdisk -l says about the device? And does partprobe also help with the partition detection?
If you don't see the partition in /dev (or lsblk) after connecting the device, it's a kernel bug, kernel is responsible for recognizing partition tables and partitions and creating device nodes in /dev. If the /dev/sda1 devnode exists and udev doesn't see it (e.g. udevadm info /dev/sda1 doesn't show information about the device), then it's a udev bug. And if udev works and UDisks doesn't see it (udisksctl dump doesn't show it), then it's our bug :-)
Thanks @vojtechtrefny.
Initially running lsblk only shows /dev/sda but not the partition:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 29.7G 0 disk
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part
├─nvme0n1p2 259:2 0 237G 0 part /
└─nvme0n1p3 259:3 0 977M 0 part [SWAP]
However running sudo partprobe /dev/sda then does result in the partition being recognized:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 29.7G 0 disk
└─sda1 8:1 1 29.5G 0 part
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part
├─nvme0n1p2 259:2 0 237G 0 part /
└─nvme0n1p3 259:3 0 977M 0 part [SWAP]
This also results in sda1 showing on ls /dev/ whereas it doesn't before partprobe. So this means it is a kernel bug and I should file this with the kernel team? Can you think of why it makes a difference if the device is already connected on boot?
Could you also post plain udevadm info /dev/sda at the connected-at-boot scenario? Do you see any ID_ properties and USEC_INITIALIZED?
This looks like udev issue, perhaps a problem with initial probe in the initramfs phase not handing over all data when switching root? Does this happen with other USB-connected mass storage devices?
No answer for a year, closing. Feel free to reopen if it's still an issue for you. Remember to retest against current git master, there's been a lot of changes in the meanwhile.