Raspberry Pi 3 (Raspbian) программный доступ к USB-накопителю: лучший способ сделать это?

#raspbian #raspberry-pi3 #usb-drive

#raspbian #raspberry-pi3 #usb-накопитель

Вопрос:

Я использую Raspbian 1.0, v9 / 15 на RP3. Я работаю над приложением, которое будет получать доступ к выделенному USB-накопителю для хранения собранных данных. Статический путь для записи данных — «/media / user / kingston». Это отлично работает, если только у меня не произойдет сбой системы, после чего владелец и группа для «/ media / user / kingston» будут изменены на root, а точка монтирования для флэш-накопителя теперь будет изменена на «/ media / user / kingston1», что (очевидно) не работает сстатический путь, определенный в моем приложении. Существует ли стандартная опция динамического пути, доступная для этого устройства и ОС? Заранее спасибо…

Обновление: основываясь на совете Би Джея Блэка, это то, что я добавил в fstab после создания каталога с именем / usb в корне файловой системы,

 /dev/sda1  /usb  vfat noatime,nofail,user,rw,exec,umask=000   0  3
  

Преимущества,
1) позволяет загрузиться, даже если USB-накопитель не вставлен,
2) позволяет использовать здесь любое USB-запоминающее устройство.

Недостатком является то, что система должна быть выключена (или диск отключен) перед удалением флэш-накопителя, в противном случае происходят плохие вещи (я пробовал это).). Вопрос: Могу ли я что-нибудь сделать, чтобы уменьшить «плохие вещи» в случае, если кто-то вытащит usb, пока он еще смонтирован? Заранее спасибо.

Комментарии:

1. Надеюсь, никто не скажет вам смонтировать диск с опцией синхронизации; это приведет к серьезной записи на флэш-память и быстрому ее износу (хотя это уменьшит вероятность повреждения файловой системы при отключении питания или аналогичном). Если у вас есть немного оперативной памяти и вы можете столкнуться с некоторой потерей данных при отключении, я бы на самом деле вошел в RAM-диск и использовал rsync или logrotate, чтобы периодически выводить его на flash. Или вы можете использовать низкопрофильный USB-накопитель (например, p3e9.qr.ai ) чтобы было труднее удалить и уменьшить вероятность того, что ваши пользователи будут тупыми 🙂

2. Это будет в удаленном месте, Raspberry Pi подключен к плате камеры, панели солнечных батарей и аккумуляторной батарее. Нет клавиатуры или монитора. Специалисты будут посещать сайт каждые несколько недель, отключать питание, извлекать USB, вставлять новый USB, повторно подключать питание.

3. Хм. Стоит ли включать индикатор состояния или два, чтобы убедиться, что устройство в хорошем состоянии? В противном случае я бы посоветовал использовать файловую систему с лог-структурой, такую как f2fs, в качестве счастливой среды. См en.m.wikipedia.org/wiki/F2FS

Ответ №1:

В общем, я предпочитаю использовать жесткую точку монтирования для такого рода вещей. Возможно, есть несколько хитрых приемов в /sys (или с помощью grep для вывода mount(1) или /proc/mounts ), но они не сработают, как только вы замените свой накопитель Kingston на другого поставщика (гадость).

Взгляните на эту ссылку, чтобы лучше понять, что такое автоматическое подключение вашего USB-накопителя и как отключить этот механизм.

Что касается установки на постоянное место, я бы попробовал либо:

  1. Создайте точку монтирования (скажем, /data ) и поместите запись в fstab(5), чтобы она автоматически монтировалась при загрузке.
  2. То же, что и 1, но используйте noauto и user и выполните явный вызов mount(1) из вашего приложения или…
  3. Установите autoffs и введите запись в auto.misc для автоматического подключения устройства (возможно, /dev/sda1) при использовании. Затем символическая ссылка /data -> /misc/data .

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

Также будьте очень осторожны при записи, так как дешевые USB-накопители, как правило, стираются большими блоками, а их выравнивание износа в лучшем случае слабое (поэтому как небольшие случайные записи, так и большие записи, как правило, быстро изнашивают флэш-память). Помогает использование f2fs или тщательная буферизация записи (и опция noatime при монтировании помогает). И не вызывайте fsync () все время в своем приложении!