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


10

语境

我正在从现有的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在网上或网上都找不到任何相关内容,现在我很茫然。

Answers:


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.