LINUX.ORG.RU

Монтирование внутреннего каталога на USB-выход

 , , ,


3

5

Друзья, подскажите, можно ли такое ввернуть вообще.

Хочется примонтировать каталог на внутреннем накопителе к USB. Т.е. чтобы подключаешь устройство к другому устройству, а оно прикидывается обычной флешкой.

Целевая платформа Debian/Raspbian и скорее всего малина.


Первый же вопрос, от которого зависит ответ - для какой цели нужно прикидывание именно USB-флэшкой. Так то, сам понимаешь, сетевой каталог решается многими тривиальными способами.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

А не проще таки купить USB флешку? Ты объясни, зачем тебе вообще такой изврат. Тут ЛОР может более умных советов дать, чем тот путь, который ты придумал.

Senjougahara
()
Ответ на: комментарий от I-Love-Microsoft

Нужна как раз именно суперумная флешка, которая может синхронизироваться с сервером по Wi-Fi и отдавать файлики в виде обычной флешки более тупому устройству.

kvv213
() автор топика
Ответ на: комментарий от Senjougahara

Не, обычная флешка есть :) Нужна умная, с синхронизацией.

PS. Посмотрел-посмотрел, в природе существуют Orange Pi Zero с WiFi и одним USB-портом, который может прикидываться в т.ч. и OTG. Т.е. исходя их описания он может делать и то, что не нужно (OTG) и по идее должен делать то, что нужно. PSS. Вопрос с монтированием части устройства как флешки остается открытым.

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

Нужна как раз именно суперумная флешка, которая может синхронизироваться с сервером по Wi-Fi и отдавать файлики в виде обычной флешки более тупому устройству.

У меня для тебя плохие новости, через Mass Storage ты вроде как раздашь только статику, а для раздачи динамики потребуется как минимум MTP, которого, конечно же, твой второй девайс не розумиет.

Если бы все было бы так просто, так бы делали.

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

У меня для тебя плохие новости, через Mass Storage ты вроде как раздашь только статику, а для раздачи динамики потребуется как минимум MTP, которого, конечно же, твой второй девайс не розумиет.

Всмысле статику? Мне и надо Mass Storage, т.е. файлики записанные на внутреннем накопителе (в отдельной папке). Онлайн генерация не треба :)

Пока нашел два варианта: 1. Через GadgetFS. Не видел, чтобы у кого-то что-то получилось. 2. Через некий sunxi_usb_udc с включением OTG режима (там можно, как я понял, включить как раз тот самый mass_storage, serial и ethernet типы подключения).

kvv213
() автор топика
Ответ на: комментарий от t184256

а для раздачи динамики потребуется как минимум MTP, которого, конечно же, твой второй девайс не розумиет

Расберишка кажись чуть лишь не «искаропки» MTP прекрасно кушает и монтирует, либо настроить очень просто. Вот mass storage гиблое дело эмулить, но вот MTP как раз отличная возможность, может даже FUSE реализации есть или что поудобнее

Единственное, не знаю чем «создавать» MTP на стороне мастера, ясно что на клиентской стороне проблем нет, но вот мастер... Ну раз Андрюша умеет, значит и в Linux вероятно есть сервера

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

Расберишка кажись чуть лишь не «искаропки» MTP прекрасно кушает и монтирует, либо настроить очень просто. Вот mass storage гиблое дело эмулить, но вот MTP как раз отличная возможность, может даже FUSE реализации есть или что поудобнее

Мне кажется, что мое устройство, к которому надо все подключить MTP или какой-то аналог тоже кушает. Ибо, если к нему шнурком подрубить телефончик, то он по этому шнурочку начинает что-то качать и проигрывать :)

Для Ubuntu начиная с 16-й версии вроде как есть MTP-сервер портированый с Андроида в поставке. Остальные ходют через https://launchpad.net/mtp

Но, MTP рассматриваю как крайний вариант, хочется именно Mass Storage.

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

Понимаешь, даже если такое и возможно, то это точно будет не «папка».

В случае MTP, как и в случае, например SMB (Samba), сетевой ресурс Windows, обращение идёт по протоколу с некоторым сервером.

А в случае Mass Storage обращение идёт напрямую с физическим устройством, идёт обращение к блокам памяти накопителя.

Так что в случае Mass Storage должен осуществляться доступ не участку памяти, который в этот момент не будет доступен основной системе.

Т.е. получить одновременно доступ к памяти с хост системы и с системы к которому подключено устройство в режиме mass storage не получится.

Ну и это должна быть не «папка», а раздел или файл, который будет предоставляться на полный доступ другой системе как Mass Storage.

И уже на этом физическом накопителе будет создаваться раздел и файловая системе.

Т.е. предоставить часть уже существующей файловой системы («папки») нельзя.

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

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

Анон дело говорит.

Записать файлы на ФС в другом файле и экспортировать его как блочное устройство ты сможешь, но только и того, не «расшарить папку».

Дисковую ФС, позволяющую монтироваться на запись дважды одновременно я не знаю. Один тип из Red Hat HA Team мне говорил, что такая есть, но это изврат в любом случае и вряд ли твой второй девайс в нее может. Ищи нормальное решение.

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Прошу меня скастовать, ежели найдется вариант. Но я почему-то уверен что нет

На Raspberian для Pi Zero (вероятно, что и для Orange оно будет работать) уже есть вариант через dwc2 https://pi.gbaman.info/?p=699

Т.е. воткнул и оно переключилось в slave-режим.

Файловая система при этом, как я понимаю, монтируется в файле. Вот только настораживает предположение, что при подключении Slave режима из самой Raspberry доступа к этому «разделу» не будет. Проверить не могу (не на чем), подтверждений или опровержений найти не могу.

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

Вот только настораживает предположение, что при подключении Slave режима из самой Raspberry доступа к этому «разделу» не будет

Это очевидное ограничение, иначе быть не может. За ссылку спасибо. Одновременно это MTP

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от kvv213

Вот только настораживает предположение, что при подключении Slave режима из самой Raspberry доступа к этому «разделу» не будет.

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

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

Как только ты начнёшь изменять данные одним драйвером файловой системыы другой об изменениях не будет ничего знать.

В особенности, если ты будешь осуществлять одновременную запись из хост системы и в это же время из систему куда подключено устройство, то файловая система с большой долей вероятности просто рухнет. Ну либо в системе куда подключено устройство тебе придётся перемонтировать файловую систему и даже в этом случае тебе никто не гарантирует, что изменения при одновременном подключении (монтировании) файловой системы сделанные в одной системе будут доступны в другой.

Для такого доступа нужны специальные кластерные файловые системы и специальные управляющие надстройки, которые будет обрабатывать доступ от разных клиентов к файловой системе.

Вот поэтому тебе и придётся в случае использования обычной файловой системы отмонтировать файловую систему от систему (ПК) куда подключено устройство и только потом монтировать её в хост системе и вносить изменения, а потом размонтировать и уже только тогда монтировать в системе куда подключено устройство.

И даже, скорее всего, обрывать доступ даже к самому накопителю от ПК, куда подключено устройство.

Вот такие дела, подумай в начале как всё это работает, а потом пиши и пробуй.

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

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

А если на Host системе (туда куда втыкается) будет доступ RO, а на Slave системе (то, что втыкается) будет R/W это поможет как-то в проблеме или нет?

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

Я думаю будет тоже самое, драйвер в режиме чтения не факт что увидит обновление файловой системы без перемонтирования.

Не предусмотрены обычные файловые системы к тому что ты хочешь. А даже если это сработает в какой-то один момент, то не факт, что это будет работать во всех ситуациях.

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

Но уверен на 100% процентов, то как ты хочешь работать не будет. Не предусмотрены файловые системы к такой работе.

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

Если тебе так хочется отслеживать изменения на файловой системе, иметь возможность скопировать данные которые запишет пользовательна неё и куда-то их отправлять, что в целом плохо.

То посмотри в сторону LVM и системы снапшотов в LVM.

Т.е. механика такая, ты создаёшь группу томов LVM, на ней том, каким-то образом подсовываешь этот том как Mass Storage Device. Он монтируется на системе куда подключено устройство, с ним проводятся манипуляции.

Далее, если тебе нужно сделать копию данных, т.е. только прочитать, то ты делаешь LVM снапшот этого LVM тома и вот уже этот снапшот ты можешь монтировать и читать оттуда данные.

Но в любом случае это не одновременное монтирования одной файловой системы.

Для использования LVM и снапшотов в частности должно быть достаточно свободного пространства на группе томов LVM.

Если тебе это интересно, то почитай что этот такое сам.

anonymous
()

Мне тоже надо схожее, но на десктопе. Чтобы

  • скопировал файл в директорию
  • смонтировал директорию, на десктопе недоступна (мне не нужны изменения там в файле в это время, что к нему нет доступа - просто отлично)
  • подключил юсб, определилась как съёмный mass storage
  • когда отмонтирована - снова обычная директория

Послежу за темой, не очень срочно

fehhner ★★★★★
()
Последнее исправление: fehhner (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Появился вариант через ATA https://www.instructables.com/id/NAS-Access-for-Non-Networked-Devices/

Но тоже RO когда смонтировано.... И только можно прикрутить целиковое устройство (хотя в Zero можно воткнуть еще и флешку).

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

В теории, можно при наличии подключения к сети по Wi-Fi отключать режим флешки, включать синхронизатор, потом в обратном порядке. Костыль, конечно...

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

Появился вариант через ATA

Не совсем понимаю. Они сначала пишут:

NAS Access for Non-Networked Devices

Т.е., для несетевых устройств, а потом

Access is only possible on the local LAN not over the internet.

И настраивают всю статью сетевые интерфейсы и подключение через локальную сеть. Мне например вообще неподходит, чтобы устройство в какую-то сетку смотрело. К тому же, жаль что нельзя нормально директорию пробросить и нужно только целыми устройствами.

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

У них типа подключение старого телеке, что может играть с флешки, но нету в котором сети к сетевому NAS.

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

Ааа. А мне вот надо большой объём (>50Гиг за раз в среднем) перекидывать на устройство USB2.0 без сети с ноута, не подключенного к сети. Интерфейс медленный, очень неохота ждать каждый раз, пока скопируется на флешку, а потом с флешки, это куча времени каждый раз впустую.

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

А чё, hdmi какого-нибудь нету? Что за всратые игрища? Просто найди копеечную плату с видеовыходом и всё.

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

Недавно перепаивал мелкую юсб фиговину Digispark, чтобы подключить к компу старый джойстик от денди. Вторую пока юзаю для ввода одного очень длиного пароля (который не страшно записать в реале на листочке), просто вставляешь и появляется клавиатура которая вводит пароль. Погуглю про масс сторейдж для неё, но думаю скорость не осилит.

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

В общем заказал RBPi Zero W. Будем посмотреть.

kvv213
() автор топика
Ответ на: комментарий от fehhner

Ааа. А мне вот надо большой объём (>50Гиг за раз в среднем) перекидывать на устройство USB2.0 без сети с ноута, не подключенного к сети. Интерфейс медленный, очень неохота ждать каждый раз, пока скопируется на флешку, а потом с флешки, это куча времени каждый раз впустую.

Есть флешки с Wi-Fi, например. Работают без инфраструктуры.

kvv213
() автор топика
24 октября 2019 г.

Не нужно «есть с ножа», но если деваться некуда, то примерно так:

  1. обязательно open() с O_DIRECT (ну и с аналогичными флажками в mustdie);
  2. в девайте эмулируйте файл максимального и при чтении выдавайте инфу блоками подходящего фиксированного размера по степени 2 игнорируя старшие разряды смещения.
  3. соответственно приложение должно «просто читать» файл этими блоками последовательно и переходить к началу когда упрется в «конец» псевдо-файла.

Эта схемa будет работать везде.

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

s/файл максимального и при чтении/файл максимального РАЗМЕРА и при чтении/

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.