156

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

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

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

13 ответов13

80

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

53

Пока вы используете 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 ничего не выводит.

52

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

mount

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

24

Попробуйте выполнить команду 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

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

blkid -c /dev/null

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

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 и вашем оборудовании в целом.

9
sudo fdisk -l

И просто проанализируй результат.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .