我想安装一个USB驱动器,其中两个,并且我需要两个不同的安装点。不幸的是,Linux内核进行了名称更改,我无法确定哪个/dev位置正确。有没有办法查看dmesg/proc或其他地方,找出哪个设备节点是USB驱动器。

(我正在使用ArchLinux,如果有帮助的话... /dev/sda是第一个难点驱动器,/dev/sr0是DVD驱动器,等等。)

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

评论

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

可能想改一下这个问题-毕竟不是所有USB设备都是磁盘。

df命令显示了它的安装位置

#1 楼

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

评论


dmesg可以很好地工作,但是我遇到了dmesg不显示/ dev节点的情况:[421963.864281] usb 3-6:使用xhci_hcd的新高速USB设备编号32是什么意思?如何安装此设备?设备显示在主机上...

–模数
16-4-25在5:58



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

–模数
16-4-25在6:39



#2 楼

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

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

评论


简短:用于/ dev / disk / by-id / usb *中的devlink;做readlink -f $ {devlink};完成

–Felipe Alcacibar
2015年11月25日14:02



#3 楼

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

mount


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

评论


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

– polym
2014年7月22日14:02

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

–otherLongUsername
2014年7月23日14:43在

这个答案为我解决了几乎相同的问题。

–马修·布朗又名马特勋爵
2014年10月10日上午11:04

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

– Jiggunjer
16年2月2日,下午2:08

我想也是df。

– Alexey
16年5月26日在16:11

#4 楼

尝试使用命令udevinfo -q all -n /dev/sda,其中/dev/sda是磁盘的路径。这为您提供了有关正在查看的磁盘的大量信息-有一个条目可以告诉您有关所连接的总线的信息。

这当然可以使您不必通过dmesg和/或进行grep或日志。

更新

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


从至少2010年7月起[1]在Debian中,udevinfoudevadm info替换(并派生)为udevadm几乎不建议使用并删除一些短暂的瞬态符号链接(您仍然可以在未更新的旧计算机中找到它们)。总是从[1]中可以看到:


在udev 117中,引入了udevinfo,q4312079q和其他程序变成了兼容性符号链接。符号链接在udev 128中已弃用,并在udev 147中已永久删除。


评论


在Debian中,udevinfo被重命名为udevadm。

– Steve Pomeroy
2011年8月23日14:44

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

–machineghost
2011年12月13日下午6:06

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

– Eltariel
2011-12-15在5:08

命令仍在ubuntu,udevadm info中起作用--query = all -n / dev / ttyUSB1

– Siddharth
2013年6月4日8:43



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

–slm
13-10-26在14:50

#5 楼

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

blkid -c /dev/null


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

评论


并非所有发行版都具有此功能。你在用哪个

–新亚历山大
2015年9月19日在17:26

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

– IgorGanapolsky
16年8月8日在6:17

找不到命令:blkid

– IgorGanapolsky
16-09-28在17:13

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

– gbmhunter
17年4月17日在18:15

#6 楼

sudo fdisk -l


只分析结果。

评论


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

– TOOGAM
2015年11月10日7:33

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

–Felipe
2015年11月10日在21:52

#7 楼

在这种情况下,/dev/disk/by-*是最简单的方法,如果出于某种原因想要使生活变得更有趣,则可以使用HAL。

要列出所有使用的设备:

hal-device


要使用特定的属性(在USB存储设备上返回/dev/sd*):

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


还有:

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


如果要使其更加复杂,可以相对容易地编写自己的基于HAL的自动安装程序,如果要完全自动化,则非常方便。 />
为了完整性,还提供:

lsusb -v
lshw


其中提供了一些有关USB和您的硬件的一般信息。

评论


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

–Rob
2011-12-12 18:56

/ dev / disk /按标签ftw。谢谢 :)

–三联画
2013年6月17日13:25

#8 楼

在默认的udev规则下使用

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


,它将向您显示大多数USB设备,并向您显示指向系统上其块设备名称的符号链接。 />
如果不起作用,请直接查看/dev/disk/by-id/

#9 楼

对于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。简单明了的脚本可以自动完成任务。

– leesei
15年11月18日在14:28

#10 楼

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

#11 楼

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

#12 楼

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

#13 楼

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

 is_usb_device() {
    local device_path=        # 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