題 如何確定哪個/ dev是USB閃存盤?


我想安裝一個USB驅動器,其中兩個,我需要兩個不同的安裝點。不幸的是,Linux內核經歷了名稱更改,我無法弄清楚哪個 /dev 位置是正確的。有沒有辦法透視 dmesg 要么 /proc 或者在其他地方找出哪個設備節點是USB驅動器。

(如果有幫助,我正在使用ArchLinux ....../dev/sda 是第一個硬盤, /dev/sr0 是一個DVD驅動器等)

編輯:USB驅動器連接到USB集線器。我看了看 dmesg 它說集線器已連接,它掃描了連接到它的3個設備。仍然看不到我的USB驅動器在哪裡。


155
2017-09-16 03:51


起源


看不到嗎?也許等一下。或嘗試其他USB端口。看看'lsusb'有什麼區別 - Nick Devereaux
可能想稍微改一下這個問題 - 畢竟不是所有的usb設備都是磁盤。 - Arafangion
該 df 命令顯示它的安裝位置 - Will Sheppard


答案:


最簡單的方法:看看輸出 dmesg 連接USB設備後。它應該告訴你什麼 /dev 節點已分配給它。


77
2017-09-16 03:53



dmesg 效果很好,但我有一個案例 dmesg 不顯示 /dev 節點: [421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcd 這是什麼意思?我該如何安裝此設備?設備顯示出來 lsusb... - modulitos
實際上,我想通了。自上次重啟以來,內核更新導致了這個問題。重新啟動後,我的usb安裝得很好。希望這有助於某人! - modulitos


只要你在跑步 的udev,您可以通過引用/ dev / disk / by-id / usb-輕鬆完成此操作生產商名稱_序列號。它們顯示為符號鏈接,您可以在fstab中直接引用,也可以使用其取消引用 readlink -e 確定相關的塊設備。

這是一個真實世界的例子。在我的機器上,我連接了3個USB硬盤。這些都顯示在/ dev / disk / by-id中,帶有唯一的序列號(儘管它們共享一個共同的製造商字符串)。我已經創建了這三個唯一條目中的每一個的符號鏈接,現在可以通過運行快速確定哪個驅動器(以及與每個驅動器關聯的設備) readlink -e 鏈接名稱。例如,跑步 readlink -e / root / disk2 在我的機器上當前顯示“的/ dev / SDE“,而 readlink -e / root / disk3 不產生任何輸出。


53
2017-09-16 19:29



簡短而簡單: for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done - Felipe Alcacibar


所有這些都是很好的建議,但最快捷,最簡潔的方法是在終端中鍵入以下內容:

mount

這將給出所有已安裝設備的列表(這假設已安裝USB驅動器,這通常是現代Linux發行版的情況)。


51
2017-09-04 18:51



不,它不會神奇地安裝你的設備。你必須用它來指定它 mount /dev/id /mount/point,這樣做不起作用。 - polym
我的回答解決了用戶的問題“有沒有辦法通過dmesg或/ proc或其他地方查找哪個設備節點是USB驅動器。”,並不打算提供有關在Linux下安裝驅動器的實用性的指導。 - AnotherLongUsername
這個答案為我解決了一個幾乎相同的問題。 - Matthew Brown aka Lord Matt
我認為automount行為很大程度上取決於發行版類型。 - jiggunjer
df 我想也是如此。 - Alexey


嘗試命令 udevinfo -q all -n /dev/sda,哪裡 /dev/sda 是磁盤的路徑。這會為您提供有關您正在查看的磁盤的大量信息 - 有一個條目可以告訴您有關它所連接的總線的信息。

這當然可以使您免於通過dmesg和/或日誌進行grep。

更新 

udevadm info --query=all -n /dev/sda 

從至少2010年7月 [1]  udevinfo 在Debian(和派生)中被替換 udevadm info 有一點瞬間,有很少的符號鏈接很快被棄用和刪除(你仍然可以在舊的未更新的機器中找到它們)。始終來自[1]我們可以讀到:

在udev 117, udevadm 介紹和 udevinfo 和其他程序變成了兼容性符號鏈接。符號鏈接已棄用 udev 128 並且被移除了 udev 147


24
2017-09-16 03:59



在Debian, udevinfo 重命名 udevadm。 - Steve Pomeroy
在Ubuntu上,命令似乎是“udevadm info --query = all -n / dev / sda” - machineghost
我想他們在某個時候重命名了這個命令 - 當我寫完答案時(很久以前),這個命令對我發布的ubuntu系統有效;) - Eltariel
命令仍在ubuntu中工作, udevadm info --query=all -n /dev/ttyUSB1 - Siddharth
udevadm info --query=all -n /dev/ttyUSB 在Fedora中也是如此。 - slm


看看發生了什麼的最簡單的方法就是打字(當然是根):

blkid -c /dev/null

這為您提供了有關所有塊設備的完整概述,即使未安裝也是如此


23
2018-01-02 08:37



並非所有的發行版都有這個。你在用哪個? - New Alexandria
這對我的Raspbian發行版沒有任何輸出。 - Igor G.
命令未找到:blkid - Igor G.
在Ubuntu 14.04 64位上沒有此命令的輸出。 - gbmhunter


/dev/disk/by-* 在這種情況下,這是最簡單的方法,如果由於某種原因你想讓生活更有趣,你可以使用HAL。

列出您使用的所有設備:

hal-device

要獲得您使用的特定屬性(這將返回 /dev/sd* 在USB存儲設備上):

hal-get-property --udi $UDI --key block.device

還有:

hal-find-by-capability
hal-find-by-property

如果你想讓它變得更複雜,你可以相對容易地寫自己 基於HAL的自動貼片機,如果你想要完全自動化的東西,這可能非常方便。

而且為了完整性,還有:

lsusb -v
lshw

這提供了一般有關USB和硬件的一般信息。


11
2017-09-24 22:36



/ dev / disk / by-id / * usb *非常有幫助。 - Rob
/ dev / disk / by-label ftw。謝謝 :) - Triptych


sudo fdisk -l

然後分析結果。


8
2017-11-10 02:47



fdisk手冊頁 “如果沒有給出設備,則使用/ proc / partitions中提到的設備(如果存在)。”運行fdisk可能不是一個選項...基於我知道沒有安裝它的一個Debian系統,我的猜測是某些GPT系統可能無法安裝不需要的軟件。仍然,檢查/ proc / partitions應該是一個選項。 - TOOGAM
這是唯一適合我的選擇。如果它不適合你,我很抱歉! - Felipe


使用

ls -l /dev/disk/by-id/usb*

在默認的udev規則下,它將顯示大多數USB設備,它將顯示系統上其塊設備名稱的符號鏈接。

如果這不起作用,請查看 /dev/disk/by-id/ 直。


8
2017-09-16 04:18





對於USB設備,您可以做到

REMOVABLE_DRIVES=""
for _device in /sys/block/*/device; do
    if echo $(readlink -f "$_device")|egrep -q "usb"; then
        _disk=$(echo "$_device" | cut -f4 -d/)
        REMOVABLE_DRIVES="$REMOVABLE_DRIVES $_disk"
    fi
done
echo Removable drives found: "$REMOVABLE_DRIVES"

6
2017-08-24 17:37



+1。簡單而簡潔的腳本自動完成任務。 - leesei


看看下面的樹 /dev/disk。它按各種方案列出磁盤及其分區(文件系統)。


2
2017-09-16 03:55