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

Old*_*unt 176 linux usb

我想挂载一个 USB 驱动器,其中两个,我需要两个不同的挂载点。不幸的是,Linux 内核进行了名称更改,我无法确定哪个/dev位置是正确的。有没有一种方式来看待通过dmesg/proc或其他地方,以找出哪些设备节点是一个USB驱动器。

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

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

zig*_*don 89

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

  • `dmesg` 效果很好,但我有一个案例,其中 `dmesg` 不显示 `/dev` 节点: `[421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcd` 这是什么意思?如何安装此设备?该设备出现在`lsusb`... (6认同)

Ano*_*ame 59

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

mount
Run Code Online (Sandbox Code Playgroud)

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

  • 我的回答解决了用户的问题“有没有办法通过 dmesg 或 /proc 或其他地方查看哪个设备节点是 USB 驱动器。”,并不打算提供有关在 Linux 下安装驱动器的实用性的指导. (12认同)
  • 不,它不会神奇地安装您的设备。你必须用 `mount /dev/id /mount/point` 来指定它,这样就行不通了。 (6认同)
  • 我认为自动挂载行为很大程度上取决于发行版类型。 (2认同)
  • `df` 也是,我想。 (2认同)

小智 58

只要您正在运行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 不产生任何输出。

  • 简短而简单:`for devlink in /dev/disk/by-id/usb*; 做 readlink -f ${devlink}; 完成` (17认同)

Elt*_*iel 26

试试这个命令udevinfo -q all -n /dev/sda/dev/sda你的磁盘路径在哪里。这为您提供了有关您正在查看的磁盘的大量信息 - 有一个条目告诉您它所连接的总线。

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

更新

udevadm info --query=all -n /dev/sda 
Run Code Online (Sandbox Code Playgroud)

至少从 2010 年 7 月开始,[ 1 ] udevinfo在 Debian(和派生)中被udevadm info替换为一个小的瞬态,符号链接很快被弃用和删除(您仍然可以在旧的未更新的机器中找到它们)。总是从 [ 1 ] 我们可以读到:

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

  • 在 Debian 中,`udevinfo` 被重命名为 `udevadm`。 (8认同)
  • 在 Ubuntu 上,命令似乎是“udevadm info --query=all -n /dev/sda” (8认同)

小智 23

查看正在发生的事情的最简单方法就是输入(当然是以 root 身份):

blkid -c /dev/null
Run Code Online (Sandbox Code Playgroud)

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


Fel*_*ipe 12

sudo fdisk -l
Run Code Online (Sandbox Code Playgroud)

只需分析结果。


Gru*_*bel 11

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

要列出您使用的所有设备:

hal-device
Run Code Online (Sandbox Code Playgroud)

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

hal-get-property --udi $UDI --key block.device
Run Code Online (Sandbox Code Playgroud)

还有:

hal-find-by-capability
hal-find-by-property
Run Code Online (Sandbox Code Playgroud)

如果你想让它变得更复杂,你可以相对容易地自己编写一个基于 HAL 的自动挂载器,如果你想完全自动化,它会非常方便。

为了完整起见,还有:

lsusb -v
lshw
Run Code Online (Sandbox Code Playgroud)

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

  • /dev/disk/by-id/*usb* 非常有用。 (2认同)

DJ *_*lis 9

ls -l /dev/disk/by-id/usb*
Run Code Online (Sandbox Code Playgroud)

在默认的 udev 规则下,它会显示大多数 USB 设备,并且会显示系统上它们的块设备名称的符号链接。

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


小智 7

对于 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"
Run Code Online (Sandbox Code Playgroud)