Сегодняшняя статья будет посвящена тому, как работать с подключенными к микрокомпьютеру Omega2 USB-флешками.
Как вы уже знаете, в линуксе (и соответственно, в OpenWRT, который собран на базе linux) работа с устройствами происходит через специальные файлы устройств. Работа с флешками не является исключением и при наличии нужных драйверов, в момент физического подключения флешки к USB-порту компьютера (в нашем случае микрокомпьютера) для неё в каталоге /dev тоже создаётся соответствующий файл.
Но что делать дальше? Как с ней работать? Вот с этим мы сейчас и разберёмся.
Ручное монтирование USB flash-накопителя
Первое что нужно сделать — это примонтировать флешку. Что это значит? Это значит, что операционной системе нужно сообщить о типе файловой системы подключенного диска и назначить точку, через которую мы будем попадать из корневой файловой системы в файловую систему диска.
Если наша сборка OpenWRT умеет работать с такой файловой системой, как на подключенном диске (а она умеет работать с очень многими), то она будет обеспечивать нам прозрачную работу с этим диском через указанную точку монтирования. То есть мы сможем работать с ним так, как будто он является частью корневой файловой системы. Точка монтирования — это просто папка, через которую мы получаем доступ к содержимому подключенного диска. Учтите, что одна физическая флешка может содержать несколько логических разделов (с разными файловыми системами), каждый из которых нужно монтировать отдельно.
Теперь подробно и с примерами. Итак, сначала создаём в папке /mnt новый каталог, который будет нашей точкой монтирования. Для большей информативности его можно назвать, например, usb или flash (я буду использовать папку usb):
mkdir <i>/mnt/usb</i> |
Следующее, что нам нужно — это определить файл устройства, соответствующий подключенной флешке. Здесь есть несколько вариантов.
Первый способ — посмотреть лог подключения (он автоматически высыпется в консоль после подключения накопителя). Вот, например, лог подключения моей флешки:
[ 742.826914] usb 1-1: new high-speed USB device number 2 using ehci-platform [ 2450.196504] usb-storage 1-1:1.0: USB Mass Storage device detected [ 2450.213402] scsi host0: usb-storage 1-1:1.0 [ 2451.214131] scsi 0:0:0:0: Direct-Access SanDisk Cruzer Fit 1.00 PQ: 0 ANSI: 6 [ 2451.226314] sd 0:0:0:0:0: [sda] 30595072 512-byte logical blocks: (15.7 Gb/14.6 GiB) [ 2451.236044] sd 0:0:0:0:0: [sda] Write Protect is off [ 2451.242206] sd 0:0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 2451.262885] sda: sda1 [ 2451.270536] sd 0:0:0:0:0: [sda] Attached SCSI removable disk |
Из лога следует, что моя флешка подключилась как устройство sda и на ней есть один раздел, который определился как sda1. Этот раздел (sda1) нам и нужно будет примонтировать (в случае, если бы флешка была неотформатирована — определилось бы только само устройство sda и монтировать нужно было бы именно его).
Описанный способ, однако, подходит только в том случае, если вы подключены через порт Serial0, при подключении по SSH вы просто не увидите лог.
Второй способ, — можно просто посмотреть, какие новые файлы появились в папке /dev после подключения флешки. Узнать это можно, например, выполнив команду
ls /dev
до и после подключения. Учитывая что обычно диски подключаются как устройства sd[a..z], можно дополнительно использовать фильтр, тогда команда будет выглядеть так:
ls /dev | grep sd
Учитывая, что разъём USB у нас на омеге всего один, — последний вариант (с фильтром) позволит определить подключенный диск безошибочно. Вот, например, как это выглядит у меня:
root@Omega-XXXX:/# ls /dev | grep sd sda sda1 |
Всё, теперь, создав точку монтирования и зная файл устройства, мы готовы к этому самому монтированию приступить.
Монтирование выполняется специальной командой — mount. В общем виде её синтаксис выглядит вот так:
mount [опции] [-o опции_монтирования] файл_устройства точка_монтирования |
Опций достаточно много, они позволяют, например, явно задать тип файловой системы монтируемой флешки (опция -t), задать режим «только для чтения» (опция -r) и так далее. Нам в простейшем случае вообще никакие опции не нужны, поэтому просто выполняем:
mount /dev/sda1 /mnt/usb |
Если вы подключены через последовательный порт, то сообщение об успешном подключении высыпется прямо к вам в консоль:
root@Omega-XXXX:/# [ 3848.540407] [EXFAT] trying to mount... [ 3848.545148] [EXFAT] mounted successfully |
Если вы подключены по SSH, то убедиться в успешности операции можно простым просмотром содержимого каталога /mnt/usb:
ls /mnt/usb |
Если в результате выполнения этой команды вы увидите список каталогов и файлов подключенной флешки — значит всё нормально, флешка успешно подмонтирована. Соответственно, в файловом менеджере содержимое флешки также будет доступно.
Кроме того, посмотреть список всех примонтированных дисков с выводом подробной информации об их размере, наличии свободного места и точке монтирования (ну мало ли, вдруг вы забыли куда флешку примонтировали) можно при помощи команды df:
df -h |
Если вы закончили работу с флешкой и хотите её отсоединить, то перед этим необходимо отмонтировать файловую систему флешки от корневой файловой системы (при этом завершаются все операции доступа к диску, скидываются кэши и так далее). Для размонтирования также есть специальная команда — umount. Всё, что нужно сделать — это указать утилите umount раздел, который мы хотим отмонтировать, или точку монтирования, в которую этот раздел подмонтирован.
Для рассмотренных нами выше примеров, команда отмонтирования могла бы выглядеть так:
umount /dev/sda1 |
Или так:
umount /mnt/usb |
Автоматическое монтирование USB flash-накопителя
Теперь, когда мы научились монтировать диски вручную, открою вам небольшую тайну, — с микрокомпьтерами Omega2 вручную ничего делать не нужно, всё происходит автоматически. Для этого в прошивку предустановлен специальный пакет — mountd.
По умолчанию утилита mountd автоматически создаёт точку монтирования в папке /tmp/mounts/ и монтирует туда найденные на флешке разделы (как правило точка монтирования называется USB-A1).
При желании можно изменить папку в которой автоматически создаётся точка монтирования. Для этого нужно изменить конфигурацию утилиты mountd, которая хранится в файле /etc/config/mountd. Открываем его в редакторе и меняем путь /tmp/mounts/ на желаемый.
Вот и всё на сегодня. Напоследок хотелось бы заметить, что USB-накопитель можно также использовать для переустановки прошивки, если вы сильно накосячили и переустановить прошивку напрямую из интернета не представляется возможным. Однако, подробнее об этом мы поговорим в другой раз (про разные способы восстановления будет отдельная статья).
Кстати, в нашем магазине можно купить микрокомпьютер Omega2 по очень привлекательной цене.
- Часть 1. Первое знакомство
- Часть 2. Использование GPIO
- Часть 3. Док-плата
- Часть 4. Работа с файлами
- Часть 5. Работа с USB flash-дисками
- Часть 6. Установка, настройка и использование php для интерактивного взаимодействия
- Часть 7. Выполнение задач по расписанию с помощью планировщика Cron
- Часть 8. Подключаем проводной Ethernet.
- Часть 9. Сборка альтернативной прошивки на базе OpenWRT.