[РЕШЕНО] systemd-212-1 - сломали автомонтирование udev

tchgefest
Очень глупый вопрос,а для чего автомонтирование в иксах
Для банального удобства. Недавно мне пришлось последовательно с интервалом в минуту воткнуть штук 10-15 флешек - скидывал инфу коллегам. И особо командами не помонтируешь )
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb
http://rusrailsim.org
maisvendoo
Для банального удобства. Недавно мне пришлось последовательно с интервалом в минуту воткнуть штук 10-15 флешек - скидывал инфу коллегам
Да ладно!?Сейчас попробовал подключить через hub 4 flash и 1 sd карту заняло 20" и umount 20".

Копирование файлов больше времени забирает.
Последний крик моды - эхо 30-летней давности.
Каждому свое
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb
http://rusrailsim.org
maisvendoo
интервалом в минуту воткнуть штук 10-15 флешек - скидывал инфу коллегам
Вот это неудобство,я бы собрал флешки и разом скинул.
Последний крик моды - эхо 30-летней давности.
Natrio
Мой юниксвейный mnt не заметил никаких изменений, но от udev он зависит только по группам, которые присваиваются устройствам правилами udev, а эти группы присваиваются успешно.
Автомонтированием я не пользуюсь, но для проверки только что специально сделал юнит [email protected] :
Записал я такой сервис в /etc/systemd/system (это правильно?), но грандиозные nmt и umt заменил на простейшие однострочные скрипты, которые пытаются писать лог. При втыкании флэшки сервис, вроде, запускается, но никаких следов запуска скриптов я не вижу. А при перезагрузке этот сервис всё вешает с особой жестокостью.

Так что я бы хотел перенести рассмотрение на гораздо более простой вопрос: монтирование CD. И сделать рассмотрение более конкретным.
У меня статически создан каталог /media/cdrom, и вот туда диск монтируется при втыкании, и отмонтируется при извлечении. До systemd 211 это работало на ура, с 212 работать перестало. Почему? Что делать?

/etc/udev/rules.d/14-autodvd.rules
KERNEL=="sr0", ACTION=="change", RUN+="/usr/local/bin/autodvd"
/usr/local/bin/autodvd
#!/bin/bash
FSTYPE=`lsblk -no FSTYPE /dev/sr0`
if [ -n "$FSTYPE" ]; then
  mount -t $FSTYPE  /dev/sr0 /media/cdrom
else
  umount  /dev/sr0
fi
Что-то я не понял, зачем вы определяете тип фс, если не используете его для изменения параметров? Определять фс mount умеет и сам.

Я бы прописал в правило udev старт и стоп юнита, а в юнит прямой mount и umount.

Использовать монтирование непосредственно из udev чревато, он может убить слишком долгий процесс, в том числе и скрипт. А вот systemctl лишь подаёт сигнал systemd и завершается, и монтирование будет выполняться уже в другом процессе и другой сессии, так долго, как требуется.

P.S.
Не вижу ничего грандиозного в моих скриптах. Код pmount был куда сложнее, udevil ещё более громоздок, не говоря уже об udisks+polkit :)
Natrio
Что-то я не понял, зачем вы определяете тип фс, если не используете его для изменения параметров? Определять фс mount умеет и сам.
Мне важно проверить наличие ФС - именно это позволяет понять, вставлен диск или извлечён. Ну а уж если я выяснилил ФС, то почему бы не передать её mount, чтобы не определять ещё раз?
Natrio
Я бы прописал в правило udev старт и стоп юнита, а в юнит прямой mount и umount.
Стоп прописать невозможно, поскольку нет возможности различить, вставили диск или вынули.
Natrio
Использовать монтирование непосредственно из udev чревато, он может убить слишком долгий процесс, в том числе и скрипт. А вот systemctl лишь подаёт сигнал systemd и завершается, и монтирование будет выполняться уже в другом процессе и другой сессии, так долго, как требуется.
"Слишком долгий" - это сколько? 1 мс, 100 мс, 10с? В данном случает IMHO время будет очень малым. При вставлении диска событие change возникает несколько раз, и только последнее них - после распознавания ФС. Соответственно, монтирование после этого происходит быстро.
Natrio
Не вижу ничего грандиозного в моих скриптах. Код pmount был куда сложнее, udevil ещё более громоздок, не говоря уже об udisks+polkit :)
Ладно, бог с ними с флэшками. Мои средства по CD/DVD - уж точно простые, проще некуда. И почему они с systemd 211 работают, а с 212 - нет?
Сделал работу с CD через сервис - работает, и с 211, и с 212. Блин, твёрдой рукой загоняют в счастливое будуще... Придётся с флэшками тоже повозиться.

/etc/udev/rules.d/14-autodvd.rules
KERNEL=="sr0", ACTION=="change", RUN+="/usr/bin/systemctl start autodvd.service

/etc/systemd/system/autodvd.service
[Unit]
Description=(u)mount CD/DVD
[Service]
Type=oneshot
ExecStart=/usr/local/bin/autodvd
TimeoutSec=0
RemainAfterExit=no

/usr/local/bin/autodvd
#!/bin/bash
FSTYPE=`lsblk -no FSTYPE /dev/sr0`
if [ -n "$FSTYPE" ]; then
  mkdir -p /media/cdrom ;
  mount -t $FSTYPE  /dev/sr0 /media/cdrom
else
  if umount  /dev/sr0 2> /dev/null ; then true
  fi
  if rmdir /media/cdrom 2> /dev/null ; then true
  fi
fi
2All
Прошу помощи по организации взаимодействия скриптов, вызываемых из сервиса.
Сервис автомонтирования стартуется при появлении устройства, стопится при исчезновении. При старте сервис вызывает один скрипт (mnt), при стопе - другой (rm_mp), оба с именем устройства в качестве параметра. Скрипт mnt каким-то способом определяет точку монтирования, создаёт этот каталог и монтирует устройство. Каким образом передать это имя каталога в rm_mp, чтобы тот удалил каталог? Самого монтирования в момент вызова rm_mp обычно уже нет (заранее отмонтировали вручную).
Я сделал это через вспомогательные файлы вроде /tmp/mnt_$1, но это мне очень не нравится. Хотелось бы через переменные окружения или что-то в таком роде.
Переменные окружения связаны с процессом и наследуются ТОЛЬКО его потомками, больше никем. Насколько я понимаю, это общее свойство переменных окружения, независимо от системы. Если процесс завершился, и потомков у него нет, то никакие переменные окружения он больше никому не передаст.

Так что выбранный вами способ хранения вполне адекватен. Единственное что, я бы создал для этого отдельный каталог где-нибудь в /run
 
Зарегистрироваться или войдите чтобы оставить сообщение.