16台を超えるUSBフラッシュドライブを検出できません。

16台を超えるUSBフラッシュドライブを検出できません。

あるUSBドライブから別の複数のドライブにファイルをコピーするbashスクリプトを作成しています。

Xubuntuのみを実行する古いシステムでは、問題なく30個のデバイスを検出できます。 USB 2.0ポートのみがあります。

Linux Mintを実行している別の最新のコンピュータは、一度に16台以上のドライブを検出できません。 USB 3.0ポートのみがあります。 16台を超えるドライブを接続すると、新しいドライブはlsblkに表示されなくなります。

なぜですか?

編集する:

fduffが指摘したように、17番目のUSBドライブを接続した後、dmesgを確認しましたが、次のように表示されました。

[  531.519845] usb 3-9.3.2.6: new high-speed USB device number 46 using xhci_hcd
[  531.974582] usb 3-9.3.2.6: New USB device found, idVendor=abcd, idProduct=1234
[  531.974585] usb 3-9.3.2.6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  531.974586] usb 3-9.3.2.6: Product: UDisk
[  531.974587] usb 3-9.3.2.6: Manufacturer: General
[  531.974588] usb 3-9.3.2.6: SerialNumber: Љ
[  531.975337] usb 3-9.3.2.6: Not enough host controller resources for new device state.
[  531.975340] usb 3-9.3.2.6: can't set config #1, error -12

これはハードウェア制限のように見えるかもしれませんが、許可されるUSBデバイスの数は一定ではありません。

たとえば、15台以上のUSBドライブを接続できなくなりました(16番目のUSBドライブでエラー-12)。以前は約20台のデバイスを接続できましたが、すべて正しく検出されました。

複数のUSBコントローラに使用量を分散させるために別のUSBポートを試してみましたが、成功しませんでした。

私のハードウェア仕様:

MB: ASRock Z97 Extreme6
CPU: Intel Core i5-4690K
GPU: MSI GeForce GTX 960 2GB
RAM: HyperX Fury Black 8GB [2x4GB 1600MHz DDR3 CL10 DIMM]
PSU: Chieftec GPS-500A8 [500W]
Display: 2x AOC I2276VWM [IPS, 1920x1080]
HDD: WD Blue 3TB

また、28ポートManhattan USBハブを使用しています。 https://www.amazon.com/Manhattan-Port-USB-Hub-161718/dp/B0074024XU

LiveCD(USBドライブ)でX​​ubuntuを実行する低価格PCは、29台のデバイス(LiveCDドライブを含む30台)を検出してファイル転送を行うことができました。ある時点でHDDにWindows XPがインストールされていましたが、28ポートハブを検出します。お使いのコンピュータは故障して現在サービスを受けています(PSUまたはMBであると予想されます)。それでも動作しますが、光沢のある新製品は機能しません。

答え1

これはハードウェア関連の問題かもしれません。私はこれを見つけましたインテルフォーラム:

8シリーズマザーボードの場合、最大エンドポイントは96個です。各USBデバイスは複数のエンドポイントをサポートでき、サポート可能なエンドポイントの数はデバイスによって異なります。最大エンドポイントに達するとポップアップメッセージが表示されます。制限は、サポートされているデバイスの数ではなく、エンドポイントに基づいています。

そして

重要なのは、デバイスの数ではなく、そのデバイスが使用するエンドポイントの数です。 USB 3.0ポートに問題があるということは、USB 2.0 eHCIコントローラではなくxHCIコントローラが使用されることを意味します。 Intel xHCI コントローラは、eHCI コントローラよりも制限が低くなります。 xHCIコントローラの場合、96個のエンドポイントがあります。このエンドポイントの上限に達したようです。 MicrosoftのUSBユーティリティ「USBVIEW」などのツールを使用して、各USBデバイスで使用されているエンドポイントの数を表示できます。

デバイスを複数のUSBコントローラに展開する以外に、できることはあまりありません。もちろん、これはマザーボードに複数のUSBコントローラがあるかどうか、およびどの物理USBコネクタがどのUSBコントローラにルーティングされているかを確認できるかどうかによって異なります(USBVIEWも便利です)。

フォーラムの投稿を詳しく見ることは興味深いです。

次のコマンドを使用して、リストされているエンドポイントの数を確認できます。

lsusb -v | grep bEndpointAddress | wc -l

答え2

この問題は、多くのデバイスを処理できないネイティブUSBハードウェアコントローラで発生します。 Linuxソースコードは、インターフェイスを設定しようとしたときにxHCが「リソースエラー」コードを返したことを示しています。 xHCI規格の4.4.6章では、この状況について説明します。

必須リソース変数は使用可能なリソース変数と比較され、コマンドがリソースを超過購読したという結果が表示された場合(たとえば、使用可能なリソース - 必要なリソースがゼロ未満)、コマンドは失敗し、リソースエラー完了コードを表示する必要があります。コマンド完了イベントの戻りから。 xHCリソースの詳細については、セクション4.14.1.1を参照してください。

私の解決策は、内蔵USBデバイス(Bluetooth、Wi-Fiなど)やUSB 2.0デバイスにのみ接続されたUSB 3.0ハブなど、不要なすべてのUSBデバイスを削除してxHCIリソースを確保することでした。

次のように進んでください。

  1. 実行して、lsusb何か動作しないことを確認してください。
  2. sysfsを使用して未使用のデバイスを削除しますecho 1 > /sys/<path to device>/removedmesgデバイスと各サブデバイスを削除する方法を見てください。これは、ルーティングされたデバイスでこのコマンドを使用してUSBツリー全体を削除できることを意味します。
  3. これで、より多くのデバイスを正しく接続できるようになります(dmesgログを参照)。

再起動後もこの状態を維持するには、udevルールを追加してデバイスを削除します。

SUBSYSTEM=="usb" <your conditions to match unused devices> RUN="sh -c 'echo 1 > /sys$DEVPATH/remove'"

答え3

「評判」がないのでコメントできません。しかし、答えると:

14個+ 1個のUSBドライブが接続されており(マウス、キーボード、および2つのハブが接続されている)、コマンドは64個のエンドポイントを返します。他のものを挿入しましたが、エンドポイントは66です。 13台のUSBドライブをさらに接続しましたが、エンドポイントは最大76台です。 lsblkはまだそれを検出していませんが、まだデバイスごとに2つのエンドポイントとして報告します。個別の書き込みと読み取りのために、デバイスごとに2つのエンドポイントがありますか?

各デバイスには2つの追加のエンドポイント(エンドポイント0の入力と出力)が必要です。すべてのデバイスにはエンドポイント0が必要なため、これらのエンドポイントはlsusbには含まれません。また、ハブには報告されたエンドポイントの数よりも1つ以上のエンドポイントが必要です。

関連情報