Як визначити, який / 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.