Reguła Udev do zamontowania dysku nie działa

9

Mam następującą treść w /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"

Po bieganiu:

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

W ogóle nic nie robi. Jeśli jednak zmienię polecenie mount dla czegoś takiego jak / bin / touch / tmp / xyz, to zadziała.

Wersje:

[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
źródło

Odpowiedzi:

18

To jest funkcja systemowa. Oryginalne udevpolecenie zostało zastąpione przez systemd-udevd(patrz jego strona podręcznika). Jedną z różnic jest to, że tworzy własną przestrzeń nazw systemu plików, więc podłączenie jest zakończone, ale nie jest widoczne w głównej przestrzeni nazw. (Możesz to sprawdzić, systemctl status systemd-udevduzyskując główny identyfikator PID usługi, a następnie przeglądając zawartość /proc/<pid>/mountinfoswojego systemu plików).

Jeśli chcesz wrócić do przestrzeni współdzielonej zamiast prywatnej nazwy systemu plików, utwórz plik /etc/systemd/system/systemd-udevd.servicez zawartością

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

lub nowy katalog i plik /etc/systemd/system/systemd-udevd.service.d/myoverride.confzawierający tylko ostatnie 2 wiersze, tj

[Service]
MountFlags=shared

i zrestartuj usługę systemd-udevd. Nie znalazłem implikacji zrobienia tego.

meuh
źródło
Tak, zastosowałem takie obejście, zastanawiam się, czy ma to również wpływ na bezpieczeństwo.
sebelk
1
Jestem pewien, że to nie zadziałało, dopóki nie dodałem [Service]tych dwóch wierszy.
goldilocks
1
@Goldilocks Prawdopodobnie masz rację. Dodałem to do odpowiedzi, dzięki. Może to zależeć od tego, która ostatnia sekcja znajdowała się w dołączonym pliku, ale wygląda na to, że systemd preferuje teraz *.d/*.confsposób wprowadzania zmian, ponieważ .includewydaje się , że nie jest to udokumentowane.
Meuh
12

Ten sam problem występuje w Ubuntu 18.04 z tą samą podstawową przyczyną. Aby to naprawić, tworzymy plik zastępowania dla systemd-udevd:

sudo systemctl edit systemd-udevd

I wstaw do niego:

[Service]
MountFlags=shared

Zapisz plik, a następnie wykonaj:

sudo systemctl daemon-reload
sudo service systemd-udevd --full-restart
wolna przestrzeń
źródło
Działa jak urok na Raspberry (Raspbian 9 „stretch”). Dzięki!
Maxwel Leite
2
W moim Ubuntu 18.04 nie udało się rozwiązać problemu braku automatycznego montowania napędu USB.
Yu Shen
Pracował w Ubuntu 18.04. @YuShen, możesz sprawdzić swoje zasady udev.
Greg Bell