ある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ドライブ)でXubuntuを実行する低価格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リソースを確保することでした。
次のように進んでください。
- 実行して、
lsusb
何か動作しないことを確認してください。 - sysfsを使用して未使用のデバイスを削除します
echo 1 > /sys/<path to device>/remove
。dmesg
デバイスと各サブデバイスを削除する方法を見てください。これは、ルーティングされたデバイスでこのコマンドを使用してUSBツリー全体を削除できることを意味します。 - これで、より多くのデバイスを正しく接続できるようになります(
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つ以上のエンドポイントが必要です。