如何确定哪个/ dev是USB闪存驱动器?


160

我想安装一个USB驱动器,其中两个,我需要两个不同的安装点。不幸的是,Linux内核进行了名称更改,我不知道哪个/dev位置是正确的位置。有没有一种方法可以浏览dmesg或在/proc其他地方找出哪个设备节点是USB驱动器。

(如果有帮助,我正在使用ArchLinux ... /dev/sda是第一个硬盘驱动器,/dev/sr0dvd驱动器等)

编辑:USB驱动器已连接到USB集线器。我看了一下dmesg,发现集线器已连接,并扫描了连接到它的3个设备。仍然看不到我的USB驱动器在哪里。


1
看不到吗?也许等一下。或尝试另一个USB端口。看看'lsusb'有什么区别
Nick Devereaux

可能想稍微改一下这个问题-毕竟,并非所有USB设备都是磁盘。
Arafangion 2009年

3
df命令显示了它的安装位置
Will Sheppard 2013年

Answers:


83

最简单的方法:dmesg连接USB设备后查看输出。它应该显示/dev分配给它的节点。


2
dmesg效果很好,但是我遇到了一个dmesg不显示/dev节点的情况:[421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcd这是什么意思?如何安装此设备?设备出现在lsusb...
modulitos

1
实际上,我知道了。自上次重启以来,发生了内核更新,这导致了此问题。重新启动后,我的USB安装就好了。希望这可以帮助某人!
modulitos '16

54

只要您正在运行udev,就可以通过引用/ dev / disk / by-id / usb- 制造商名称 _ serialnumber轻松完成此操作。这些显示为符号链接,您可以在fstab中直接引用它们,也可以使用readlink -e取消引用以确定相关的块设备。

这是一个真实的例子。在我的机器上,我连接了3个USB硬盘驱动器。它们每个都以唯一的序列号显示在/ dev / disk / by-id中(尽管它们共享一个公共的制造商字符串)。我已经创建了指向这三个唯一条目的符号链接,并且现在可以通过运行readlink -e linkname来快速确定哪个驱动器是哪个驱动器(以及与每个驱动器关联的设备)。例如,在我的机器上运行readlink -e / root / disk2当前显示“ / dev / sde ”,而readlink -e / root / disk3则不产生任何输出。


15
简而言之:for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done
Felipe Alcacibar 2015年

54

所有这些都是不错的建议,但是最快和最不冗长的方法是在终端中键入以下内容:

mount

它将给出所有已安装设备的列表(假设已安装USB驱动器,现代Linux发行版通常是这种情况)。


5
不,它不会神奇地挂载设备。您必须使用指定它mount /dev/id /mount/point,所以它不起作用。
polym 2014年

9
我的回答是针对用户的问题“是否可以通过dmesg或/ proc或其他方式查看哪个设备节点是USB驱动器。”,但无意为在Linux下安装驱动器的实用性提供指导。
AnotherLongUsername 2014年

这个答案为我解决了几乎相同的问题。
马修·布朗又名马特勋爵

1
我认为自动挂载行为很大程度上取决于发行版类型。
jiggunjer '16

1
df我想也是。
阿列克谢

24

尝试使用命令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永久删除。


8
在Debian中,udevinfo已重命名udevadm
史蒂夫·波默罗伊

8
在Ubuntu上,命令似乎是“ udevadm info --query = all -n / dev / sda”
machineghost

我想他们在某个时候将命令重命名了-在我写答案之前(几年前),该命令在我发布的ubuntu系统上
起作用

指挥部仍在ubuntu工作,udevadm info --query=all -n /dev/ttyUSB1
Siddharth

1
udevadm info --query=all -n /dev/ttyUSB在Fedora中也是如此。
slm 2013年

22

查看正在发生什么情况的最简单方法就是键入(当然是root):

blkid -c /dev/null

即使未安装所有块设备,这也可以为您提供完整的概述


并非所有发行版都具有此功能。你在用哪个
新亚历山大(Alexandria)

这在我的Raspbian发行版上没有任何输出。
IgorGanapolsky '16

找不到命令:blkid
IgorGanapolsky

在Ubuntu 14.04 64位上,此命令无输出。
gbmhunter

11

/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和一般硬件的一些常规信息。


2
/ dev / disk / by-id / * usb *非常有用。
罗布

/ dev / disk /按标签ftw。谢谢:)
三联画

10
sudo fdisk -l

然后分析一下结果。


1
fdisk手册页 “如果未提供任何设备,则使用/ proc / partitions(如果存在)中提到的设备。” 运行fdisk可能不是一种选择...基于我所知未安装的Debian系统,我猜测某些GPT系统可能未安装不需要的软件。尽管如此,检查/ proc / partitions应该仍然是一个选项。
TOOGAM 2015年

这是唯一对我有效的选择。很抱歉,如果它对您不起作用!
费利佩2015年

8

采用

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

在默认的udev规则下,这将向您显示大多数USB设备,并向您显示指向系统上其块设备名称的符号链接。

如果那不起作用,请/dev/disk/by-id/直接查看。


6

对于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"

1
+1。简单明了的脚本可以自动完成任务。
leesei 2015年

2

看一看树下的树木/dev/disk。它通过各种方案列出了磁盘及其分区(文件系统)。


2

/ var / log / message(如果dmesg不再包含该信息)。


0

如果拔下USB驱动器并将其重新插入,则应该看到它已从内核(dmesg)初始化。


0

基于来自Stormlash的出色回答,并依赖于udev来填充“ / dev / disk / by-id / usb”设备树,您可以如下定义谓词(Bash):

is_usb_device() {
    local device_path=$1        # such as /dev/sdc
    for devlink in /dev/disk/by-id/usb*; do
        if [ "$(readlink -f "$devlink")" = "$device_path" ]; then
            return 0
        fi
    done
    return 1
}

然后使用它:

if is_usb_device "/dev/sdg"; then
    echo "/dev/sdg is a usb device"
else
    echo "/dev/sdg is not a usb device"
fi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.