web-dev-qa-db-ja.com

特定のデバイスがUSBマスストレージであるかどうかを確認します

環境

既存のddファクトリイメージからSDカードイメージングを自動化しています。 SDカードは常に外部USBカードリーダーを介して接続されているため、システムではSCSIブロックデバイス/dev/sd*として表示されます。

現在、私のコマンドの構文は次のとおりです。write-image DEVICEここで、DEVICEはSDカードブロックデバイスです。 /dev/sdd

問題

DEVICEの基本的なチェックをすでに行って/dev/sd*の形式であることを確認していますが、これだけでは不十分です。ユーザー(Linuxに慣れていない本番ユーザー)が間違いを犯して指定するのではないかと心配しています。別の一見有効なデバイス、例えば。 /dev/sda。特に私のイメージングスクリプトにはroot権限が必要なため(画像自体を書き込むのではなく、SDカードの実際のサイズに応じてパーティションのサイズを調整するなど、後でSDカードを変更するため)、迫り来る大惨事を見ることができます...

質問

システムディスクが誤ってゴミ箱に捨てられるのを防ぐために、指定されたデバイスが実際にUSB大容量記憶装置(または少なくともリムーバブルデバイス)であることを確認したいと思います。どうやってやるの?

/procやウェブ上で関連するものは何も見つかりませんでしたが、今はかなり途方に暮れています。

10
syam

/sys/ディレクトリの下をご覧ください。特に、/sys/block/には、/sys/devices/内のデバイスをブロックするためのシンボリックリンクが含まれています。

/sys/block/sdX/removableは、リムーバブルデバイスの場合は1として読み取られ、それ以外の場合は0として読み取られるように見えます。これにより、取り外し可能性の基本的なチェックが行われます。

USBデバイスかどうかを確認するためのより良い方法があるかどうかはわかりませんが、readlink /sys/block/sde../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1.2/6-1.2:1.0/Host7/target7:0:0/7:0:0:0/block/sdeのようなものを吐き出します。 usb*フォルダーが含まれているかどうかの確認は、簡単な確認として機能する場合があります。

ベンダーやモデルなどの他のデバイスの詳細は、/sys/block/sdX/device/から入手できます。これも便利な場合があります。

10
David Baggerman