语境
我正在从现有的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
网上找不到任何相关内容,我现在很茫然。
答案1
目录下看看/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/
,这也可能会派上用场。