Linux

查明特定設備是否為 USB 大容量儲存設備

  • June 27, 2013

語境

我正在從現有的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,我現在很茫然。

看看/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/,這也可能會派上用場。

引用自:https://unix.stackexchange.com/questions/80875