Bash
如何知道 /dev/sdX 是連接的 USB 還是 HDD?
我如何知道是本地硬碟還是 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
列出了兩者執行)還有其他一些,或多或少比這些直接。