Предложения, необходимые для udev, udisks, autofs, настройки уведомлений для полного решения по автонастройке в Linux

9

Продолжаем на Automounting подключенных устройств в Linux , что оставило вещи немного базовыми. Работая с Gentoo, я автоматически подключаю на своем ноутбуке комбинацию локальных и сетевых устройств с помощью autofs-5.0.4-r5. Одно только выполнение autofs дает мне несколько проблем:

  • Мне нужно заранее задавать имена для точек монтирования для каждого устройства, но иногда после перезагрузки устройство чтения карт MMC меняет положение с помощью загрузочной флешки USB.
  • Мне бы хотелось, чтобы появлялись автоматические точки монтирования на основе LABEL, одни только AFAIK этого делать не могут

На это, безусловно, способны udev и udisks. Но:

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

Фактическое монтирование файловой системы должно происходить только при первом доступе к точке монтирования, точно так же, как работает ghosting autofs. Это должно снизить риск загрязнения файловых систем из-за случайного отключения устройств, обеспечивая при этом большую доступность.

Кроме того, я всегда мог знать, что происходит в моем DE.

  • Существует ли приложение в системном трее, способное указывать состояние всех автомонтирований, т.е. зеленый = ничего не смонтирован, красный = что-то смонтирован?
  • Существует ли не зависящий от распространения способ предоставления уведомлений о операции монтирования файловой системы (например), например, с помощью notify-send? Что касается Gentoo-специфичного, это работает и для меня. Сценарии udev не помогают с NFS и CIFS, верно?

Эта комбинация должна быть окончательной настройкой автомонтирования, или я что-то упустил?

lkraav
источник
Я был с Gnome в течение последних нескольких лет, так что кататься самостоятельно уже не так актуально.
украина

Ответы:

4

Это все возможно с udev. Посмотрите на UAM , который , кажется, решить большинство проблем , о которых вы упомянули, но на самом деле это крепление автоматически. Если хотите, вы можете воспользоваться великолепными возможностями, которые он предоставляет, но изменить его, чтобы носитель не монтировался автоматически. Вы также можете связаться с автором и предложить свой неавтоматический подход к установке в качестве новой функции. А пока коротко рассмотрим его возможности:

  • Он работает поверх него udev, делая его независимым от DE и основанным на событиях. (Также предлагается обходной путь для оптических носителей, который может не быть обнаружен udev.)
  • Позволяет вам определить, MOUNTPOINT_TEMPLATESчто может решить проблему именования, о которой вы упоминали, несколькими пользовательскими способами (см. Uam.conf ), потенциально также используя LABEL(по вашему желанию)
  • Механизмы уведомлений поддерживаются, вам просто нужно настроить их в соответствии с вашими потребностями DE.
  • Кажется, у него четкий дизайн, позволяющий легко определить, где, когда и как запускается каждое действие.
rozcietrzewiacz
источник
Сегодня я получил упоминание о минимальной сумме на #awesome, тем, кто интересуется этой темой, возможно, стоит это проверить
lkraav
Тем временем я перешел в основном к использованию bashmount.
13
2

Вот как я недавно это сделал, и теперь я вполне доволен этим подходом. Это для Ubuntu 12.04 + gentoo, но я думаю, что любой дистрибутив, который позволяет установить udev и автозапуск должен работать.

Предварительные условия: Вы должны установить udev + autofs.

Шаг 1)

Создайте следующий файл «/etc/udev/rules.d/90-usbsd-auto.rules» (конечно, вы можете использовать любое имя, если оно оканчивается на «.rules»). :

# Add symlink /dev/usbdisks/<label> to /dev/sd[a-z][1-9] 
# if partition has a label
# Add symlink /media/usb/<label> to /media/autousb/<label>
# for automounter support
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660", \
    RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}", \
    RUN+="/bin/ln -sf /media/autousb/$env{ID_FS_LABEL_ENC} /media/usb/$env{ID_FS_LABEL_ENC}"

# Fallback: If partition has a NO label, use kernel name (sd[a-z][1-9])
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    SYMLINK+="usbdisks/%k", MODE:="0660", \
    RUN+="/bin/rm /media/usb/%k", \
    RUN+="/bin/ln -sf /media/autousb/%k /media/usb/%k"

# Some FileSystems emit a "change" event when they are unmounted.
# UDEV seems to delete the device symlink in this case :-(
# So we need to re-create it here
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660"

