どの/ devがUSBフラッシュドライブであるかを知るにはどうすればよいですか?


160

2つのUSBドライブをマウントしたいのですが、2つの異なるマウントポイントが必要です。残念ながら、Linuxカーネルは名前が変更されたため、どの/dev場所が適切なのかわかりません。どのデバイスノードがUSBドライブであるかを調べるためにdmesg/procまたは他の場所を調べる方法はありますか?

(もしそれが… /dev/sda最初のハードドライブで/dev/sr0あるか、DVDドライブであるかなどに役立つなら、私はArchLinuxを使用しています。)

編集:USBドライブはUSBハブに接続されています。調べてみるdmesgと、ハブが接続されていて、接続されている3つのデバイスがスキャンされたと表示されます。それでも、USBドライブがどこにあるかはわかりません。


1
見えない?ちょっと待ってください。または、別のUSBポートを試してください。'lsusb'にどのような違いがあるかを参照してください
Nick Devereaux

質問をいくらか言い換えたいと思うかもしれません-結局のところ、すべてのUSBデバイスがディスクではありません。
アラファンギオン2009年

3
dfそれがマウントされた場所のコマンドを紹介します
ウィル・シェパード

回答:


83

最も簡単な方法:dmesgUSBデバイスを接続した後の出力を確認します。どの/devノードが割り当てられているかが表示されます。


2
dmesgうまく動作dmesg/devますが、ノードが表示されない場合があります:[421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcdこれはどういう意味ですか?このデバイスをマウントするにはどうすればよいですか?デバイスはlsusb...に表示されます
-modulitos

1
実際、私はそれを理解しました。この問題を引き起こしていた最後のリブート以降にカーネルの更新がありました。再起動後、USBが正常にマウントされます。これが誰かの助けになることを願っています!
-modulitos

54

限り、あなたが実行されているようにudevを、あなたは参照の/ dev /ディスク/バイID / USB-ことにより、容易にこれを行うことができますmanufacturername _ serialNumberを。これらはシンボリックリンクとして表示され、fstab内で直接参照することも、readlink -eを使用して間接参照して関連するブロックデバイスを決定することもできます。

これが実世界の例です。私のマシンには、3台のUSBハードドライブが接続されています。これらは、一意のシリアル番号とともに/ dev / disk / by-idに表示されます(ただし、共通の製造元文字列を共有します)。これら3つの一意のエントリのそれぞれへのシンボリックリンクを作成しました。readlink-e linknameを実行することで、どのドライブがどのドライブであるか(および各ドライブに関連付けられているデバイス)をすばやく判別できます。たとえば、私のマシンでreadlink -e / root / disk2を実行すると、現在「/ dev / sde」と表示されますが、readlink -e / root / disk3は何も出力しません。


15
短く簡単に:for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done
フェリペアルカシバル

54

これらはすべて良い提案ですが、最も迅速で冗長な方法は、ターミナルに次のように入力することです。

mount

これにより、マウントされているすべてのデバイスのリストが表示されます(これは、USBドライブがマウントされていることを前提としています。これは通常、最新のLinuxディストリビューションの場合です)。


5
いいえ、デバイスを魔法のようにマウントするわけではありません。を使用して指定する必要がmount /dev/id /mount/pointあるため、機能しません。
polym 14

9
私の答えは、ユーザーの質問「dmesgまたは/ procまたは他の場所を調べて、どのデバイスノードがUSBドライブであるかを調べる方法はありますか?」に対処するものであり、Linuxでドライブをマウントする実用性に関するガイダンスを提供することを意図していません。
AnotherLongUsername

この答えは、私にとってほとんど同じ質問を解決しました。
マシューブラウン別名ロードマット14年

1
自動マウントの動作は、ディストリビューションの種類に大きく依存すると思います。
ジグガンジャー16

1
df私もそう思う。
アレクセイ

24

コマンドを試してください。udevinfo -q all -n /dev/sdaここで、/dev/sdaはディスクへのパスです。これにより、見ているディスクに関する情報が大量に表示されます。接続されているバスについてのエントリがあります。

これにより、dmesgやログを介してgrepを実行する必要がなくなります。

更新

udevadm info --query=all -n /dev/sda 

少なくとも2010年7月から[ 1 ] udevinfoがDebianで置き換えられ(派生)、udevadm infoすぐに廃止されて削除されるシンボリックリンクが少し一時的に追加されました(まだ更新されていない古いマシンで見つかります)。常に[ 1 ] から読むことができます:

udev 117でudevadm導入されudevinfo、他のプログラムは互換性のあるシンボリックリンクに変わりました。シンボリックリンクはudev 128で廃止され、udev 147完全に削除されました。


8
Debianでは、というudevinfo名前に変更されましたudevadm
スティーブポメロイ

8
Ubuntuでは、コマンドは"udevadm情報--query =すべての-nの/ dev / sdaに"のようです
machineghost

私は彼らがある時点でコマンドの名前を変更したと思います-私が答えを書いたとき(数年前)、コマンドは私がそれを投稿したubuntuシステムで機能しました;)
Eltariel

