/dev/sdb* 啟動後不可用 - initramfs 不載入 uas 和 usb_storage 模組
如果在 initramfs 啟動時已插入外部 USB 3 HDD (Seagate Backup Plus 1T),則我的 Debian 測試系統上的 Initramfs 無法自動載入必要的核心模組。如果我啟動到 initramfs shell,拔出電纜並將其重新插入,那麼設備將出現並且我將能夠安裝它。
我在 initramfs 中不需要這個設備,但是
/dev/
由 initramfs 創建的文件系統被傳遞到我確實需要它的主作業系統。我必須插拔電纜才能使設備可用。**如何設置 initramfs 來解決此設備?**或者我如何告訴主作業系統遍歷硬體匯流排並處理 initramfs 中的 udev 錯過的所有設備?
附加資訊
在我關閉和打開設備後,會載入兩個新模組:
# lsmod Module Size Used by uas 24576 0 usb_storage 69632 1 uas
這些模組在 initramfs 映像中可用:
# 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
並lsusb
在插入設備後輸出:# 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
initramfs 和工作系統上的輸出(它們幾乎相同,唯一的區別在於、stat
、iodone_cnt
和ioerr_cnt
):iorequest_cnt``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"
將磁碟插入電腦上的 USB 3 或 USB 2 埠都沒有關係。
在 initramfs 初始化之前插入的 USB2 設備被正確辨識和解決。我沒有任何其他 USB 3 設備來驗證它是否也會受到影響。但是,我可以在我朋友的電腦(使用 Ubuntu 16.04)上嘗試使用此磁碟 - 它已解決並在
/dev/
啟動後可用。我是通過 initramfs-tools 還是通過 dracut 生成 initramfs 都沒有關係。
/dev/sdb*
即使在啟動前插入電纜,如何確保與此硬碟相關的硬碟在完全啟動的系統中可用?
好的,這是一個瘋狂的猜測和解決方法(而不是對問題的正確理解),但它應該可以工作。
比如說,製作一個
udev
規則文件,/etc/udev/rules.d/z30-seagate-disk.rules
然後添加以下規則:ATTRS{manufacturer}=="Seagate", ATTRS{product}=="BUP Slim BK", SYMLINK+="seagate"
這應該強制
udev
進行第二次傳遞並將磁碟添加為/dev/seagate
塊設備。您還需要將該文件添加到FILES
變數 in/etc/mkinitcpio.conf
以便它進入initramfs
. (並執行mkinitcpio -p linux
重建initramfs
)免責聲明:在 Arch 上測試,而不是在 Debian 上測試,也沒有使用 USB 3.0。
另一種解決方法是強制
uas
(USB SCSI)始終由核心載入。添加到文件中說/etc/modules-load.d/seagate-disk.conf
模組名稱:uas usb_storage usbcore scsi_mod usb_common
理論上只
uas
需要,但我無法複製您的問題,因此我會嘗試暴力破解管理 USB HDD 所需的一切。同樣,將該文件添加FILES
到/etc/mkinitcpio.conf
.這將強制核心
uas
始終載入。可能在udev
通過匯流排執行時,它錯誤地假設 USB 集線器/匯流排沒有載入任何東西,因為核心沒有載入 USB 模組。