Usb

如何使用 lsusb 的輸出導出塊設備資訊

  • November 6, 2019

我正在建構一個腳本,讓使用者選擇 USB 磁碟作為備份目標。這個想法是創建一個跨越整個設備的分區。lsusb給出我打算呈現給使用者的供應商 ID 和名稱。

我顯然只想列出磁碟,沒有其他設備。我還需要找出/dev使用者選擇的磁碟的設備名稱,以便在其上創建分區。我已經查看/dev/disk//sys/嘗試在那裡的各種符號連結中找到交叉引用。我也無法利用lsblkdf實現我的目標。我想知道:

  • 如何使用lsusb提供的資訊來確定哪些 USB 設備是磁碟?
  • 如何使用lsusb提供的資訊來獲取/dev特定設備的設備名稱?

您的問題的答案在某種程度上取決於將使用什麼機制來觸發腳本。

假設腳本是從某種備份程序中呼叫的,而該程序在連接 USB 設備時不會立即呼叫(例如,如果您從udev規則觸發它就是這種情況),那麼您可以使用它udevadm info來收集所有資訊需要。

想法如下:

  • 任何連接的 USB 驅動器都會被核心自動分配一個設備節點*/dev/sdX*
  • 如果您遍歷所有設備節點*/dev/sd$$ a-z $$(或者更確切地說,無論哪個實際存在於/dev/*下)並呼叫udevadm info --query=all /dev/sdX每一個,您就可以確定其中哪個是 USB 驅動器,因為輸出將有一行說明
E: ID_BUS=usb
  • 同樣,您會發現包含供應商和型號的輸出行,如
E: ID_MODEL=Flash_Disk
< ... >
E: ID_VENDOR=Generic

因此,通過解析udevadmusinggrep或類似的輸出,您將能夠為您的目的收集所有必要的資訊。

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