- USB storage devices (Русский)
- Автоматическое монтирование с помощью udisks
- Монтирование вручную
- Где взять ядро, поддерживающее usb_storage
- Опознавание устройств
- Монтирование USB флэш-памяти
- От имени суперпользователя (root)
- Разрешить запись обычным пользователям
- От имени обычного пользователя посредством fstab
- Инструменты монтирования
- Решение проблем
- Никакие устройства хранения USB не распознаются системой
- Устройство USB определилось, но его не получается примонтировать
- Устройство не выключается после размонтирования всех разделов
- USB устройства
- Поддержка USB устройств
- Модуль поддержки USB устройств в Linux
- Отображение подключенных USB устройств
- Подключение USB устройства на лету
USB storage devices (Русский)
Состояние перевода: На этой странице представлен перевод статьи USB storage devices. Дата последней синхронизации: 10 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
В этом документе описываются способы использования различных USB накопителей в Linux. Это также касается и других устройств, таких как цифровые камеры или телефоны, которые распознаются как обычные USB накопители.
Если у вас свежая система со стандартным ядром Arch и современная среда рабочего стола, USB устройство должно автоматически появляться на рабочем столе при подключении, и лезть в консоль не потребуется.
Автоматическое монтирование с помощью udisks
Это самый простой и самый часто используемый метод. Он используется во многих средах рабочего стола, но может применяться и отдельно.
Подробности и вспомогательные программы описаны в статье udisks (Русский).
Монтирование вручную
Примечание: Перед тем, как обвинить Arch Linux в том, что он не монтирует USB устройства, стоит проверить все доступные порты. Часть разъёмов могут не обслуживаться контроллером (или не подключены к контроллеру вообще, в случае портов на передней панели), и устройства физически не смогут монтироваться. Теоретически контроллер портов может оказаться выключенным; для того, чтобы это проверить, нужно зайти в BIOS и отыскать параметр с названием вроде «Onboard USB Controller» — должен быть «Enabled».
Где взять ядро, поддерживающее usb_storage
Если не используется самодельное (самосборное) ядро, то делать ничего не требуется, все официальные ядра Arch Linux настроены как нужно. В случае самосборного ядра следует убедиться, что при компиляции была включена поддержка SCSI, SCSI-Disk и usb_storage. Если установлена последняя версия udev, то можно просто подключить носитель, и система автоматически подгрузит все необходимые модули ядра.
Опознавание устройств
Самое первое, что нужно знать об устройстве, так это его идентификатор, присвоенный ядром. Смотрите fstab (Русский)#Определение файловой системы для подробностей.
Совет: Чтобы узнать, какое именно устройство является нужным вам USB-устройством, можно сравнить вывод lsblk -f (описанный в статье по ссылке) до и после подключения устройства.
Монтирование USB флэш-памяти
Для этого нужно создать папку, в которую в дальнейшем будет монтироваться флэшка:
От имени суперпользователя (root)
Монтировать устройство рутом при помощи команды (только нужно заменить device_node найденным устройством, как было показано выше):
# mount device_node /mnt/usbstick
# mount -U UUID /mnt/usbstick
Если mount не распознаёт формат устройства (файловой системы), то можно попробовать с ключом -t , а также глянуть в mount(8) для просвещения. Если монтирование не работает и на устройстве нет важных данных, можно попробовать отформатировать его или даже пересоздать таблицу разделов.
Разрешить запись обычным пользователям
Чтобы непривилегированные пользователи могли записывать данные на USB носитель, нужно прописать следующую команду:
# mount -o gid=users,fmask=113,dmask=002 /dev/sda1 /mnt/usbstick
Если это не сработало, убедитесь, что файловая система монтируема и доступна для записи суперпользователю (смотрите предыдущий раздел).
От имени обычного пользователя посредством fstab
Если вы хотите, чтобы обычный пользователь имел право монтировать и размонтировать устройство, смотрите FAT (Русский)#Запись на FAT32 в качестве обычного пользователя.
Инструменты монтирования
Есть множество инструментов, облегчающих монтирование от имени обычного пользователя.
Решение проблем
Никакие устройства хранения USB не распознаются системой
Если вы подключили USB-накопитель к компьютеру, но он не отображается в списке lsblk или dmesg, убедитесь, что в BIOS включена функция XHCI Handoff и EHCI Handoff.
Устройство USB определилось, но его не получается примонтировать
Если вы недавно обновили ядро, модули для USB-накопителя для вашего текущего ядра были удалены и заменены модулями для свежеустановленного ядра. Эти модули не смогут загрузиться, пока вы не перезагрузитесь и не запустите новое ядро или не выполните откат пакета ядра до версии, соответствующей текущей версии ядра.
Устройство не выключается после размонтирования всех разделов
Невыключение питания устройства может привести к тому, что:
- жёсткий диск не припаркует свою головку, издаст слабый царапающий звук при раскручивании и может деградировать [2], или
- твердотельный диск (особенно старый) не сбросит буферы кэша или не обновит таблицы отображения, что может привести к потере данных [3].
После размонтирования разделов устройство всё ещё включено. Чтобы безопасно извлечь его, необходимо сначала попросить систему выключить его: [4]
# echo 1 > /sys/block/имя_диска/device/delete
Если вы используете udisks, можно использовать следующие команды: [5]
$ udisksctl unmount -b /dev/sdXY $ udisksctl power-off -b /dev/sdX
USB устройства
USB — Universal Serial Bus (Универсальная последовательная шина) была разработана консорциумом компаний с целью предоставить единственную, простую шину для подключения периферии.
Поддержка USB устройств
Дизайн USB позволяет устройствам подключаться на лету, используя для подключения стандартные гнезда. USB устройства включают в себя: клавиатуры, мыши, принтеры, сканеры, жесткие диски, флэш-драйвы, камеры, модемы, сетевые адаптеры и колонки, а их список постоянно растёт.
Имеющаяся в Linux поддержка USB устройств достаточно всеобъемлюща, но ряд устройств требуют специальных драйверов, а другие, преимущественно принтеры и сканеры, могут не поддерживаться или поддерживаться лишь частично.
Компьютерные системы могут содержать один или более контроллеров или хабов, предназначенных для подключения USB устройств или другого (внешнего) хаба. Хаб может поддерживать до 7 устройств, которые, в свою очередь, могут иметь дополнительные хабы. Хаб внутри системного блока называется root hub (корневой хаб). Каждая такая звездоподобная топология может поддерживать до 127 хабов или устройств.
Говоря USB порт, мы подразумеваем возможность поддержки USB в компьютере и гнездо для подключения, а не внутренний адрес порта, используемый устройством.
Многослойность USB системы позволяет хосту определить характеристики USB устройства, включая класс, имя производителя, имя устройства, требования к напряжению, скорость, уровень поддержки USB и другие функции.
Модуль поддержки USB устройств в Linux
USB устройства в настоящее время полностью поддерживаются в Linux. Большая часть изменений проявилась в ветке ядра 2.6, хотя определённая поддержка имелась даже в ядрах 2.2. Linux поддерживает как USB 2.0, так и ранние спецификации. Ввиду подключения на лету (горячего подключения), заложенной в самой природе USB, поддержка обычно производится посредством модулей ядра, которые могут загружаться или выгружаться по необходимости.
Команда lspci позволяет отобразить USB устройства:
root@localhost:~:# lspci | grep -i usb 00:03.0 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 0f) 00:03.1 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 0f) 00:03.3 USB Controller: Silicon Integrated Systems [SiS] USB 2.0 Controller
Вывод команды показывает, что в системе имеются 3 USB контроллера.
С помощью команды lsmod можно отобразить загруженные USB модули:
root@localhost:~:# lsmod | egrep 'usb|hci|hid|mouse|Module' Module Size Used by hid_microsoft 3232 0 usbhid 32992 0 hid 39040 2 hid_microsoft,usbhid ohci_hcd 24332 0 psmouse 41644 0 ssb 38464 1 ohci_hcd ehci_hcd 34152 0
Отображение подключенных USB устройств
Сводная информация о подключенных в настоящее время USB устройствах содержится в файле /proc/bus/usb/devices.
Вывести её можно следующей командой:
root@localhost:~:# cat /proc/bus/usb/devices T: Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 3 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0001 Rev= 2.06 S: Manufacturer=Linux 2.6.29.6 ohci_hcd S: Product=OHCI Host Controller S: SerialNumber=0000:00:03.1 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 3 B: Alloc= 28/900 us ( 3%), #Int= 2, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0001 Rev= 2.06 S: Manufacturer=Linux 2.6.29.6 ohci_hcd S: Product=OHCI Host Controller S: SerialNumber=0000:00:03.0 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=045e ProdID=00db Rev= 1.73 S: Manufacturer=Microsoft S: Product=Natural� Ergonomic Keyboard 4000 C:* #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=100mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=10ms T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 6 B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0002 Rev= 2.06 S: Manufacturer=Linux 2.6.29.6 ehci_hcd S: Product=EHCI Host Controller S: SerialNumber=0000:00:03.3 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms
В листинге Spd=480 соответствует шине USB 2.0, а Spd=12 — устройствам USB 1.1. Далее в списке видно, что к системе в настоящее время подключено 1 USB устройство — Microsoft Natural Ergonomic Keyboard 400 (Spd=1.5).
На этой клавиатуре я, естественно, и набираю данный текст.
Иерархию подключения USB устройств позволяет увидеть команда lsusb с опцией -t:
root@localhost:~:# lsusb -t Bus# 3 `-Dev# 1 Vendor 0x1d6b Product 0x0001 Bus# 2 `-Dev# 1 Vendor 0x1d6b Product 0x0001 `-Dev# 2 Vendor 0x045e Product 0x00db Bus# 1 `-Dev# 1 Vendor 0x1d6b Product 0x0002
Вывод информации о конкретном USB устройстве можно получить следующей командой:
root@localhost:~:# lsusb -vd 0x045e:0x00db Bus 002 Device 002: ID 045e:00db Microsoft Corp. Natural Ergonomic Keyboard 4000 V1.0 Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x045e Microsoft Corp. idProduct 0x00db Natural Ergonomic Keyboard 4000 V1.0 bcdDevice 1.73 iManufacturer 1 Microsoft iProduct 2 Natural� Ergonomic Keyboard 4000 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 59 bNumInterfaces 2 bConfigurationValue 1 iConfiguration 0 bmAttributes 0xa0 (Bus Powered) Remote Wakeup MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 1 Boot Interface Subclass bInterfaceProtocol 1 Keyboard iInterface 0 ** UNRECOGNIZED: 09 21 11 01 00 01 22 3c 00 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 No Subclass bInterfaceProtocol 0 None iInterface 0 ** UNRECOGNIZED: 09 21 11 01 00 01 22 56 00 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Device Status: 0x0000 (Bus Powered)
Подключение USB устройства на лету
Новые системы Linux имеют поддержку подключения USB устройств на лету (горячее подключение), что подразумевает подключение устройства к работающей системе, которая должна:
- определить тип USB устройства, найти драйвер и запустить его;
- связать драйвер с устройством;
- уведомить о USB устройстве другие подсистемы.