Bash

如何知道 /dev/sdX 是連接的 USB 還是 HDD?

  • September 26, 2021

我如何知道是本地硬碟還是 USB 密鑰?我更喜歡一種沒有root權限的方法。/dev/sd*X*

好的,udevadm幫了大忙:

對於本地硬碟:

udevadm info --query=all --name=sdb | grep ID_BUS
E: ID_BUS=ata

對於 USB 密鑰:

udevadm info --query=all --name=sdc | grep ID_BUS
E: ID_BUS=usb

有幾種方法可以在沒有 root 權限的情況下進行判斷,其中許多是棘手的/hacky:

使用/dev/disk/by-id

find /dev/disk/by-id/ -lname '*sdX'

如果它的響應類似於/dev/disk/by-id/usb-blah-blah-blah,那麼它是一個 USB 磁碟。其他前綴包括ata, dm, memstick,scsi等。

使用/dev/disk/by-path沒有顯著不同:

find /dev/disk/by-path/ -lname '*sdX'

你會得到類似的東西/dev/disk/by-path/pci-0000:00:1d.7-usb-0:1:1.0-scsi-0:0:0:0。這顯示了通向磁碟的設備路徑。在這種情況下,粗略的路徑是 PCI → USB → 磁碟。(注意-usb-)。

使用 udev (我執行 Debian。我udevadm/sbin不在我的$PATH- 你的可能在別處,在你的上或之外$PATH):

/sbin/udevadm info --query=all --name=sdX | grep ID_BUS

您將獲得設備所在的匯流排類型。刪除| grep ID_BUS完整的資訊列表(您可能需要添加|less)。

如果您已lshw安裝,惠更斯的回答也可能有效:

lshw -class disk -class storage | less

並查看磁碟的輸出。在less,嘗試/sdX 並查看前面的bus info行 - 第一個只會說scsi@…,但它之前的幾行會更有啟發性。但是,您確實應該以超級使用者身份執行它,因此它可能不適合。(症狀:在我試過的筆記型電腦上,它列出了 SATA 磁碟,但沒有列出 USB 磁碟——同時sudo列出了兩者執行)

還有其他一些,或多或少比這些直接。

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