Zamontowanie dysków USB na bezzałogowym systemowym pudełku Linux?

8

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:

  1. modyfikowanie w /etc/fstabcelu dodania montowań na dysk według UUID / label / device.
  2. udev reguły (najwyraźniej „surowe reguły” mogą kolidować z istniejącymi zasadami systemowymi)
  3. udisks2 działający jako usługa systemowa lub przez udiskie
  4. udevil
  5. usbmount
  6. automounting zapewniany przez środowiska pulpitu, tj. na XFCE za pośrednictwem pakietów thunar+ thunar-volmanlub nautilusautomount w Gnome z gnome-volume-managerpakietem (najwyraźniej polegają na udiskach ).
  7. automounter jądra autofs
  8. 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.servicei zmieniłem MountFlags=slavena, MountFlags=sharedjak 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/usbNktórych nie jest idealny, więc przełączyłem się na, automount-usbktóry był zaskakująco łatwy do skonfigurowania (po prostu uruchomiłem configure.shskrypt) i który tworzy foldery montowania, takie jak /media/<device>_<disk_label>np /media/sda2_mylabel.

Ważne linki:

ccpizza
źródło
Co dokładnie chcesz automatycznie zamontować? Ograniczony zestaw znanych urządzeń, czy po prostu cokolwiek USB zostanie podłączony w dowolnym momencie w przyszłości? Istnieją różne odpowiedzi na oba.
grawity
@grawity: Jestem bardziej zainteresowany drugim (tj. jakimkolwiek urządzeniem pamięci USB), ponieważ po raz pierwszy mogę po prostu dodać wpisy /etc/fstab.
ccpizza

Odpowiedzi:

2

Zgłoszenia /etc/fstabpowinny 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)i systemd.automount(5)man.

Ignacio Vazquez-Abrams
źródło
1
Chciałbym uniknąć bezpośredniej edycji, /etc/fstabponieważ nie chcę dodawać identyfikatorów UUID do każdego urządzenia USB. Czy masz przykład jednostki .mountlub .automountjednostki? Gdzie musiałby być umieszczony? Under /lib/systemd/system?
ccpizza
1
Tak, mała literówka. pkg-config systemd --variable=systemdsystemconfdir
Ignacio Vazquez-Abrams
Nie, sysadmin nigdy nie powinien umieszczać tam niestandardowych jednostek. Mogą /etc/systemd/systemdo tego wykorzystać .
grawity
2

nie jest jasne, jakie jest obecne podejście „oficjalnie” wspierane.

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.

Bardziej interesuje mnie drugie (tj. Dowolne urządzenie pamięci USB), ponieważ po raz pierwszy mogę po prostu dodać wpisy /etc/fstab.

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-mountregułę 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 ostatnio systemdz .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=300pomocą 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 autofsdmożna robić, co chcesz, ale pamiętam, że obsługuje niektóre rodzaje dynamicznych map (dla domowych katalogów użytkowników). Być może programzadziałałoby użycie typu mapy (i skryptu, który wylicza wszystkie podłączone dyski).

grawitacja
źródło