Initramfs on my Debian testing system is not able automatically load necessary kernel modules for external USB 3 HDD (Seagate Backup Plus 1T) if it was already plugged in when initramfs started. If I boot into initramfs shell, plug cable out and plug it back in, then device will show up and I will be able to mount it.
I don't need this device in initramfs, but /dev/
filesystem created by initramfs is passed to main OS, where I do need it. I have to plug cable out and in to make device usable.
How do I setup initramfs to settle this device? Or how do I tell main OS to walk through hardware buses and handle all devices that udev in initramfs missed?
Additional information
After I plug device off and on, two new modules are loaded:
# lsmod
Module Size Used by
uas 24576 0
usb_storage 69632 1 uas
These modules are available in initramfs image:
# lsinitramfs /boot/initrd.img-4.6.0-1-amd64 |grep -E '(uas|usb-storage)'
lib/modules/4.6.0-1-amd64/kernel/drivers/usb/storage/usb-storage.ko
lib/modules/4.6.0-1-amd64/kernel/drivers/usb/storage/uas.ko
uname
, dmesg
and lsusb
output after plugging device in:
# uname -a
Linux pingwin 4.6.0-1-amd64 #1 SMP Debian 4.6.4-1 (2016-07-18) x86_64 GNU/Linux
# dmesg
[ 53.412599] usb 2-2: new SuperSpeed USB device number 2 using xhci_hcd
[ 53.429652] usb 2-2: New USB device found, idVendor=0bc2, idProduct=ab24
[ 53.429659] usb 2-2: New USB device strings: Mfr=2, Product=3, SerialNumber=1
[ 53.429662] usb 2-2: Product: BUP Slim BK
[ 53.429664] usb 2-2: Manufacturer: Seagate
[ 53.429667] usb 2-2: SerialNumber: NA7K016V
[ 53.455444] usbcore: registered new interface driver usb-storage
[ 53.458787] scsi host6: uas
[ 53.458962] usbcore: registered new interface driver uas
[ 53.459440] scsi 6:0:0:0: Direct-Access Seagate BUP Slim BK 0302 PQ: 0 ANSI: 6
[ 53.497569] sd 6:0:0:0: Attached scsi generic sg2 type 0
[ 53.497586] sd 6:0:0:0: [sdb] Spinning up disk...
[ 54.503950] ...ready
[ 56.518071] sd 6:0:0:0: [sdb] 1953525167 512-byte logical blocks: (1.00 TB/932 GiB)
[ 56.518077] sd 6:0:0:0: [sdb] 2048-byte physical blocks
[ 56.687950] sd 6:0:0:0: [sdb] Write Protect is off
[ 56.687960] sd 6:0:0:0: [sdb] Mode Sense: 4f 00 00 00
[ 56.688242] sd 6:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 56.699372] sdb: sdb1
[ 56.700399] sd 6:0:0:0: [sdb] Attached SCSI disk
# lsusb -v -d 0bc2:ab24
Bus 004 Device 002: ID 0bc2:ab24 Seagate RSS LLC
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 3.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 9
idVendor 0x0bc2 Seagate RSS LLC
idProduct 0xab24
bcdDevice 1.00
iManufacturer 2 Seagate
iProduct 3 BUP Slim BK
iSerial 1 NA7K016V
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 121
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 36mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 6 SCSI
bInterfaceProtocol 80 Bulk-Only
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0400 1x 1024 bytes
bInterval 0
bMaxBurst 15
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0400 1x 1024 bytes
bInterval 0
bMaxBurst 15
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 1
bNumEndpoints 4
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 6 SCSI
bInterfaceProtocol 98
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0400 1x 1024 bytes
bInterval 0
bMaxBurst 15
MaxStreams 32
Data-in pipe (0x03)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0400 1x 1024 bytes
bInterval 0
bMaxBurst 15
MaxStreams 32
Data-out pipe (0x04)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0400 1x 1024 bytes
bInterval 0
bMaxBurst 15
MaxStreams 32
Status pipe (0x02)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0400 1x 1024 bytes
bInterval 0
bMaxBurst 0
Command pipe (0x01)
Binary Object Store Descriptor:
bLength 5
bDescriptorType 15
wTotalLength 22
bNumDeviceCaps 2
USB 2.0 Extension Device Capability:
bLength 7
bDescriptorType 16
bDevCapabilityType 2
bmAttributes 0x00000002
Link Power Management (LPM) Supported
SuperSpeed USB Device Capability:
bLength 10
bDescriptorType 16
bDevCapabilityType 3
bmAttributes 0x00
wSpeedsSupported 0x000e
Device can operate at Full Speed (12Mbps)
Device can operate at High Speed (480Mbps)
Device can operate at SuperSpeed (5Gbps)
bFunctionalitySupport 1
Lowest fully-functional device speed is Full Speed (12Mbps)
bU1DevExitLat 10 micro seconds
bU2DevExitLat 2047 micro seconds
Device Status: 0x000c
(Bus Powered)
U1 Enabled
U2 Enabled
udevadm
output on initramfs and working system (they are pretty much the same, the only differences are in stat
, iodone_cnt
, ioerr_cnt
, iorequest_cnt
and urbnum
):
# udevadm info -a -p /sys/block/sdb on initramfs
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/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0/block/sdb':
KERNEL=="sdb"
SUBSYSTEM=="block"
DRIVER==""
ATTR{alignment_offset}=="0"
ATTR{badblocks}==""
ATTR{capability}=="50"
ATTR{discard_alignment}=="0"
ATTR{events}==""
ATTR{events_async}==""
ATTR{events_poll_msecs}=="-1"
ATTR{ext_range}=="256"
ATTR{inflight}==" 0 0"
ATTR{range}=="16"
ATTR{removable}=="0"
ATTR{ro}=="0"
ATTR{size}=="1953525167"
ATTR{stat}==" 72 0 4254 232 0 0 0 0 0 136 232"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0':
KERNELS=="6:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
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}=="0x7a"
ATTRS{ioerr_cnt}=="0x8"
ATTRS{iorequest_cnt}=="0x7a"
ATTRS{model}=="BUP Slim BK "
ATTRS{queue_depth}=="30"
ATTRS{queue_type}=="simple"
ATTRS{rev}=="0302"
ATTRS{scsi_level}=="7"
ATTRS{state}=="running"
ATTRS{timeout}=="30"
ATTRS{type}=="0"
ATTRS{vendor}=="Seagate "
ATTRS{vpd_pg80}==""
ATTRS{vpd_pg83}==""
ATTRS{wwid}=="naa.5000000000000001"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0':
KERNELS=="target6:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6':
KERNELS=="host6"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0':
KERNELS=="4-2:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="uas"
ATTRS{authorized}=="1"
ATTRS{bAlternateSetting}==" 1"
ATTRS{bInterfaceClass}=="08"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bInterfaceProtocol}=="62"
ATTRS{bInterfaceSubClass}=="06"
ATTRS{bNumEndpoints}=="04"
ATTRS{supports_autosuspend}=="0"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-2':
KERNELS=="4-2"
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}=="9"
ATTRS{bMaxPower}=="144mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0100"
ATTRS{bmAttributes}=="80"
ATTRS{busnum}=="4"
ATTRS{configuration}==""
ATTRS{devnum}=="2"
ATTRS{devpath}=="2"
ATTRS{idProduct}=="ab24"
ATTRS{idVendor}=="0bc2"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Seagate"
ATTRS{maxchild}=="0"
ATTRS{product}=="BUP Slim BK"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="removable"
ATTRS{serial}=="NA7K016V"
ATTRS{speed}=="5000"
ATTRS{urbnum}=="371"
ATTRS{version}==" 3.00"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4':
KERNELS=="usb4"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{authorized_default}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceProtocol}=="03"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="9"
ATTRS{bMaxPower}=="0mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0406"
ATTRS{bmAttributes}=="e0"
ATTRS{busnum}=="4"
ATTRS{configuration}==""
ATTRS{devnum}=="1"
ATTRS{devpath}=="0"
ATTRS{idProduct}=="0003"
ATTRS{idVendor}=="1d6b"
ATTRS{interface_authorized_default}=="1"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Linux 4.6.0-1-amd64 xhci-hcd"
ATTRS{maxchild}=="4"
ATTRS{product}=="xHCI Host Controller"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="unknown"
ATTRS{serial}=="0000:00:14.0"
ATTRS{speed}=="5000"
ATTRS{urbnum}=="47"
ATTRS{version}==" 3.00"
looking at parent device '/devices/pci0000:00/0000:00:14.0':
KERNELS=="0000:00:14.0"
SUBSYSTEMS=="pci"
DRIVERS=="xhci_hcd"
ATTRS{broken_parity_status}=="0"
ATTRS{class}=="0x0c0330"
ATTRS{consistent_dma_mask_bits}=="64"
ATTRS{d3cold_allowed}=="1"
ATTRS{device}=="0x1e31"
ATTRS{dma_mask_bits}=="64"
ATTRS{driver_override}=="(null)"
ATTRS{enable}=="1"
ATTRS{irq}=="29"
ATTRS{local_cpulist}=="0-3"
ATTRS{local_cpus}=="0f"
ATTRS{msi_bus}=="1"
ATTRS{numa_node}=="-1"
ATTRS{subsystem_device}=="0x1949"
ATTRS{subsystem_vendor}=="0x103c"
ATTRS{vendor}=="0x8086"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
# udevadm info -a -p /sys/block/sdb on booted system
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/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0/block/sdb':
KERNEL=="sdb"
SUBSYSTEM=="block"
DRIVER==""
ATTR{alignment_offset}=="0"
ATTR{badblocks}==""
ATTR{capability}=="50"
ATTR{discard_alignment}=="0"
ATTR{events}==""
ATTR{events_async}==""
ATTR{events_poll_msecs}=="-1"
ATTR{ext_range}=="256"
ATTR{inflight}==" 0 0"
ATTR{range}=="16"
ATTR{removable}=="0"
ATTR{ro}=="0"
ATTR{size}=="1953525167"
ATTR{stat}==" 72 0 4254 328 0 0 0 0 0 272 328"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0':
KERNELS=="6:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
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}=="0xd1"
ATTRS{ioerr_cnt}=="0x48"
ATTRS{iorequest_cnt}=="0xd1"
ATTRS{model}=="BUP Slim BK "
ATTRS{queue_depth}=="30"
ATTRS{queue_type}=="simple"
ATTRS{rev}=="0302"
ATTRS{scsi_level}=="7"
ATTRS{state}=="running"
ATTRS{timeout}=="30"
ATTRS{type}=="0"
ATTRS{vendor}=="Seagate "
ATTRS{vpd_pg80}==""
ATTRS{vpd_pg83}==""
ATTRS{wwid}=="naa.5000000000000001"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0':
KERNELS=="target6:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6':
KERNELS=="host6"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0':
KERNELS=="4-2:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="uas"
ATTRS{authorized}=="1"
ATTRS{bAlternateSetting}==" 1"
ATTRS{bInterfaceClass}=="08"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bInterfaceProtocol}=="62"
ATTRS{bInterfaceSubClass}=="06"
ATTRS{bNumEndpoints}=="04"
ATTRS{supports_autosuspend}=="0"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-2':
KERNELS=="4-2"
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}=="9"
ATTRS{bMaxPower}=="144mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0100"
ATTRS{bmAttributes}=="80"
ATTRS{busnum}=="4"
ATTRS{configuration}==""
ATTRS{devnum}=="2"
ATTRS{devpath}=="2"
ATTRS{idProduct}=="ab24"
ATTRS{idVendor}=="0bc2"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Seagate"
ATTRS{maxchild}=="0"
ATTRS{product}=="BUP Slim BK"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="removable"
ATTRS{serial}=="NA7K016V"
ATTRS{speed}=="5000"
ATTRS{urbnum}=="592"
ATTRS{version}==" 3.00"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4':
KERNELS=="usb4"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{authorized_default}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceProtocol}=="03"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="9"
ATTRS{bMaxPower}=="0mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0406"
ATTRS{bmAttributes}=="e0"
ATTRS{busnum}=="4"
ATTRS{configuration}==""
ATTRS{devnum}=="1"
ATTRS{devpath}=="0"
ATTRS{idProduct}=="0003"
ATTRS{idVendor}=="1d6b"
ATTRS{interface_authorized_default}=="1"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Linux 4.6.0-1-amd64 xhci-hcd"
ATTRS{maxchild}=="4"
ATTRS{product}=="xHCI Host Controller"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="unknown"
ATTRS{serial}=="0000:00:14.0"
ATTRS{speed}=="5000"
ATTRS{urbnum}=="47"
ATTRS{version}==" 3.00"
looking at parent device '/devices/pci0000:00/0000:00:14.0':
KERNELS=="0000:00:14.0"
SUBSYSTEMS=="pci"
DRIVERS=="xhci_hcd"
ATTRS{broken_parity_status}=="0"
ATTRS{class}=="0x0c0330"
ATTRS{consistent_dma_mask_bits}=="64"
ATTRS{d3cold_allowed}=="1"
ATTRS{device}=="0x1e31"
ATTRS{dma_mask_bits}=="64"
ATTRS{driver_override}=="(null)"
ATTRS{enable}=="1"
ATTRS{irq}=="29"
ATTRS{local_cpulist}=="0-3"
ATTRS{local_cpus}=="0f"
ATTRS{msi_bus}=="1"
ATTRS{numa_node}=="-1"
ATTRS{subsystem_device}=="0x1949"
ATTRS{subsystem_vendor}=="0x103c"
ATTRS{vendor}=="0x8086"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
# /etc/udev/udev.conf (the same on booted system and in initramfs)
# see udev.conf(5) for details
#
# udevd is started in the initramfs, so when this file is modified the
# initramfs should be rebuilt.
#udev_log="info"
It doesn't matter if I plug disk into USB 3 or USB 2 port on computer.
USB2 devices plugged in before initramfs initialization are correctly recognized and settled. I don't have any other USB 3 device to verify if it would be affected as well. However, I could try with this disk on my friend's computer (with Ubuntu 16.04) – it was settled and available in /dev/
after boot.
It doesn't matter if I generate initramfs by initramfs-tools or by dracut.
How can I ensure that /dev/sdb*
related to this HDD is available in fully-booted system even if cable was plugged in before boot?
Best Answer
OK, this is a wild guess and a workaround (rather than a proper understanding of the issue) but it should work.
Make a
udev
rules file, say,/etc/udev/rules.d/z30-seagate-disk.rules
and add the following rule:This should force
udev
to make a second pass and add the disk as/dev/seagate
block device. You will also need to add that file to theFILES
variable in/etc/mkinitcpio.conf
so it gets into theinitramfs
. (And runmkinitcpio -p linux
to rebuild theinitramfs
)Disclaimer: Tested on Arch, not on Debian, and not using USB 3.0.
Another workaround would be to force
uas
(USB SCSI) to be always loaded by the kernel. Add to a file say/etc/modules-load.d/seagate-disk.conf
the module name:In theory only
uas
is needed, but I cannot replicate you issue therefore I'd try brute forcing everything that is needed to manage a USB HDD. Again, add that file toFILES
in/etc/mkinitcpio.conf
.This will force the kernel to have
uas
always loaded. Maybe whileudev
is running though the buses it falsely assumes the the USB hubs/buses are not loaded with anything since the kernel has no USB modules loaded.