找出特定设备是否为 USB 大容量存储设备

sya*_*yam 10 linux devices usb-drive block-device removable-storage

语境

我正在从现有的dd工厂映像自动化 SD 卡映像。SD 卡始终通过外部 USB 读卡器连接,因此在系统中显示为 SCSI 块设备/dev/sd*

目前我的命令的语法是:SD 卡块设备write-image DEVICE在哪里DEVICE,例如。/dev/sdd.

问题

我已经在做一个基本的检查DEVICE来验证它的形式,/dev/sd*但这还不够:我担心用户(不习惯 Linux 的生产人员)犯错误并指定另一个看似有效的设备,例如。/dev/sda. 您可以看到迫在眉睫的灾难,特别是因为我的映像脚本需要root权限(请注意,不是编写映像本身,而是稍后修改SD卡,包括根据SD卡的实际大小调整分区大小)...

我想验证指定的设备实际上是某个 USB 大容量存储设备(或者至少是一个可移动设备),以便我可以保护系统磁盘不被意外丢弃。我怎样才能做到这一点?

/proc在网上或网上找不到任何相关内容,我现在很茫然。

Dav*_*man 10

/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/,这也可能会派上用场。