Правило Udev для монтирования диска не работает

9

У меня есть следующий контент в /etc/udev/rules.d/81-external-disk.rules:

ENV{ID_FS_UUID}=="6826692e-79f4-4423-8467-cef4d5e840c5", RUN{program}+="/bin/mount -o nofail,x-systemd.device-timeout=1 -t ext4 -U 6826692e-79f4-4423-8467-cef4d5e840c5 /backup/external"

После запуска:

udevadm control --reload ; udevadm trigger /dev/sdb1

Это ничего не делает вообще. Однако, если я изменю команду монтирования для чего-то типа / bin / touch / tmp / xyz, это сработает.

Версии:

[root@helsinki rules.d]# rpm -qa | grep udev
libgudev1-219-19.el7_2.12.x86_64
python-pyudev-0.15-7.el7_2.1.noarch
[root@helsinki rules.d]# rpm -qa | grep systemd
systemd-libs-219-19.el7_2.12.x86_64
systemd-219-19.el7_2.12.x86_64
systemd-sysv-219-19.el7_2.12.x86_64
[root@helsinki rules.d]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
sebelk
источник

Ответы:

18

Это системная функция. Первоначальная udevкоманда была заменена на systemd-udevd(см. Ее страницу руководства ). Одно из отличий состоит в том, что он создает собственное пространство имен файловой системы, поэтому ваше монтирование завершено, но оно не отображается в основном пространстве имен. (Вы можете проверить это, выполнив запрос systemctl status systemd-udevdна получение основного PID службы, а затем просмотрев содержимое /proc/<pid>/mountinfoвашей файловой системы).

Если вы хотите вернуться к наличию общего, а не частного пространства имен файловой системы, то создайте файл /etc/systemd/system/systemd-udevd.serviceс содержимым

.include /usr/lib/systemd/system/systemd-udevd.service
[Service]
MountFlags=shared 

или новый каталог и файл /etc/systemd/system/systemd-udevd.service.d/myoverride.confтолько с двумя последними строками, т.е.

[Service]
MountFlags=shared

и перезапустите службу systemd-udevd. Я не нашел последствий этого.

meuh
источник
Да, я применил такой обходной путь, интересно, имеет ли это также последствия для безопасности.
Себельк
1
Я уверен, что это не сработало, пока я не добавил [Service]эти две строки.
Златовласка
1
@goldilocks Вы, вероятно, правы. Я добавил это в ответ, спасибо. Это может зависеть от того, что было в последнем разделе во включенном файле, но кажется, что systemd теперь предпочитает использовать *.d/*.confспособ внесения изменений, что, .includeпохоже, не задокументировано.
meuh
12

Эта же проблема возникает в Ubuntu 18.04 с той же основной причиной. Чтобы исправить это, мы создаем файл переопределения для systemd-udevd:

sudo systemctl edit systemd-udevd

И вставьте в него:

[Service]
MountFlags=shared

Сохраните файл и затем выполните:

sudo systemctl daemon-reload
sudo service systemd-udevd --full-restart
свободное место
источник
Это сработало как шарм на Raspberry (Raspbian 9 "stretch"). Спасибо!
Максвел Лейт
2
Это не помогло моей Ubuntu 18.04 решить проблему отсутствия автомонтирования для USB-накопителя.
Ю Шен
Работал в Ubuntu 18.04. @YShen, вы можете проверить свои правила udev.
Грег Белл