USBドライブを2つマウントしたいのですが、2つのマウントポイントが必要です。残念なことに、Linuxカーネルは名前の変更を受けました、そして、私はどの/dev
位置が正しいものであるかについて理解することができません。どのデバイスノードがUSBドライブであるかを調べるためにdmesg
や/proc
、あるいは他の場所を調べる方法はありますか。
(私がArchLinuxを使っているのが助けになるのであれば…/dev/sda
が最初のハードドライブ、/dev/sr0
がdvdドライブなどです。)
編集:USBドライブはUSBハブに接続されています。私はdmesg
を見ました、そしてそれはハブが接続されていてそれに接続されている3つの装置をスキャンしたと言っています。それでも私のUSBドライブがどこにあるのかわかりません
最も簡単な方法:USBデバイスを接続した後にdmesg
の出力を見てください。どの/dev
ノードが割り当てられているのかがわかります。
これらすべては良い提案ですが、最も速くて冗長でない方法は、端末に次のように入力することです。
mount
マウントされているすべてのデバイスのリストが表示されます(これはUSBドライブがマウントされていることを前提としています。これは通常、最新のLinuxディストリビューションの場合です)。
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 は、何も出力しません。
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で削除されました。
何が起こっているのかを確認する最も簡単な方法は、(もちろんルートとして)入力することです。
blkid -c /dev/null
これは、マウントされていなくても、すべてのブロックデバイスに関する完全な概要を示します。
何らかの理由であなたが人生をもっと面白くしたいのなら、/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とあなたのハードウェア全般に関する一般的な情報を提供します。
Sudo fdisk -l
そして結果を分析するだけです。
つかいます
ls -l /dev/disk/by-id/usb*
デフォルトのudevルールの下では、ほとんどのusbデバイスが表示され、システム上のそれらのブロックデバイス名へのシンボリックリンクが表示されます。
それでもうまくいかない場合は、/dev/disk/by-id/
を直接見てください。
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"
/dev/disk
の下のツリーを見てください。さまざまな方式でディスクとそのパーティション(ファイルシステム)を一覧表示します。
dmesgに情報がなくなった場合は/ var/log/message。
USBドライブを抜いて再度差し込むと、カーネルから初期化されるはずです(dmesg)。
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