
我如何知道是本機 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
其中-d
or--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
請注意,現代版本lsblk
(2.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 卡或任何其他可移動媒體)。