デバイスが接続されているUSBポートの識別

デバイスが接続されているUSBポートの識別

f3私はUSBフラッシュドライブの大規模コピーと大規模テスト(使用)用のカスタムBashスクリプトを開発しています。

ペンドライブがどのUSBポートに接続されているかを識別できるかどうかを知りたいです。

番号付きポートを備えたUSBハブがあります。何かが接続されているかどうかを識別し、知っている静的アドレスがあり、それが何であるか(デフォルトではUSBポートに対応する/ dev / sd *ファイル)、ユーザーが何であるかを理解しやすくすることができます。引き続きバッチ全体が処理されるのを待ってから、良いドライブから不良ドライブを分類するのではなく、プロセスの早い段階で不良ドライブを取り外すことができます(これは私がやっていることです)。

私は周りを探してみましたが、私が達成したい目標と一致するものが見つからなかったので、この場合は助けを求めることにしました。

これで、/dev/sd*ノード名でドライブを識別できますが、ユーザーはそれが何であるかわかりません。これをハブのUSBポートにマッピングできれば、USBポートに基づいて情報を表示でき、ユーザーはポート5に誤ったドライブが接続されていることがわかり、進行中の残りのプロセスを中断することなくそれらを削除できます。 。

その後、この操作を一括で停止し、すべてのポートがループで同時に機能するようにすることができます。これにより、ユーザーはいつでもドライブを接続して切断でき、HUBポート番号を介してタスクを追跡でき、ワークフローの速度が大幅に向上します。 。

したがって、基本的な質問は次のとおりです。 USBポートとそのポートに接続されているUSBフラッシュドライブを識別する方法は?

答え1

あなたはudevadmそれを使用して得ることができますデバイスパス特定のデバイスの。これはスキャン時にシンボリックリンクを介して行われるため、/sys/手動で行うこともできます(ただし、使いやすくなりますudevadm)。

たとえば、私のシステムの外部USBハブに接続されているUSBスティックは、次のようになります。

$ udevadm info -q path -n /dev/sdh
/devices/pci0000:00/0000:00:1d.0/usb3/3-1/3-1.1/3-1.1.3/3-1.1.3.2/3-1.1.3.2:1.0/host7/target7:0:0/7:0:0:0/block/sdh

USBツリーと比べるとわかるように、

$ lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
        |__ Port 1: Dev 26, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 3: Dev 29, If 0, Class=Hub, Driver=hub/4p, 480M
                |__ Port 2: Dev 31, If 0, Class=Mass Storage, Driver=usb-storage, 480M
                |__ Port 4: Dev 30, If 0, Class=Mass Storage, Driver=usb-storage, 480M
...

ルートの一部は、3-1.1.3.2ポート1(サウスブリッジ)を通過し、再びポート1(マザーボード)を通過し、ポート3(まだマザーボードにあります)を通過し、外部USBハブのポート2を通過するバス3に表示されます。 。このハブのポート4はSDカードリーダーに使用されます。

したがって、USBハブの接続方法に応じて同様の操作を実行し、関心のある最後のポートを抽出する必要があります。

答え2

これは、デバイス名を知らない、またはデバイスに関する情報を知らせるコマンドを発行できない、許容される解決策に代わるものです。

今後USBフラッシュドライブを挿入し、次を実行します。

udevadm monitor

USB フラッシュ ドライブが挿入されると、カーネルと Udev メッセージが詳細に送信され、ホストが USB フラッシュ ドライブをどのように表示するかが最後の行に通知されます。

18.04 udevadm監視コマンドのフィードバック

答え3

ノードを見つけるために使用できるノードへのシンボリックリンクが/dev/disk/by-path含まれているようです。/dev/sd*

file /dev/disk/by-path/*コマンドを実行すると、すべての/dev/sd*ノードとその物理アドレスが一覧表示されます。私はこれを簡単にキャッチできるはずです。

関連情報