2008-09-16 03:51:40 +0000 2008-09-16 03:51:40 +0000
161
161

如何弄清楚哪个/dev是U盘?

我想挂载一个U盘,有两个,需要两个不同的挂载点。不幸的是,Linux内核进行了更名,我不知道哪个/dev是正确的位置。有没有什么方法可以通过dmesg或者/proc或者其他地方查找出哪个设备节点是U盘(我用的是ArchLinux,如果有帮助的话………../dev/sda是第一个硬盘,/dev/sr0是dvd盘等)

_edit:U盘连接到USB集线器上。我看了一下dmesg,说是连接了集线器,扫描了一下连接的3个设备。但还是看不到我的U盘在哪里。

答案 (11)

83
83
83
2008-09-16 03:53:52 +0000

最简单的方法。连接USB设备后,看一下dmesg的输出。它应该会告诉你/dev节点被分配给了什么。

54
54
54
2012-09-04 18:51:43 +0000

所有这些都是很好的建议,但最快速、最简单的方法是在终端中输入以下内容:

mount

&001

,这将给出所有挂载设备的列表(这假设U盘已经挂载了,通常在现代Linux发行版中是这样的)。

25
25
25
2008-09-16 03:59:28 +0000

试试udevinfo -q all -n /dev/sda命令,其中/dev/sda是你的磁盘路径。这可以给你提供大量的磁盘信息–有一个条目告诉你它所连接的总线。

更新*

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

至少从 2010 年 7 月起 [[1 ] udevinfo 在 Debian 中被 udevadm info 取代 (并衍生出),并有一个小的瞬时链接,很快就被淘汰和删除了 (你仍然可以在未更新的旧机器中找到它们)。总是从 [1 ] 我们可以读到:

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

23
23
23
2013-01-02 08:37:01 +0000

最简单的方法就是键入(当然是根目录):

blkid -c /dev/null

&001

,这样你就可以看到所有的区块设备的完整概况,即使没有挂载

11
11
11
2009-09-24 22:36:40 +0000

在这种情况下,/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的自动加载器,如果你想完全自动地完成事情,它可以很方便。

10
10
10
2015-11-10 02:47:28 +0000
sudo fdisk -l

再来分析一下结果。

8
8
8
2008-09-16 04:18:39 +0000

使用

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

在默认的udev规则下,会显示出大部分的usb设备,并且会显示出系统上的block-device名称的symlink。

7
7
7
2012-08-24 17:37:56 +0000

对于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"
```即可。
2
2
2
2008-09-16 03:55:24 +0000

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

0
0
0
2008-09-16 03:53:27 +0000

如果你拔掉U盘,再插回去,你应该会看到它在内核中初始化(dmesg)

0
0
0
2018-11-29 19:02:45 +0000

基于 stormlash 提供的优秀答案,并依赖udev来填充"/dev/disk/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