コマンドは、Ubuntuの中でまだ動作しますudevadm info --query=all -n /dev/ttyUSB1
シッダールタ

1
udevadm info --query=all -n /dev/ttyUSBFedoraでも。
slm

22

何が起こっているかを確認する最も簡単な方法は、(もちろんルートとして)入力するだけです:

blkid -c /dev/null

これにより、マウントされていない場合でも、すべてのブロックデバイスに関する完全な概要が得られます。


すべてのディストリビューションにこれがあるわけではありません。どちらを使用していましたか?
ニューアレクサンドリア

これは私のRaspbianディストリビューションには何も出力しません。
イゴールガナポルスキー16

BLKID:コマンドが見つかりません
IgorGanapolsky

Ubuntu 14.04 64ビットでは、このコマンドからの出力はありません。
gbmhunter

11

/dev/disk/by-* この場合、最も簡単な方法です。何らかの理由で人生をもっと面白くしたい場合は、HALを使用できます。

使用しているすべてのデバイスをリストするには:

hal-device

使用する特定のプロパティを取得するには(これは/dev/sd*USBストレージデバイスに戻ります):

hal-get-property --udi $UDI --key block.device

もあります:

hal-find-by-capability
hal-find-by-property

さらに複雑にしたい場合は、HALベースの自動マウンターを比較的簡単に作成できます。これは、物事を完全に自動化する場合に非常に便利です。

また、完全を期すために以下もあります。

lsusb -v
lshw

これは、USBとハードウェア全般に関する一般的な情報を提供します。


2
/ dev / disk / by-id / * usb *は非常に役立ちます。
ロブ

/ dev / disk / by-label ftw。ありがとう:)
トリプティク

10
sudo fdisk -l

そして結果を分析するだけです。


1
fdisk man page「デバイスが指定されていない場合、/ proc / partitions(存在する場合)に記載されているデバイスが使用されます。」fdiskを実行することは選択肢ではないかもしれません...私はそれがインストールされていないことを知っているDebianシステムに基づいて、いくつかのGPTシステムが不要なソフトウェアをインストールしないかもしれないと思います。それでも、/ proc / partitionsをチェックすることはオプションのはずです。
TOOGAM

これは私にとってうまくいった唯一のオプションでした。うまくいかなかった場合は申し訳ありません!
フェリペ

8

つかいます

ls -l /dev/disk/by-id/usb*

デフォルトのudevルールの下では、ほとんどのUSBデバイスが表示され、システム上のブロックデバイス名へのシンボリックリンクが表示されます。

それがうまくいかない場合は、/dev/disk/by-id/直接見てください。


6

USBデバイスの場合は、単に行うことができます

REMOVABLE_DRIVES=""
for _device in /sys/block/*/device; do
    if echo $(readlink -f "$_device")|egrep -q "usb"; then
        _disk=$(echo "$_device" | cut -f4 -d/)
        REMOVABLE_DRIVES="$REMOVABLE_DRIVES $_disk"
    fi
done
echo Removable drives found: "$REMOVABLE_DRIVES"

1
+1。タスクを自動的に実行するためのシンプルで簡潔なスクリプト。
リーセイ

2

下のツリーを見てください/dev/disk。ディスクとそのパーティション(ファイルシステム)をさまざまなスキームでリストします。


2

dmesgに情報がなくなった場合の/ var / log / message。


0

USBドライブを取り外して再び接続すると、カーネル(dmesg)から初期化されます。


0

stormlashからの優れた回答に基づいており、「/ dev / disk / by-id / usb」デバイスツリーを作成するためにudevに依存しているため、次のように述語(Bash)を定義できます。

is_usb_device() {
    local device_path=$1        # such as /dev/sdc
    for devlink in /dev/disk/by-id/usb*; do
        if [ "$(readlink -f "$devlink")" = "$device_path" ]; then
            return 0
        fi
    done
    return 1
}

そしてそれを使用します:

if is_usb_device "/dev/sdg"; then
    echo "/dev/sdg is a usb device"
else
    echo "/dev/sdg is not a usb device"
fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.