Автоматизировать различные файловые системы USB-флешки на Jessie Lite

18

Я хочу, чтобы можно было автоматически подключать USB-накопители fat32 и ntfs, отформатированные на лету, как горячее подключение без перезагрузки моего Raspberry Pi 2. У меня на jessie-lite установлен ntfs-3g .

Вставка UUID в fstabэто не вариант, потому что я должен был бы найти UUID каждого устройства. Я хочу иметь возможность подключать различные USB-устройства с разными форматами файлов и автоматически монтировать их. Это возможно?

Кроме того, однажды я чуть было не начал работать с usbmountпрограммой. Я мог получить доступ к своему диску на секунду, прежде чем получить ошибку transport endpoint is not connected. Я переустановил программу, но потом я даже не дошел до этой точки снова, даже с ошибкой.

Ф. Унтермозер
источник

Ответы:

15

После многих исследований я смог решить мою проблему с помощью usbmount:

Добавление NTFS в usbmount

  1. Установите usbmount с sudo apt-get install usbmount.
  2. Установите пакет драйверов NTFS ntfs-3g с помощью sudo apt-get install ntfs-3g.

  3. Настройте usbmount для монтирования указанных файловых систем, открыв файл usbmount с помощью sudo nano /etc/usbmount/usbmount.conf.

Здесь есть строка под названием FILESYSTEMS="". Только файловые системы, указанные в этой строке, монтируются через usbmount, поэтому мы изменим его на:FILESYSTEMS="vfat ntfs fuseblk ext2 ext3 ext4 hfsplus"

Если вы хотите, чтобы usbmount смонтировал файловые системы NTFS, обязательно добавьте в строку ntfs и fuseblk . Устройства NTFS иногда указываются как fusblk в пакете ntfs-3g, поэтому эти два одинаковы. Хотя я не знаю почему.

Кроме того, если вы не добавите fuseblk в конфигурацию, отключенные устройства NTFS не будут автоматически размонтированы. Они будут оставаться подключенными и будут сохранять папку, к которой они подключены, пока устройство не будет отключено вручную unmount /dev/sda1 -> где sda1 может быть другой переменной .

Следующим важным направлением является FS_MOUNTOPTIONS="". Здесь вы указываете, какие файловые системы должны быть смонтированы и как они должны быть смонтированы.

Мы изменим это на: FS_MOUNTOPTIONS="-fstype=ntfs-3g,nls=utf8,umask=007,gid=46 -fstype=fuseblk,nls=utf8,umask=007,gid=46 -fstype=vfat,gid=1000,uid=1000,umask=007"

При этом монтируются файловые системы vfat (fat32) ntfs-3g (NTFS) и fuseblk (снова NTFS). Я думаю, что большинство параметров могут оставаться неизменными. Опять же, здесь просто добавьте ntfs-3g ( добавьте ntfs-3g, а не ntfs ) и fuseblk, чтобы иметь возможность монтировать все файлы NTFS. Для большего количества файловых систем добавьте больше строк, начинающихся с -fstype=.

Не отключайте NTFS, пока устройство не будет отключено

Вот решение проблемы, когда подключенный диск NTFS доступен только в течение нескольких секунд. Это исправление исходит от Кристиана Вайнбергера .

  1. Создайте файл usbmount.rules в /etc/udev/rules.d/ с помощью sudo nano /etc/udev/rules.d/usbmount.rules.

Это содержание:

KERNEL=="sd*", DRIVERS=="sbp2",         ACTION=="add",  PROGRAM="/bin/systemd-escape -p --template=usbmount@.service $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="sd*", SUBSYSTEMS=="usb",       ACTION=="add",  PROGRAM="/bin/systemd-escape -p --template=usbmount@.service $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="ub*", SUBSYSTEMS=="usb",       ACTION=="add",  PROGRAM="/bin/systemd-escape -p --template=usbmount@.service $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="sd*",                          ACTION=="remove",       RUN+="/usr/share/usbmount/usbmount remove"
KERNEL=="ub*",                          ACTION=="remove",       RUN+="/usr/share/usbmount/usbmount remove"
  1. Создайте файл usbmount @ .service в / etc / systemd / system / with sudo nano /etc/systemd/system/usbmount@.service.

Это содержание:

[Unit]
BindTo=%i.device
After=%i.device

[Service]
Type=oneshot
TimeoutStartSec=0
Environment=DEVNAME=%I
ExecStart=/usr/share/usbmount/usbmount add
RemainAfterExit=yes

Теперь перезагрузите компьютер и проверьте, cat /etc/mtabк какой папке подключены USB-устройства. По умолчанию они монтируются в / media / usbstick0 .

Источник:

Исправление христиан

Почему фусблк?

Ф. Унтермозер
источник
Это решение требует еще пару шагов, смотрите мой ответ.
AbiusX
2

Untermoser ответ правильный, но он нарушит некоторые функции usbmount.

Поскольку он использует модули Systemd для порождения процессов для монтирования (для включения NTFS), переменная среды $DEVPATHбольше не отправляется usbmount addкоманде, что приводит к ошибке создания символической ссылки.

Чтобы это исправить, запустите следующее:

sed -i '/# Determine vendor/,/if/ s/\(.*vendor=\)/if [ -z "$DEVPATH" ]; then DEVPATH="$(udevadm info --query=path --name=\/$DEVNAME)"; fi\n\1/g' /usr/share/usbmount/usbmount

Команда выше воссоздает, $DEVPATHесли это не доступно.

В usbmount есть еще одна ошибка, связанная с usbmount remove. Он зацикливается на точках монтирования, а тот, который определен в конфигурации usmount, не монтируется. Однако, если совпадение найдено, но его нет в этом списке, удалить разрывы и ничего не делать. Это особенно важно, если вы создаете несколько точек монтирования для одного USB, потому что usbmount видит первое и ничего не делает.

Для исправления необходимо следующее изменение:

sed -i '/umount.d ||/,/break/ s/break.*//; /umount.d ||/,/done/ s/:/:\n\t\tbreak 2/' /usr/share/usbmount/usbmount

Это переместит разрыв во внутреннем цикле (где успех гарантирован, и сломает 2 шага).

AbiusX
источник
1

Для тех, кто пытается заставить то же самое работать на более новом Stretch (Lite) и обнаруживает, что ответы Untermoser и AlbiusX не отключают диски vfat, вам нужно будет выполнить эти дополнительные шаги в дополнение к предоставленным ответам :

Выполните следующую команду в терминале:

sudo mkdir -p /etc/systemd/system/systemd-udevd.service.d/

Это создаст необходимые папки, необходимые. Затем создайте файл conf здесь, например:

sudo nano /etc/systemd/system/systemd-udevd.service.d/shared-mount-ns.conf

Внутри этого файла добавьте следующие строки:

[Service] MountFlags=shared

Это изменит поведение по умолчанию systemd-udevd для частных пространств имен файловой системы на использование общих, что эквивалентно поведению udev в jessie.

(Источник: /unix/330094/udev-rule-to-mount-disk-does-not-work/330156#330156 )

Nacsiar
источник
Так что это была проблема все время - я смотрел на устаревшие документы. Я бегу Linux raspberrypi 4.14.79-v7+на Пи, для справки
ctietze