Aktualizujemy nasze serwery z bardzo nieaktualnej dystrybucji do nowoczesnego systemu opartego na Debian Jessie, w tym lightdm / xfce i oczywiście systemd (i udisks2). Jednym z problemów jest automatyczne podłączanie napędów USB. Robiliśmy to z pewnymi zasadami udev. Stare reguły prawie nadal działają - punkt montowania jest tworzony, a dysk jest montowany w porządku, ale po kilku sekundach systemd robi coś, co przerywa montowanie, więc kolejne próby dostępu powodują błędy „Punkt końcowy transportu nie jest podłączony”.
Ręczny montaż napędu za pomocą wiersza polecenia działa dobrze. Tak samo pozwala menedżerowi plików (thunar i thunar-volman, który z kolei używa udisks2). Ale to nie są realne opcje - systemy te w większości działają bez głowy, więc Thunar zwykle nie działa. Musimy być w stanie podłączyć dyski w celu wykonywania nienadzorowanych kopii zapasowych opartych na cronie.
Pomyślałem, że modyfikacja skryptu udev w celu odradzania odłączonego zadania, które czeka kilka sekund przed wykonaniem montowania, może załatwić sprawę, ale systemd wydaje się, że robi to, aby temu zapobiec - nadal jakoś czeka na zakończenie odłączonego zadania przed zakończeniem kontynuując.
Być może posiadanie skryptu udev łaskotanie udisks2 jest jakoś właściwym podejściem? Jestem zagubiony, więc wszelkie rady są mile widziane.
źródło
Odpowiedzi:
Po kilku fałszywych startach wymyśliłem to. Kluczem jest dodanie usystematyzowanej usługi jednostki między udev a skryptem instalacyjnym.
(Dla przypomnienia, nie byłem w stanie uzyskać tego działania przy użyciu udisks2 (przez coś podobnego
udisksctl mount -b /dev/sdb1
) wywoływanego albo bezpośrednio z reguły udev, albo z pliku jednostki systemowej. Wygląda na to, że istnieje wyścig, a węzeł urządzenia nie jest jeszcze gotowy , co powodujeError looking up object for device /dev/sdb1
. Niefortunne, ponieważ udisks2 może zająć się całym bałaganem punktu montowania ...)Ciężkie podnoszenie odbywa się za pomocą skryptu powłoki, który dba o tworzenie i usuwanie punktów montowania oraz montowanie i odmontowywanie dysków.
/usr/local/bin/usb-mount.sh
Skrypt jest z kolei wywoływany przez systemowy plik jednostki. Używamy składni nazwy pliku „@”, aby przekazać nazwę urządzenia jako argument.
/etc/systemd/system/[email protected]
Wreszcie, niektóre reguły udev uruchamiają i zatrzymują usystematyzowaną obsługę jednostek podczas hotplug / unplug:
/etc/udev/rules.d/99-local.rules
To wydaje się załatwić sprawę! Kilka przydatnych poleceń do debugowania takich rzeczy:
udevadm control -l debug
włącza pełne rejestrowanie/var/log/syslog
, abyś mógł zobaczyć, co się dzieje.udevadm control --reload-rules
po zmodyfikowaniu plików w rules.d katalog (może nie być konieczne, ale nie może zranić ...).systemctl daemon-reload
po zmodyfikowaniu plików jednostek systemowych.źródło
blkid
nie wydaje się wyodrębnićID_FS_LABEL
, więc po prostu używanyDEVBASE
zamiastLABEL
do konstrukcjiMOUNT_POINT
zamiast.udevadm
zamiastblkid
. Daje znacznie więcej szczegółów, a także dodatkowe informacje. (np.udevadm info --query=property --name=sda1
)/usr/bin/find: '/media/*': No such file or directory
. Oczyszczanie może użyć dodatkowego sprawdzenia, tak jakif [ "$f" != "/media/*" ]; then
przed uruchomieniemfind
.dostępna jest nowa, zwięzła
systemd
opcja automatycznego montowania, z którą można korzystać,fstab
która pozwala korzystać ze wszystkich standardowych opcji uprawnień montowania, i wygląda to tak:przykład tego w
fstab
wierszu:noauto
opcja to znaczy nie będzie próbował zostać zamontowany w bagażniku, jak ze starszym oprogramowaniemautofs
.po dodaniu nowego
x-systemd.automount
wierszafstab
musisz uruchomić:a następnie oba lub jedno z poniższych:
więcej informacji na ten temat:
https://wiki.archlinux.org/index.php/Fstab#Automount_with_systemd
źródło
sudo systemctl restart local-fs.target
wykonał dla mnie lewęZmodyfikowałem skrypt z @MikeBlackwell do:
/dev/sd[a-z]
ale/dev/sd[a-z]*
; często ma to miejsce w przypadku serwerów, które mają większą liczbę wrzecion./var/log/usb-mount.track
/var/log/messages
pomocą tagu usb-mount.sh/media/sdd2_usbtest
,/media/sdd2_
Ponieważ @MikeBlackwell wykonał już większość ciężkich operacji podnoszenia, postanowiłem go nie przepisywać; właśnie dokonał niezbędnych zmian. Potwierdziłem jego pracę, widząc jego imię i URI oryginalnej odpowiedzi.
Znajdź go na https://github.com/raamsri/automount-usb
źródło
Stosując podejście pmount , systemd i Mike'a Blackwella, możesz uprościć całość:
/etc/systemd/system/[email protected]
/etc/udev/rules.d/99-usb-mount.rules
HTH i dziękuję Mike.
źródło
Wybrałbym odpowiedź Warrena Younga, w której wprowadziłem kilka zmian
Dodałem trochę ochrony przestrzeni, ponieważ dawała błędy z ewaluacji środowiska dla dysku.
Dodałem sekcję do chmod dysku USB, aby wszyscy użytkownicy mieli pełny dostęp do dysków innych niż NTFS lub VFAT.
/usr/local/bin/usb-mount.sh
źródło