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

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

我如何知道是本機 HDD 還是 USB 隨身碟?我比較喜歡一種沒有root權限的方法。/dev/sdX

好的,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

答案1

有幾種方法可以在沒有 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列出了兩者)

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

答案2

您可以使用lsblk報表TRAN (裝置傳輸類型):

lsblk -do name,tran

NAME TRAN
sda  sata
sdb  sata
sdd  usb

其中-dor--nodeps表示不列印從屬設備,-o name,tran--output name,tran表示僅列出設備名稱和設備傳輸類型。新增rm至輸出列清單以查看哪些裝置可移動(1如果true):

lsblk --nodeps --output NAME,TRAN,RM

NAME TRAN   RM
sda  sata    0
sdb  sata    0
sdd  usb     1

-n刪除標題,例如僅列印特定磁碟機的傳輸類型:

lsblk -ndo tran /dev/sdb

sata

請注意,現代版本lsblk2.27和更新版本)支援JSON輸出,因此您也可以執行以下操作:

lsblk -Jdo name,tran | jq -r '.blockdevices[] | select(.tran=="usb") | .name'

僅列出USB總線上連接的區塊設備。

答案3

我知道一個解決方案,但遺憾的是,它需要 root 權限。無論如何,您可能仍然發現它很有用:

sudo lshw -class disk -class storage

對於每個設備,它將列印邏輯名稱(例如,/dev/sda)和總線訊息,如果是 USB 設備,則類似於“usb@1:2”。

範例輸出:

[...]
  *-storage
       description: SATA controller
       physical id: d
       bus info: pci@0000:00:0d.0
       configuration: driver=ahci latency=64
[...]
     *-disk:0
          description: ATA Disk
          physical id: 0
          bus info: scsi@2:0.0.0
          logical name: /dev/sda
[...]
  *-scsi
       physical id: 3
       bus info: usb@1:2
       configuration: driver=usb-storage
     *-disk
          description: SCSI Disk
          physical id: 0.0.0
          bus info: scsi@6:0.0.0
          logical name: /dev/sdc
[...]

答案4

只需讀取 的值/sys/block/sdX/removable

例如:

$ cat /sys/block/sda/removable
0
$ cat /sys/block/sdc/removable
1

/dev/sdc是 USB 密鑰(可以是 SD 卡或任何其他可移動媒體)。

相關內容