# Fallback: If partition has NO label, use kernel name
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    SYMLINK+="usbdisks/%k", MODE:="0660"


# When device is removed, also remove /media/usb/<label>
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}"

# Fallback: If partition has no label, remove /media/usb/%k
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    RUN+="/bin/rm /media/usb/%k"

Что это делает: создает две символические ссылки, одну для раздела запоминающего устройства USB в «/ dev / usbdisks / <...>». Он будет использовать либо метку раздела USB-накопителя, либо имя ядра, если метка отсутствует. Вторая символическая ссылка будет ссылаться с "/ media / usb / <...>" на "/ media / autousb / <...>", это делается для поддержки автомонтирования (см. Шаг 2).

Примечание. Изначально я не использовал правила с переменными ID_FS_LABEL_ENC, поскольку, на мой взгляд, это опасно. Что произойдет, если вы подключите две USB-флешки с одинаковой этикеткой?

Но постер специально хотел использовать метку USB-диска, поэтому я соответствующим образом изменил правила.

Чтобы убедиться, что udev читает эти правила, используйте

sudo udevadm control --reload-rules

С этим файлом правил udev все настроено для автоматического монтирования раздела USB-накопителя. Обратите внимание, что прямо сейчас устройство НЕ будет автоматически подключено (намеренно). Он будет автоматически смонтирован, как только вы используете его

Шаг 2)

Настройте autofs для автомонтирования / media / autousb / <...>: я добавил следующую строку в мой файл /etc/auto.master (для Ubuntu 12.04):

/media/autousb /etc/auto.usb --timeout=60

Это означает, что AutoFS отключит устройство после 60 секунд бездействия. Вы можете использовать меньше или больше, в зависимости от вашего вкуса.

Для Gentoo вы должны изменить "/etc/autofs/auto.master", чтобы имело смысл использовать

/media/autousb /etc/autofs/auto.usb --timeout=60

Теперь я создал "auto.usb" со следующим содержимым:

#!/bin/bash

key=${1}
fstype=$(/sbin/blkid -o value -s TYPE /dev/usbdisks/${key})
if [ "${fstype}" = "vfat" ] ; then
  echo "-fstype=vfat,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ntfs" ] ; then
  echo "-fstype=fuse.ntfs-3g,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ext4" ] ; then
  echo "-fstype=ext4,sync,nocheck :/dev/usbdisks/${key}"
  exit 0
fi

exit 1

Этот auto.usb должен быть исполняемым, чтобы autofs использовал его как (bash) скрипт. Так например

sudo chmod 0755 /etc/auto.usb

Что это делает? Этот скрипт сообщит AutoFS (/ usr / sbin / automount), как монтировать раздел устройства хранения USB.

Сначала сценарий будет использовать «/ sbin / blkid», чтобы выяснить, какая файловая система находится в разделе.

Затем скрипт предоставит правильные параметры монтирования в зависимости от раздела устройства.

Примечание: я включил пример кода для файловых систем "vfat" (вероятно, наиболее распространенных для USB-флешек), "ntfs" и "xfs". Конечно, это довольно легко расширить для поддержки большего количества файловых систем.

Шаг 3) Необязательно ... Чтобы "извлечь" == размонтировать ваши флешки (или разделы на вашей флешке), создайте скрипт в / sbin / usbeject:

#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount

С помощью этого сценария вы можете использовать «sudo usbeject» для размонтирования всех подключенных разделов USB-устройств (указав автомонтированию отключить их).

Конечно, вы можете просто убедиться, что раздел нигде не используется; Затем автомонтир размонтирует раздел после 60 секундного ожидания ...

Настоящий трюк здесь заключается в использовании символических ссылок из "/ media / usb" в "/ media / autousb":

  • Символические ссылки "/ media / usb" будут созданы udev, чтобы дать пользователю простой обзор того, какие разделы устройства хранения USB есть.
  • AutoFS затем автоматически смонтирует раздел, если вы используете его через / media / usb
  • С помощью скриптового файла "auto.usb" вы можете поддерживать любую файловую систему и, кроме того, вы также можете поддерживать любую схему именования.
  • Этот подход поддерживает использование USB-накопителей с несколькими разделами, даже если эти разделы используют разные типы файловых систем.
Инго Блэкман
источник