物理デバイスを接続した場合、どのデバイスファイルがそれに属しているかをどのようにして知ることができますか?


13

自動的にマウントされないいくつかのUSBドライブを接続するとします。どのデバイスファイルがどの物理デバイスに属しているのかを調べるにはどうすればよいので、たとえばマウントできますか?

私はMac OS Xを実行していますが、すべての(または少なくとも最も人気のある)Unixシステムで動作する答えが好きです。過去にLinuxでこの問題が発生しました。


Linuxでは、答えにはudevが関係する傾向があります。そのため、OSXでudevと同等のものを探してみてください。これは、特にOSXのudev機能の代替およびOSX USBデバイスインターフェイスガイドにつながります。
ジル 'SO-悪

MacOSXで最も簡単なのは、ラベルでボリュームを識別することです。しかし、Gillesは完璧なソリューションについては正しいです。
peterh-モニカの復職

回答:


14

udevの使用:

有用な情報のクエリを取得できますudev(それを使用するシステムで-ほとんどすべてのデスクトップタイプのLinux)。たとえば、どの接続ドライブがに関連付けられているかを知りたい場合は/dev/sdb、次を使用できます。

udevadm info --query=property --name=sdb

シリアル(ID_SERIAL_SHORT)など、そのデバイスのプロパティのリストが表示されます。その情報があれば、出力を見てlsusb -v、製造元や製品名などを見つけることができます。

これを行うための短いパスは

udevadm info --query=property --name=sdb | grep "\(MODEL_ID\|VENDOR_ID\)"

$ID_VENDOR_ID:$ID_MODEL_IDのはるかに短い出力で一致する行を参照してください lsusb

別の便利なオプションはudevadm monitorです。デバイスを接続する時点でどのデバイスノードが作成されたかを知りたい場合に使用します。だから最初の実行

 udevadm monitor --udev --subsystem-match=block

そして、デバイスを接続します。各出力行の最後に、検出されたブロックデバイス(ディスク/パーティション)のデバイス名が表示されます。

実用的なシェル関数の例:

以下は、.bashrc(または.zshrc)に入れることができる関数です。

listusbdisks() 
{
    [["x $ 1" == "xv"]] && shift && local VERBOSE = -v
    $ {@-/ dev / sd?}のdskの場合
    行う
        / sbin / udevadm info --query = path --name = "$ dsk" | grep --colour = auto -q usb || 継続する
        echo "===== device $ dsk is:"
        (eval $(/ sbin / udevadm info --query = property --name = "$ dsk" | grep "\(MODEL \ | VENDOR \)_ ID")
          ["$ ID_VENDOR_ID:$ ID_MODEL_ID" == ":"] && echo "不明" || \
            lsusb $ VERBOSE -d "$ ID_VENDOR_ID:$ ID_MODEL_ID"
        )
        grep -q "$ dsk" / proc / mounts && echo "-----デバイスはマウントされています----"
        エコー
    やった
}

次のように使用します。

  • listusbdisks-すべての/dev/sdxデバイスを認識するため。
  • listusbdisks sdbまたはlistusbdisks /dev/sdbまたはlistusbdisks sdb sdc-特定のデバイスに関する情報のみを取得します。
  • listusbdisks -v [optional devices as above] -の詳細な出力を表示する lsusb

[編集]:多くのデバイスへのクエリ、マウントのチェック、の冗長性の制御などの機能を追加しましたlsusb


限りでは十分ですが、すべてのシステムがを使用するわけではありませんudev
カレブ

@Caleb True ...実際、これlsusbもオプションのプログラムです。しかし、両方とも非常に一般的です。
rozcietrzewiacz

@rozcietrzewiacz質問は主にOSXに関するものですが、udevは本質的にLinuxに固有のものです。
ジル「SO-悪であるのをやめる」

@Gilまあ、本当。OSXの経験がないので、誤解を招かないように回答を更新しました。
rozcietrzewiacz

そのような場合に私が通常行うことは、デバイスを接続してすぐに実行することdmesgです。ただし、デバイスが既に接続されている場合、および最初のデバイスの後にさらにデバイスが接続されている場合、これは役に立ちません。:)
Abhishek A

3

普遍的な答えはありません。Linuxで最も簡単な方法は、おそらくgnomeディスクユーティリティを起動することです。マウントされているかどうかに関係なく、検出されたすべてのディスクが表示されます。コマンドラインから、blkidまたはの出力を調べることができますudevadm info --export-db


3

Mac OS Xでは、を使用できますdiskutil list


1

すべてのUnixに関して、これが実現可能だとは思いません。

今日の通常の外部バスは、IDEのようにポートに固定の番号付けスキームを使用しません。したがって、必要なマッピングの残りのデータソースは、ドライブの製造元名、シリアル番号、またはパーティションのUIDのみです。

メーカー名は、特定のマシンで必ずしも一意ではありません(同じシリーズの2つの外部ドライブを接続すると仮定します-それらは同一に識別します)。シリアル番号は、パーティションUIDのように「外部からは見えません」。

だから、私が考えることができる唯一の普遍的な解決策については、物理ドライブにシリアル番号のラベルを付け、UDEVが利用可能であれば、rozcietrzewiaczの回答にあるudevadmコマンドを使用することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.