Usb-Drive

如何將 USB 設備 UUID 與 MODEL 和 VENDOR 匹配?

  • April 23, 2020

我正在開發一種用於管理連接到我的機器的 USB 設備的工具。

有一次我需要將 UUID 與供應商和型號相匹配,所以我使用了以下命令:

# lsblk -o UUID,MODEL,VENDOR,TRAN
5A26-0601                            USB3.0 CRW   -SD Generic- usb
                                    Voyager 3.0      Corsair  usb
7936-E126                                                      

最終它必須雙向工作:有時我只有一個 UUID,我需要找到 MODEL/VENDOR,有時我有 MODEL 或 VENDOR,我需要找到所有匹配的 UUID。

對於設備,5A26-0601一切都在訂購 - 數據欄位都在一行中,我可以隨心所欲地使用grep,cutawk

另一台設備則不然——出於某種原因,UUID 位於其餘資訊下方的一行。如果7936-E126是唯一連接的設備,這仍然是正確的。UUID 的長度不能是原因,因為它們都包含 9 個字元。

如果我嘗試添加帶有設備位置的參數,我只能獲得有關以下內容的有用資訊5A26-0601

# lsblk -o UUID,MODEL,VENDOR,TRAN /dev/disk/by-uuid/5A26-0601
UUID                                 MODEL            VENDOR   TRAN
5A26-0601                            USB3.0 CRW   -SD Generic- usb
# lsblk -o UUID,MODEL,VENDOR,TRAN /dev/disk/by-uuid/7936-E126
UUID                                 MODEL VENDOR TRAN
7936-E126                                         

如何獲取所有設備所需的所有數據?是lsblk適合這項工作的正確工具,而我只是用錯了,我應該使用其他東西,還是這是我能得到的最好的工具,我必須提高我的腳本技能並嘗試解析我現在得到的結果?

它必須在嵌入式環境中工作,所以我更喜歡使用盡可能簡單的工具。

我已經設法解決了我的問題udevadm

MODEL和VENDOR可以通過查詢屬性和grep相關資訊得到:

# udevadm info --query property /dev/disk/by-uuid/7936-E126 | grep "ID_VENDOR=\|ID_MODEL="
ID_MODEL=Voyager_3.0
ID_VENDOR=Corsair
# udevadm info --query property /dev/disk/by-uuid/5A26-0601 | grep "ID_VENDOR=\|ID_MODEL="
ID_MODEL=USB3.0_CRW_-SD
ID_VENDOR=Generic-

所以現在我可以輕鬆且明確地訪問給定 UUID 的 MODEL 和 VENDOR。

目前,扭轉此過程的唯一方法是遍歷所有設備,並僅選擇具有屬性ID_BUS=usb和匹配 VENDOR 或 MODEL 的設備,但鑑於原始問題的範圍,這個答案就足夠了。

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