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

Как выяснить, какой /dev является USB флэш-накопитель?

Я хочу подключить USB-накопитель, два из них, и мне нужно две разные точки крепления. К сожалению, ядро Linux претерпело изменение имени и я не могу выяснить, какая из точек /dev является правильной. Есть ли способ просмотреть dmesg или /proc или где-то еще, чтобы узнать, какой узел устройства является USB диском.

(Я использую ArchLinux, если это поможет…/dev/sda - первый жесткий диск, /dev/sr0 - dvd диск и т.д.)

_edit: USB диск подключен к USB хабу. Я просмотрел dmesg и там написано, что хаб подключен, и он просканировал 3 подключенных к нему устройства. Однако до сих пор не могу увидеть, где находится мой USB-накопитель.

Ответы (11)

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

Самый простой способ: Посмотрите на выход dmesg после подключения USB-устройства. Он должен показать, какой узел /dev был назначен ему.

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

Все это хорошие предложения, но самый быстрый и наименее подробный метод - просто набрать в терминале:

mount

, что даст список всех смонтированных устройств (предполагается, что монтируется USB-накопитель, что обычно бывает в случае с современными дистрибутивами Linux).

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

Попробуйте команду udevinfo -q all -n /dev/sda, где /dev/sda - путь к вашему диску. Это дает вам информацию о диске, на который вы смотрите - есть запись, которая говорит вам о шине, к которой он подключен.

Это, конечно же, избавляет вас от необходимости смазывать диск через dmesg и/или журналы.

Обновление

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

По крайней мере, с июля 2010 года [ [1 ] udevinfo была заменена в Debian (и получена) на udevadm info с небольшим переходным периодом, с которым вскоре были удалены и испорчены сим-ссылки (вы всё ещё можете найти их на старой не обновлённой машине). Всегда из [ 1 ] можно прочитать:

В udev 117, udevadm была введена и udevinfo и другие программы превратились в симлинки совместимости. Симлинки были устарели в udev 128 и удалены навсегда в udev 147.

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

самый простой способ увидеть, что происходит, это просто набрать (в качестве корня, конечно):

blkid -c /dev/null

это дает вам полный обзор всех блочных устройств, даже если они не смонтированы

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

/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-based auto mounter , что может быть довольно удобно, если вы хотите полностью автоматизировать вещи.

И просто для полноты есть также:

lsusb -v
lshw

Который предоставляет некоторую общую информацию о USB и вашем оборудовании в целом.

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-устройств, и он покажет вам сим-ссылку на их блок-устройства имя в системе.

Если это не работает, посмотрите на /dev/disk/by-id/ напрямую.

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

Если вы отсоедините USB-накопитель и подключите его обратно, вы должны увидеть, как он инициализируется из ядра (dmesg)

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

Основываясь на отличном ответе от 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

Похожие вопросы

6
10
5
37
9