Usb
如何使用 lsusb 的輸出導出塊設備資訊
我正在建構一個腳本,讓使用者選擇 USB 磁碟作為備份目標。這個想法是創建一個跨越整個設備的分區。
lsusb
給出我打算呈現給使用者的供應商 ID 和名稱。我顯然只想列出磁碟,沒有其他設備。我還需要找出
/dev
使用者選擇的磁碟的設備名稱,以便在其上創建分區。我已經查看/dev/disk/
並/sys/
嘗試在那裡的各種符號連結中找到交叉引用。我也無法利用lsblk
並df
實現我的目標。我想知道:
- 如何使用
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
因此,通過解析
udevadm
usinggrep
或類似的輸出,您將能夠為您的目的收集所有必要的資訊。