web-dev-qa-db-ja.com

どの/ devがUSBフラッシュドライブであるかをどうやって知るのですか?

USBドライブを2つマウントしたいのですが、2つのマウントポイントが必要です。残念なことに、Linuxカーネルは名前の変更を受けました、そして、私はどの/dev位置が正しいものであるかについて理解することができません。どのデバイスノードがUSBドライブであるかを調べるためにdmesg/proc、あるいは他の場所を調べる方法はありますか。

(私がArchLinuxを使っているのが助けになるのであれば…/dev/sdaが最初のハードドライブ、/dev/sr0がdvdドライブなどです。)

編集:USBドライブはUSBハブに接続されています。私はdmesgを見ました、そしてそれはハブが接続されていてそれに接続されている3つの装置をスキャンしたと言っています。それでも私のUSBドライブがどこにあるのかわかりません

157
Rudolf Olah

最も簡単な方法:USBデバイスを接続した後にdmesgの出力を見てください。どの/devノードが割り当てられているのかがわかります。

83
zigdon

これらすべては良い提案ですが、最も速くて冗長でない方法は、端末に次のように入力することです。

mount

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

53

udev を実行している限り、/ dev/disk/by-id/usb - 製造元名を参照することで簡単に実行できます。 _通し番号。これらはシンボリックリンクとして表示され、fstab内で直接参照することも、 readlink -e を使用して関連するブロックデバイスを決定することによって間接参照することもできます。

これが現実の例です。私のマシンには、3台のUSBハードドライブが接続されています。これらはそれぞれ/ dev/disk/by-idに一意のシリアル番号で表示されます(ただし、製造元の文字列は共通です)。これら3つの一意のエントリのそれぞれへのシンボリックリンクを作成しました。 readlink -elinkname。たとえば、私のマシンで readlink -e/root/disk2 を実行すると、現在 "/dev/sde "と表示されますが、 /] readlink -e/root/disk3 は、何も出力しません。

53
stormlash

udevinfo -q all -n /dev/sdaを試してください。ここで、/dev/sdaはディスクへのパスです。これはあなたが見ているディスクについての情報のボートロードを与えます - それが接続されているバスについてあなたに告げるエントリーがあります。

これはもちろんdmesgやログを調べてしまう手間を省きます。

更新

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

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

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

24
Eltariel

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

blkid -c /dev/null

これは、マウントされていなくても、すべてのブロックデバイスに関する完全な概要を示します。

22
toh

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

使用するすべてのデバイスを一覧表示するには

hal-device

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

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

もあります:

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

もっと複雑にしたい場合は、比較的簡単に HALベースの自動マウンター を自分で書くことができます。完全に。

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

lsusb -v
lshw

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

11
Grumbel
Sudo fdisk -l

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

10
Felipe

つかいます

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

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

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

8
DJ Capelis

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"
6
lemsx1

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

2
Ted Percival

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

2
Allan Wind

USBドライブを抜いて再度差し込むと、カーネルから初期化されるはずです(dmesg)。

0
Howler

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
0
user30747