Podejścia do urządzeń do automatycznego montażu w Linuksie ciągle się zmieniają, a Google zwraca całkiem sporo rozwiązań o różnym stopniu zastosowania dla nowoczesnych urządzeń opartych na systemie.
Wydaje się, że istnieją następujące podejścia:
- modyfikowanie w
/etc/fstab
celu dodania montowań na dysk według UUID / label / device. udev
reguły (najwyraźniej „surowe reguły” mogą kolidować z istniejącymi zasadami systemowymi)- udisks2 działający jako usługa systemowa lub przez udiskie
- udevil
- usbmount
- automounting zapewniany przez środowiska pulpitu, tj. na XFCE za pośrednictwem pakietów
thunar
+thunar-volman
lubnautilus
automount w Gnome zgnome-volume-manager
pakietem (najwyraźniej polegają na udiskach ). - automounter jądra autofs
- systemd automounting , przykład użycia: automount-usb
Wybory mogą być przytłaczające i nie jest jasne, jakie jest obecnie zalecane podejście. Ponadto wydaje się, że różne podsystemy automatycznego montażu mogą powodować konflikty, co prowadzi do sytuacji, w których partycja jest montowana przez jedno narzędzie, a następnie w ciągu kilku sekund jest automatycznie odmontowywana przez inne narzędzie.
W przypadku systemów ze środowiskiem stacjonarnym jest to proste, ponieważ większość z nich obsługuje montaż USB automatycznie, więc nie jest konieczne żadne dodatkowe działanie oprócz włączenia opcji automatycznego montażu w ustawieniach.
Jakie byłoby obecne podejście do systemu bezgłowego, który działa głównie w trybie tekstowym?
Aktualizacja
Po majstrowaniu przy wszystkich opcjach, które znalazłem usbmount
(prawie) po prostu pracowałem po tym, jak edytowałem /lib/systemd/system/systemd-udevd.service
i zmieniłem MountFlags=slave
na, MountFlags=shared
jak opisano w tym numerze . Nie trzeba ręcznie dodawać żadnych identyfikatorów UUID ani etykiet do żadnych plików konfiguracyjnych. Minusem jest to, że tworzy punkty montowania, w /media/usbN
których nie jest idealny, więc przełączyłem się na, automount-usb
który był zaskakująco łatwy do skonfigurowania (po prostu uruchomiłem configure.sh
skrypt) i który tworzy foldery montowania, takie jak /media/<device>_<disk_label>
np /media/sda2_mylabel
.
Ważne linki:
- https://github.com/six-k/automount-usb
- Automatycznie montujesz dyski zewnętrzne w katalogu / media / LABEL podczas rozruchu bez zalogowanego użytkownika?
- https://askubuntu.com/a/457904/74172
- https://unix.stackexchange.com/questions/119973/mounting-usb-automatically-having-usbs-label-as-mountpoint
- https://www.freedesktop.org/software/systemd/man/systemd.automount.html
- https://www.freedesktop.org/software/systemd/man/systemd.mount.html
- http://blog.tomecek.net/post/automount-with-systemd/
- https://serverfault.com/questions/766506/automount-usb-drives-with-systemd
/etc/fstab
.Odpowiedzi:
Zgłoszenia
/etc/fstab
powinny być nadal honorowane w systemie opartym na systemie.Zamiast tego można użyć jednostki .mount i należy ją uważać za równoważną pozycji w fstab.
Można użyć jednostki .automount, jeśli mocowanie nie jest wymagane przy starcie lub na stałe; systemd odmontuje go po upływie okresu bezczynności podanego w pliku jednostki.
Szczegółowe informacje można znaleźć na stronach
systemd.mount(5)
isystemd.automount(5)
man.źródło
/etc/fstab
ponieważ nie chcę dodawać identyfikatorów UUID do każdego urządzenia USB. Czy masz przykład jednostki.mount
lub.automount
jednostki? Gdzie musiałby być umieszczony? Under/lib/systemd/system
?pkg-config systemd --variable=systemdsystemconfdir
/etc/systemd/system
do tego wykorzystać .Oficjalnie wspierany przez kogo? Jeśli np. GNOME zawiera funkcję automatycznego montowania opartą na udiskach, możesz być pewien, że jest oficjalnie obsługiwany przez sam GNOME.
Nie ma na to „standardowego sposobu”. W najlepszym przypadku większość istniejących systemów zdecydowała się na dodanie automatyzacji
udisks2
. Sam w sobie, udisks w ogóle niczego nie montuje automatycznie - ale jest to „backend” używany przez wiele graficznych środowisk graficznych (przynajmniej GNOME i Xfce go używają; jestem tylko 80% pewny KDE i Oświecenia).(Więc twoją opcją 3 byłoby „udisks2 + automount by udiskie”, a opcją 4 byłoby „udisks2 + automount według środowiska pulpitu”.)
Jeśli chodzi o reguły udev: czy chodzi o montowanie systemów plików, czy uruchamianie usług, krótka odpowiedź brzmi „nie rób tego” (z różnych powodów); ale długa odpowiedź brzmi: „nie rób tego bezpośrednio, ale możesz poprosić init, aby to zrobił”. Więc nie byłoby strasznie uruchomić
systemd-mount
regułę udev, która następnie przekazuje żądanie montowania do init tak jak jednostka .mount ...Spodziewaj się jednak, że spowoduje to błąd systemowy / brodawkę / błąd: ponieważ udev zgłasza, że urządzenie jest gotowe dopiero po przetworzeniu reguł, możesz skończyć z automatycznym odmontowaniem dysku, ponieważ myśli, że urządzenia jeszcze tam nie ma.
Zamiast tego udevil działałby lepiej, ponieważ nie uruchamia niczego za pomocą reguł, ale reaguje tylko na zdarzenia „gotowe do urządzenia” emitowane przez udev.
Wpisy fstab są zorientowane na urządzenia statyczne. Można ich jednak nadużywać w odniesieniu do różnych pamięci USB, używając
/dev/disk/by-path/...
, co odpowiada fizycznej ścieżce urządzenia (np. Gniazdo PCI 3, port USB 1, partycja 1 ...) W ten sposób możesz napisać wpis fstab, który pasuje do dowolnego dysku podłączonego do tego samego portu USB.Automounter jądra autofs , podobnie jak udisk, jest tylko backendem, na którym można zaimplementować różne automounty w przestrzeni użytkownika. Po skonfigurowaniu podłączenia autofs wszystkie próby uzyskania do niego dostępu są zgłaszane do odpowiedniego demona. Najczęstsze implementacje to tradycyjne (oparte na mapach)
autofs
, a ostatniosystemd
z .automount.Tak więc „dynamiczna” logika urządzenia USB nadal musiałaby zostać zaimplementowana w przestrzeni użytkownika, a poza tym jest to więcej pracy niż zwykłe używanie udisk.
W zwykłym systemd jedyną opcją jest zbudowanie na powyższym hacku „by-path” fstab. Po napisaniu wpisu fstab dla żądanego portu USB możesz oznaczyć go za
x-systemd.automount,x-systemd.idle-timeout=300
pomocą automountera autofs. (Lub, oczywiście, twórz samodzielne .mount + .automount jednostki dla tego samego rezultatu.)Jeśli chcesz dynamicznie generować automounty dla wszystkich dysków USB na wszystkich portach, systemd nie może tego zrobić bez skryptów innych firm.
Nie wiem, czy
autofsd
można robić, co chcesz, ale pamiętam, że obsługuje niektóre rodzaje dynamicznych map (dla domowych katalogów użytkowników). Być możeprogram
zadziałałoby użycie typu mapy (i skryptu, który wylicza wszystkie podłączone dyski).źródło