Як визначити, який / dev - це флешка?


160

Я хочу встановити USB-накопичувач, два з них, і мені потрібні дві різні точки кріплення. На жаль, ядро ​​Linux зазнало зміни імені, і я не можу зрозуміти, яке саме /devмісце є правильним. Чи існує спосіб дивитися через dmesgабо /procабо де - небудь ще , щоб з'ясувати , який пристрій вузла приводу USB.

(Я використовую ArchLinux, якщо це допомагає будь-якому ... /dev/sdaце перший жорсткий диск, /dev/sr0це DVD-диск тощо)

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


1
Ви не бачите цього? Можливо, трохи почекайте. Або спробуйте інший порт USB. Подивіться, які відмінності існують у "lsusb"
— Нік Деверо

Можливо, хочете дещо перефразувати питання - адже не всі USB-пристрої - це диски.
— Арафангіон

3
dfКоманда показує, де вона була встановлена
— Вілл Шеппард

Відповіді:


83

Найпростіший спосіб: подивіться вихід dmesgпісля підключення USB-пристрою. Він повинен показати вам, який /devвузол був призначений йому.


2
dmesgпрацює чудово, але у мене є випадок, коли вузол dmesgне показує /dev: [421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcdЩо це означає? Як я можу встановити цей пристрій? Пристрій з’являється на lsusb…
— modulitos

1
Насправді я це зрозумів. З моєї останньої перезавантаження відбулося оновлення ядра, що спричинило цю проблему. Після перезавантаження мій usb монтується просто чудово. Сподіваємось, це комусь допомагає!
— modulitos

54

Поки ви працюєте Udev , ви можете легко зробити це з допомогою посилання / DEV / диск / по-ід / USB- ManufacturerName _ SerialNumber . Вони з'являються у вигляді символьних посилань, на які можна або безпосередньо посилатись у межах вашого fstab, або на які можна перенаправити, використовуючи readlink -e для визначення асоційованого блокового пристрою.

Ось справжній приклад світу. На моїй машині підключено 3 жорстких диска USB. Вони відображаються в / dev / disk / by-id з унікальними серійними номерами (хоча вони мають загальну лінію виробника). Я створив символічні посилання на кожну з цих трьох унікальних записів, і тепер можна швидко визначити, який саме диск (і який пристрій пов’язано з кожним накопичувачем), запустивши ім'я посилання readlink -e . Наприклад, запущене readlink -e / root / disk2 на моїй машині в даний час відображає " / dev / sde ", тоді як readlink -e / root / disk3 не дає жодного виходу.


15
Коротко і просто:for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done
— Феліпе Алькасібар

54

Все це є гарними пропозиціями, але найшвидший і найменш багатослівний метод - це просто набрати наступне в терміналі:

mount

що дасть перелік усіх змонтованих пристроїв (це передбачає, що USB-накопичувач встановлений, як правило, це стосується сучасних дистрибутивів Linux).


5
Ні, він не магічно монтує ваш пристрій. Ви повинні вказати це mount /dev/id /mount/point, щоб це не спрацювало.
— полим

9
Моя відповідь стосується запитання користувача "Чи є спосіб переглянути dmesg або / proc або десь ще, щоб дізнатися, який вузол пристрою є USB-накопичувачем.", І не призначений для надання рекомендацій щодо практичності монтажу накопичувача під Linux .
— AnotherLongUsername

Ця відповідь вирішила для мене майже однакове запитання.
— Меттью Браун ака лорд Метт

1
Я думаю, що поведінка автоматично залежить від типу дистрибутива.
— jiggunjer

1
dfЯ теж гадаю.
— Олексій

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а інші програми перетворилися на символіку сумісності. Символьні посилання були застаріли в удеві 128 та були видалені назавжди в udev 147 .


8
У Debian udevinfoперейменований udevadm.
— Стів Померой

8
У Ubuntu команда, здається, є "udevadm info --query = all -n / dev / sda"
— machineghost

Я вважаю, що вони перейменували команду в якийсь момент - коли я написав відповідь (століття тому) команда працювала над системою ubuntu, з якої я її опублікував;)
— Eltariel

Команда працює досі в ubuntu,udevadm info --query=all -n /dev/ttyUSB1
— Siddharth

1
udevadm info --query=all -n /dev/ttyUSBу Fedora теж.
— slm

22

найпростіший метод побачити, що відбувається - це просто набрати (як корінь звичайно):

blkid -c /dev/null

це дає повний огляд усіх блокових пристроїв, навіть якщо вони не встановлені


Не всі дистрибутивні мають це. Яким ти користувався?
— Нова Олександрія

Це не дає нічого на мій дистрибутив Raspbian.
— ІгорГанапольський

Команда не знайдена: blkid
— ІгорГанапольський

Немає виводу з цієї команди на 64-розрядному Ubuntu 14.04.
— gbmhunter

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


2
/ dev / disk / by-id / * usb * дуже допомагає.
— Роб

/ dev / disk / by-label ftw. Дякую :)
— Триптих

10
sudo fdisk -l

І просто проаналізуйте результат.


1
Сторінка fdisk "Якщо не вказано жодних пристроїв, використовуються ті, що згадуються в / proc / розділах (якщо такі є)." Запуск fdisk може не бути варіантом ... На основі однієї системи Debian, на яку я знаю, її не встановлено, я гадаю, що деякі системи GPT можуть не встановити зайве програмне забезпечення. Однак перевірка / proc / розділів повинна бути опцією.
— TOOGAM

Це був єдиний варіант, який добре працював для мене. Мені шкода, якщо це не спрацювало для тебе!
— Феліпе

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"

1
+1. Простий і стислий сценарій, щоб виконати завдання автоматично.
— leesei

2

Погляньте на дерево під /dev/disk. У ньому перераховані диски та їх розділи (файлові системи) за різними схемами.


2

/ var / log / message, якщо dmesg більше не має інформації.


0

Якщо ви відключите USB-накопичувач і підключіть його назад, вам слід побачити його ініціалізацію з ядра (dmesg)


0

Виходячи з чудової відповіді штормового удару та залежно від 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.