LINUX.ORG.RU

Удалённый доступ к флешке

 ,


0

1

Добрый!

Понадобилась задача - забирать файлы с флешки, не вынимая её из ЧЯ (чёрного ящика - прибора, который умеет результаты своей работы экспортировать в файл на USB-носитель) Погуглил, нашёл несколько способов - SD-WiFi, USB-Flash-WiFi, Телефон на Андроиде, Infinite USB Memory, разработка своего решения на микроконтроллерах и Raspberry Pi Zero W. У всех есть не решаемые проблемы - то SMB/FTP нет, то сняты с производства, то не «промышленно» и т.д. «На бумаге» подошёл только 1 вариант - Raspberry Pi Zero W и linux usb gadget mass storage. Заказал комплектующие, сделал всё по инструкции (Linux вижу первый раз в жизни, всю жизнь жил с Windows). Суть (насколько я понял) - Linux, создаётся бинарный файл на диске, файл форматируется в FAT32, и этот контейнер эмулируется как USB Flash Disk. Одновременно с этим этот контейнер монтируется в Raspberry Pi. Что получилось - ЧЯ видит флешку и записывает на неё файлы! Что требует проработки - после записи ЧЯ на Raspberry Pi файловая система не обновляется. Попробовал размонтировать и примонтировать файл - обновляется (при этом на ЧЯ это никак не сказывается). Внимание, вопрос, можно ли как-то какой-либо командой обновлять файловую систему для примонтированного файл-контейнера? Ну и второстепенный вопрос - можно ли как-то отслеживать появление новых файлов в файл-контейнере?

Флешки расходники.

Linux, создаётся бинарный файл на диске, файл форматируется в FAT32, и этот контейнер эмулируется как USB Flash Disk

что бы это могло значить

SMB/FTP

стек твоих технологий слишком убог, линукс для такого плохо подходит. Что значит нет, кстати?

anonymous ()
Ответ на: комментарий от Vsevolod-linuxoid

Нет под рукой ссылки на статью, вот на мой взгляд аналогичная: https://raspberrypi.stackexchange.com/questions/63914/unable-to-configure-a-r... Create 400MiB disk image, format as FAT and load g_mass_storage driver: sudo dd if=/dev/zero of=/usb-drive.img bs=1M count=400 sudo mkdosfs -F 32 /usb-drive.img sudo modprobe g_mass_storage file=/usb-drive.img stall=0

AlexSTAL ()

Попробовал размонтировать и примонтировать файл - обновляется (при этом на ЧЯ это никак не сказывается).

Чем плох для тебя этот способ ? Нужно прочитать данные - примонтировал , прочитал , отмонтировал .

an0nym0us ()

0. Очень рекомендую из линукса монтировать образ фальшивой флешки только в режиме для чтения, а то можно тихонечко побить ФС и данные на ней, если мнения драйверов линукса и ЧЯ о содержимом «флешки» (где записано, где пусто, какие длины файлов, сколько записей в каталогах и т.д.) не совпадут.

1. Я не знаю, существует ли в природе специализированный драйвер fat32, который бы понимал, что на носитель под ним пишет что-то ещё. Теоретически это возможно, но нужно такое только производителям говнодефайсов, у которых таких компетенций нет.

2. Исходя из вышеизложенного, я бы порекомендовал через периоды времени T монтировать в линуксе образ флешки, смотреть даты изменения файлов и каталогов и предпринимать действия. В остальное время держать флешку отмонтированной. Желательно как-то детектировать, что ЧЯ закончил обмен по ЮСБ, чтобы не обработать наполовину недописанный файл.

legolegs ★★★★★ ()

Внимание, вопрос, можно ли как-то какой-либо командой обновлять файловую систему для примонтированного файл-контейнера?

Читать FAT можно без монтирования - mtools.

Ну и второстепенный вопрос - можно ли как-то отслеживать появление новых файлов в файл-контейнере?

Можно отследить что файл с ФС изменился - inotify-tools.

arson ★★★★★ ()
Ответ на: комментарий от SHODAN

Не взлетит, ибо ФС не держит себя в кончистентном состоянии, пока не отмонтируется? Или он полагается на монтирование будто бы после попадания питания, и ему это дают сделать без восстановления и прочего?

t184256 ★★★★★ ()

Монтируешь носитель на черном ящике, экспортируешь файловую систему на другие хосты по сети (NFS/SMB/FTP). Для этого на черном ящике должен быть NFS сервер, Samba, или FTP сервер.

Экспортировать флешку на другие хосты как блочное устройство плохая идея. FAT это не кластерная файловая система, монтировать блочное устройство должен только один хост, в данном случае — черный ящик.

iliyap ★★★★★ ()
Ответ на: комментарий от legolegs

Сделал, получилось следующее:

поднял apache2 + php5
написал скрипт, который вызывается через web и делает:
- монтирует образ
- синхронизирует файлы с удалённым FTP (lftp, mirror -R)
- размонтирует образ

профит!
остались детали - часы, безопасность, авто очистка по команде флешки...

AlexSTAL ()
Ответ на: комментарий от AlexSTAL

профит!

Ну а теперь представь, FTP не отвечает, ЧЯ пошел писать на флешку...
FAT не параллельная ФС, и если ты уж на это решился, то делай sync, а потом как можно быстрее копируй (локально), пока ЧЯ опять чего-нибудь не записал.

arson ★★★★★ ()
Последнее исправление: arson (всего исправлений: 1)
Ответ на: комментарий от arson

sync для чего? для файла-контейнера, прикидывающегося флешкой? Не нашёл, как это сделать
устройство автономное, отсутствие FTP не сказывается на логике
ЧЯ всегда пишет в новый файл, ничего из уже существующего он не затрагивает...
в общем я не вижу проблем, кроме как не дописанный до конца файл, но это я то же решу записью маркерного файла

AlexSTAL ()
Ответ на: комментарий от AlexSTAL

кроме как не дописанный до конца файл, но это я то же решу записью маркерного файла

Попробуй, ты получишь последние файлы нулевой длины, включая маркерный. С чего ты решил, что файлы будут записываться последовательно?

sync для чего?

Ну, команда sync она для всего. Как отреагирует gadget-драйвер на это я не знаю, но это легко проверить.

arson ★★★★★ ()
Ответ на: комментарий от arson

Маркерный файл будет писаться Малинкой в отдельный каталог. Он по определению не может быть нулевой длины и т.д. ЧЯ нельзя обучить создавать маркерный файл, да и не зачем Так что не вижу пока глобальных проблем...

AlexSTAL ()