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

linux usb

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

(私は ArchLinux を使っています。/dev/sda は最初のハードドライブ、/dev/sr0 は DVD ドライブなど)

編集:USBドライブはUSBハブに接続されています。dmesgを見てみると、ハブが接続されていると書いてあり、接続されている3つのデバイスをスキャンしてくれました。しかし、USBドライブがどこにあるのかはまだわかりません

  168  Old account  2008-09-16


ベストアンサー

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

85  zigdon  2008-09-16


udev を実行している限り、/dev/disk/by-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 を実行すると何も出力されません

58  None  2008-09-16


これらはすべて良い提案ですが、最も手っ取り早く、かつ冗長にならない方法は、ターミナルに以下のように入力するだけです

mount

これはマウントされているすべてのデバイスのリストを表示します (これは USB ドライブがマウントされていると仮定したもので、最近の Linux ディストリビューションでは通常そうです)

57  AnotherLongUsername  2012-09-04


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

もちろん、これにより、dmesg やログから grep する手間が省けます

Update

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

少なくとも 2010 年 7 月頃から [1] udevinfo は Debian (とその派生) では udevadm info に置き換えられ、シンボリックリンクはすぐに非推奨となり削除されました (古い更新されていないマシンではまだ見つけることができます)。常に [1] から読むことができます

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

26  Eltariel  2008-09-16


一番簡単な様子を見る方法は、(もちろんルートとして)入力するだけです

blkid -c /dev/null

これにより、マウントされていない場合でも、すべてのブロックデバイスの概要を知ることができます

23  toh  2013-01-02


/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  2009-09-24


sudo fdisk -l

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

11  Felipe  2015-11-10


Use

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

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

それでもダメなら、/dev/disk/by-id/を直接見てください

8  DJ Capelis  2008-09-16


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"

7  lemsx1  2012-08-24


/dev/diskの下のツリーを見てください。様々な方式でディスクとそのパーティション(ファイルシステム)がリストアップされています

2  Ted Percival  2008-09-16


/var/log/message dmesg が情報を持たなくなった場合

2  None  2008-09-16


USBドライブのプラグを抜いて挿し直すと、カーネル(dmesg)から初期化されているのがわかるはずです

0  Howler  2008-09-16


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  2018-11-29


タイトルとURLをコピーしました