treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Raspberry Piに接続されたUSBデバイスの情報を収集

Raspberry PiにUSB経由で接続した外付けHDDの状態を調べるにはどうすればいいか、そのコマンドをご報告です。
将来的にはやりたいことがあるけど、まだまだ具体的にできない感じ。

将来的にやりたいこと

Raspberry PiにUSB経由で外付けHDDを接続し、sambaサーバを稼働させています。
外付けHDDがマウントされていれば問題なく動作するのですが、何かの拍子に外付けHDDのマウントが解除されるとsambaサーバが正常動作しなくなってしまいます。

今回のコマンドを上手く使って、マウントされている状態を監視するか、マウント解除されたらアラートを出す、といった状態確認ができるといいなぁと思っています。(今回はやっていない)

結論:USB接続を表示するコマンド

いきなり結論ですが、USB接続の機器状態を調べるときは、コマンド「lsusb」で確認できます。

$ lsusb

実行してみると

こういう感じで、接続されているUSB機器の状態が一覧で表示されます。
--------------------------------------------------------------
実行例
--------------------------------------------------------------
~ $ lsusb
Bus 001 Device 005: ID 0584:0270 RATOC System, Inc. RS-EC32-U3RWS
Bus 001 Device 004: ID 0584:0270 RATOC System, Inc. RS-EC32-U3RWS
Bus 001 Device 003: ID 0424:ec00 Microchip Technology, Inc. (formerly SMSC) SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Microchip Technology, Inc. (formerly SMSC) SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
--------------------------------------------------------------

このコマンドを実行したRaspberry Pi 3Bでは、USBバスにギガビットイーサネット(有線LANアダプタ)が接続されている関係から、「SMSC9512/9514 Fast Ethernet Adapter」も表示されます。

Device004/005に表示されている「RATOC System, Inc. RS-EC32-U3RWS」が外付けHDDです。二台接続しているので二つのエントリが表示されています。

もうちょっと詳しく

オプションなしの状態では一覧で表示されますが、オプションを付加してツリー表示することもできます。

この場合、

$ lsusb -t

と言う具合に、「-t」オプションを付加すると階層表示で接続機器の一覧を確認することができます。

実行してみます。

--------------------------------------------------------------
実行例
--------------------------------------------------------------
$ lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
        |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
        |__ Port 4: Dev 4, If 0, Class=Mass Storage, Driver=usb-storage, 480M
        |__ Port 5: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 480M
--------------------------------------------------------------

Driverとある箇所が「smsc95xx」がNICで、「usb-storage」とあるのが外付けHDDドライブです。ポート番号とデバイス番号(たぶんDevの箇所)がそれぞれ「Device 004」とか「Device 005」とある箇所に対応して「Port 4: Dev 4」とか「Port 5: Dev 5」と言う具合に対応しているように思います。

詳細情報を確認する

詳細な情報を表示するには-vオプションを付けてlsusbコマンドを実行

lsusb -v

--------------------------------------------------------------
実行例
--------------------------------------------------------------

--------------------------------------------------------------


「lsusb -v」の実行結果を確認すると、ベンダー名やシリアル番号を確認出来ます。

どのデバイスを表示しているかは、「Device 005」のID番号で確認します。

「iManufacturer:1:Ratoc Systems」とか「iProduct:2:RS-EC32-U3RWS」でUSB機器の情報が確認できます。「iSerial」の欄には機器のシリアル番号も表示されていました。

ハードディスクなので「bInterfaceClass:8:Mass Storage」といった表示も見て取れます。

いろいろなUSB機器の詳細情報を画面に表示することが出来るのが「-v」オプションです。

rootで実行すると、追加情報である「Binary Object Store Descriptor:(バイナリオブジェクトストア記述子:)情報がさらに表示されます。

デバイスの速度や、デバイスステータスなどの表示を確認出来ます。ここまでやって思ったのですが、Raspberry Pi 3B+でやるより、Raspberry Pi 4でやってみた方が(USB3.0なので)有用な情報収集になったんじゃないかという気がしてきました。

追加:usb-devicesコマンド

lsusbで必要な情報は概ね収集できますが、もう一つ同じようにUSB機器の情報を表示するコマンドに「usb-devices」もあります。

これを実行すると、

このように、接続されているUSB機器の情報が改行区切りで画面表示されます。
図は「Device 005」のUSBハードディスクのみ表示しています。

デバイス番号は一行目の「Dev#=  5」とある箇所が対応します。

lsusbコマンド実行結果の「ID 0584:0270」の箇所は、usb-devicesコマンドの表示で「P:  Vendor=0584 ProdID=0270 Rev=00.01」と表示されている箇所のベンダーIDとプロダクトIDが該当します。同じ機器だとここは同一の数字になります。

簡単に「SerialNumber」の欄でlsusbコマンドとの実行結果と照らし合わせることも可能です。

これらの情報を使って…

マウントしたUSB機器の状態を表示させるlsusbコマンドやusb-devicesコマンドを使って、マウントされている正常状態の監視か、マウント解除されたときに(USB機器の情報が表示されないのを)検知してアラートを発行する、といったことができるように、その内やってみようと思っています。