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

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

自動的にマウントされない複数のUSBドライブを接続したとしましょう。マウントできるように、どのデバイスファイルがどの物理デバイスに属しているかをどのように確認しますか?

私はMac OS Xを使用していますが、すべて(または少なくとも最も広く使用されている)Unixシステムに適用される答えを好みます。 Linuxを使用する前にこの問題が発生しました。

答え1

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)に入れることができる関数は次のとおりです。

USBディスクリスト()
{
    [[ "x$1" == "xv" ]] && Shift&& local VERBOSE=-v
    ${@-/dev/sd?}のdsk用
    する
        /sbin/udevadm info --query=path --name="$dsk" | grep --color=auto -q USB ||
        echo "====== $dsk デバイスは次のとおりです。"
        ( 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/sdblistusbdisks sdb sdc
  • listusbdisks -v [optional devices as above]- 詳細出力表示lsusb

[編集する]:複数のデバイスクエリ、インストール、および制御チェックなどの機能が追加されましたlsusb

答え2

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

答え3

Mac OS Xではdiskutil list

答え4

すべてのUNIXではこれが可能だとは思わない。

今日の一般的な外部バスは、IDEなどのポートに固定された番号付け方式を使用していません。したがって、マッピングに必要な唯一の残りのデータソースは、ドライブの製造元名、シリアル番号、またはパーティションのUIDです。

製造元の名前は、指定されたシステムで必ずしも一意である必要はありません(同じシリーズの2つの外部ドライブを接続していると仮定すると、2つのドライブのIDは同じです)。シリアル番号はパーティションUIDのように「外部からは見えません」。

したがって、私が考えることができる唯一の一般的な解決策は、物理ドライブにシリアル番号をタグ付けし、UDEVが利用可能な場合はrozcietrzewiaczの回答で提供されているudevadmコマンドを使用することです。

関連情報