To pytanie jest podobne, ale jest przeciwieństwem tego, czego chcę. Chcę, aby zewnętrzne dyski USB były montowane automatycznie podczas rozruchu, bez zalogowania się, w lokalizacjach takich jak /media/<label>
.
Nie chcę wprowadzać wszystkich danych do fstab, częściowo dlatego, że jest to żmudne i denerwujące, ale głównie dlatego, że nie mogę przewidzieć, co będę w nim podłączać ani jak zmieni się partycja w przyszłości.
Chcę, aby dyski były dostępne dla rzeczy takich jak MPD i dostępne po zalogowaniu się za pomocą SSH. gnome-mount
wydaje się montować tylko wtedy, gdy jesteś lokalnie zalogowany do graficznej sesji Gnome.
/usr/local/sbin/udev-automounter.sh mount %k
powinno być/usr/local/sbin/udev-automounter.sh %k
. Przepraszam.\x20
„s”. więc to nie jest ładne, ale zadziała. udev nie radzi sobie dobrze z etykietami ze spacjami, ale jest też inna opcja, która używa podkreślników zamiast\x20
'(więc przynajmniej ładnie wygląda). wygląda na to, że obsługa przestrzeni musi przejść do skryptów powłoki.Odpowiedzi:
vol_id
polecenia.vol_id
został zastąpiony przezblkid
. Aby naprawić skrypt, zamień „vol_id” na „blkid -o udev” wudev-auto-mount.sh
skrypcie.Od jakiegoś czasu macham głową i myślę, że znalazłem działające rozwiązanie. Jest to rozwijane i testowane na systemie opartym na Debianie, więc powinno działać na Ubuntu. Zwrócę uwagę na przyjęte przez niego założenia, dzięki czemu można go dostosować również do innych systemów.
/media/LABEL
katalog, w którym można zamontować urządzenie.gksudo
lub podobnie.Nie testowałem tego podczas uruchamiania systemu, ale widzę, że może nie działać, jeśli spróbuje zamontować dysk USB, zanim system będzie gotowy do zamontowania. W takim przypadku prawdopodobnie potrzebna będzie dodatkowa modyfikacja skryptu montowania. ( Sprawdzam za pomocą ServerFault, czy jest jakaś rada, ale nie ma tam większego zainteresowania).
A więc do tego.
Referencje UDEV:
Tło (UDEV? Whuzzat?)
UDEV to system hotplug jądra. To właśnie automatycznie konfiguruje odpowiednie urządzenia i dowiązania symboliczne urządzeń (np.
/dev/disk/by-label/<LABEL>
), Zarówno w czasie uruchamiania, jak i dla urządzeń dodawanych podczas działania systemu.D-Bus i HAL są używane do wysyłania zdarzeń sprzętowych do słuchaczy, takich jak środowiska pulpitu. Kiedy więc zalogujesz się do GNOME i włożysz płytę CD lub podłączysz napęd USB, zdarzenie to będzie przebiegać następująco:
I presto, twój napęd zostanie zamontowany. Ale w systemie bezgłowym nie chcemy się logować, aby uzyskać korzyści z automatycznego montażu.
Zasady Udev
Ponieważ UDEV pozwala nam pisać reguły i uruchamiać programy podczas wstawiania urządzeń, jest to idealny wybór. Wykorzystamy istniejące zasady Debian / Ubuntu, pozwolimy im skonfigurować
/dev/disk/by-label/<LABEL>
dla nas dowiązanie symboliczne i dodamy kolejną regułę, która zamontuje dla nas urządzenie.Reguły UDEV są przechowywane w
/etc/udev/rules.d
(i/lib/udev/rules.d
Karmic) i są przetwarzane w kolejności numerycznej. Każdy plik, który nie zaczyna się od numeru, jest przetwarzany po plikach numerowanych. W moim systemie reguły HAL znajdują się w pliku o nazwie90-hal.rules
, więc umieszczam je w regułach,89-local.rules
aby zostały przetworzone, zanim dotrą do HAL. Przede wszystkim musisz upewnić się, że te reguły pojawią się po60-persistent-storage.rules
.local.rules
może być wystarczająco dobry.Umieść to w swoim nowym pliku reguł:
Upewnij się, że nie ma spacji po
\
, tylko anewline
(\n
).Zmieni
SUBSYSTEMS=="usb"
sięSUBSYSTEMS=="usb|ieee1394"
o wsparcie Firewire.Jeśli chcesz, aby urządzenie zawsze było własnością konkretnego użytkownika, dodaj
OWNER="username"
klauzulę. Jeśli potrzebujesz tylko plików należących do określonego użytkownika, dostosuj skrypt montowania.Czytanie reguły
Dodaje to program do uruchomienia do listy programów do uruchomienia na urządzeniu. Identyfikuje urządzenia partycji USB
<LABEL>
, a następnie przekazuje te informacje do skryptu, który wykona podłączenie . W szczególności ta reguła jest zgodna:ENV{ID_FS_LABEL_ENC}=="?*"
- zmienna środowiskowa ustawiona na podstawie wcześniejszej reguły systemowej. Nie istnieje dla systemów innych niż pliki, dlatego to sprawdzamy. Właściwie chcemy użyćID_FS_LABEL
dla punktu montowania, ale nie przekonałem UDEV, aby uciec z niego, więc pozwolimy skryptowi montować sobie z tym poradzić.Ta i inne zmienne środowiskowe są uzyskiwane przez udev za pomocą
vol_id
polecenia ( przestarzałe ). Jest to przydatne narzędzie, aby zobaczyć ładne szybkie szczegóły na partycji:ACTION=="add"
- dopasowuj tylkoadd
wydarzenia ...SUBSYSTEMS=="usb"
- pasuj tylko do urządzeń znajdujących się na magistrali USB. UżywamySUBSYSTEMS
tutaj, ponieważ odpowiada to rodzicom naszego urządzenia; urządzeniem, którym jesteśmy zainteresowani, w rzeczywistości będzie SUBSYSTEM == "scsi". Dopasowywanie do nadrzędnego urządzenia USB pozwala uniknąć dodawania naszego programu do dysków wewnętrznych.RUN+="..."
- nie pasuje, ale akcja: dodaj ten program do listy programów do uruchomienia. W argumentach programu%k
zostaje rozwinięty do nazwy urządzenia (np.sdc1
Nie/dev/sdc1
) i$env{FOO}
otrzymuje zawartość zmiennej środowiskowej FOO.Testowanie reguły
Pierwszy odnośnik (powyżej) to doskonały samouczek UDEV, ale jest nieco nieaktualny. Programy, które uruchamia do testowania twoich reguł (
udevtest
w szczególności) zostały zastąpione narzędziem catch-alludevadm
.Po dodaniu reguły podłącz urządzenie. Daj mu kilka sekund, a następnie sprawdź, do którego urządzenia zostało przypisane:
Jeśli twój dysk wymienny zawiera
label_Baz
, jest na urządzeniusdc1
. Uruchom to i spójrz na wynik pod koniec:Poszukaj nazwy skryptu z naszej
RUN+=
reguły w ostatnich kilku wierszach (3 od dołu w tym przykładzie). Możesz zobaczyć argumenty, które byłyby użyte dla tego urządzenia. Możesz teraz uruchomić to polecenie, aby sprawdzić, czy argumenty są prawidłowe; jeśli działa w linii poleceń, powinien działać automatycznie po włożeniu urządzenia.Możesz także monitorować zdarzenia UDEV w czasie rzeczywistym: uruchom
sudo udevadm monitor
(zobaczman udevadm
szczegóły na temat przełączników). Następnie wystarczy podłączyć nowe urządzenie i oglądać przewijane wydarzenia. (Prawdopodobnie przesada, chyba że interesują Cię szczegóły niskiego poziomu ...)Ponowne ładowanie reguł
Po upewnieniu się, że reguła jest poprawnie czytana, musisz powiedzieć UDEV, aby przeładowała swoje reguły, aby nowa zaczęła obowiązywać. Użyj dowolnej z tych metod (jeśli pierwsza nie działa, druga powinna ... ale wypróbuj pierwszą pierwszą):
biegać
sudo udevadm control --reload-rules
biegać
sudo /etc/init.d/udev reload
restart
Scenariusz! Właściwie 2 skrypty ...
Oto pierwszy skrypt. Ponieważ program, który uruchamiamy, musi się szybko zakończyć, powoduje to jedynie wyłączenie drugiego skryptu w tle. Umieść to w
/usr/local/sbin/udev-automounter.sh
:Oto drugi skrypt. Robi to nieco więcej sprawdzania danych wejściowych. Włóż to
/usr/local/sbin/udev-auto-mount.sh
. Możesz dostosować poniższe opcje montowania. Ten skrypt obsługuje teraz samodzielne wyszukiwanie LABEL partycji; UDEV wysyła tylko nazwę URZĄDZENIA.Jeśli podczas uruchamiania wystąpi problem z montażem dysków , możesz
sleep 60
w tym skrypcie spędzić niezłą chwilę , aby dać systemowi czas na awans, zanim skrypt spróbuje zamontować dysk.W komentarzach podałem sugestię dotyczącą sposobu sprawdzania (uruchom,
ps
aby sprawdzić, czy serwer WWW działa), ale będziesz chciał dostosować go do swojego systemu. Myślę, że większość serwerów sieciowych, których używasz, wystarczyłaby do tego celu - nfsd, smbd, apache itp. Ryzyko polega oczywiście na tym, że skrypt montowania zawiedzie, jeśli usługa nie działa, więc może testowanie istnienie konkretnego pliku byłoby lepszym rozwiązaniem.Skrypt czyszczenia super bonusów!
Jeszcze jeden skrypt. Wszystko to polega na odmontowaniu urządzenia i usunięciu katalogów mountpoint. Zakłada, że ma do tego uprawnienia, więc musisz go uruchomić
sudo
. Ten skrypt przyjmuje teraz pełny punkt montowania w wierszu poleceń, np .:Umieść to w
/usr/local/sbin/udev-unmounter.sh
:źródło
Ostatnią opcją, którą inni sugerowali w sieci, jest
ivman
, ale wydaje się, że zależy od tegopmount
, co już powiedziałeś, nie działa.pmount
jest opuszczony iivman
jest prawie taki sam.Zamiennik
ivman
jesthalevt
i jest dostępny w Karmic. Jest to ponowna implementacjaivman
(czytaj: „utrzymane” i „nie zależy od pmount”). Pakiet nie jest dostępny w Jaunty, chociaż możesz go zbudować samodzielnie, jeśli nie planujesz aktualizacji.Oba te narzędzia znajdują się nad warstwami DBus i HAL i reagują na zdarzenia z nich. Najwyraźniej oba mogą działać jako demon systemowy lub jako menedżer montowania sesji użytkownika (a la Gnome-VFS) -
/etc/defaults/{ivman,halevt}
pliki są odpowiedzialne za ustawienia systemowe.Oto kilka instrukcji dotyczących poprawiania
ivman
używania/media/<LABEL>
punktów montowania. Prawdopodobniehalevt
jest to prostszy sposób, ale może pomogą ci znaleźć odpowiedź.Praca z HALEVT
Aktualizacja : W celu uzyskania również automatycznych montowań CD, czego nie zapewnia moja odpowiedź UDEV, przyjrzałem się głębiej
halevt
. Znalazłem ten post na blogu, który pomógł wiele wyjaśnić ten proces. Musiałem skompilować własnyhalevt
pakiet dla Debiana Lenny'ego (na szczęście wszystkie zależności były w sekcji lenny-backports). Po zainstalowaniu proces nie był w większości okropny:/etc/default/halevt
/etc/PolicyKit/PolicyKit.conf
(patrz poniżej; źródło )/etc/hal/fdi/policy/preferences.fdi
(patrz poniżej)eject.hal
skrypt z powyższego wpisu na blogu, zmodyfikuj i zapisz/usr/local/bin
./etc/halevt/halevt.xml
Jeśli musisz ponownie uruchomić demony HAL i HALEVT, aby sprawdzić nowe konfiguracje, użyj tego, aby ustawić je we właściwej kolejności:
Krok 1
Sprawdź to
START_DAEMON=yes
w/etc/default/halevt
.Krok 2
W
/etc/PolicyKit/PolicyKit.conf
dodaj to wewnątrz tej<config></config>
sekcji:Krok 3
W
/etc/hal/fdi/policy/preferences.fdi
dodaj to w sekcji `:Krok 4
Skrypt jest dobry, ale musi zostać uruchomiony
/bin/bash
; Niektóre systemy mogą faktycznie używać/bin/dash
, gdy/bin/sh
jest tzw. Więc zmień górny wiersz skryptu, aby upewnić się, że otrzymujesz właściwy:Krok 5
To jest fajna część. Twój system może już zapewniać podstawową
/etc/halevt/halevt.xml
, więc będziesz musiał dostosować to do własnego użytku. W moim przypadku mój system zapewniał już podstawowy montaż wymiennych elementów, ale musiałem dodać obsługę montażu CD-ROM i przycisku wysuwania.Wpis na blogu, o którym wspomniałem, zawiera dobrą przykładową konfigurację XML do sprawdzenia własnych poprawek. Chodzi głównie o skonfigurowanie zamiennika gnome dla środowiska autora
fluxbox
, więc jego przykładowy kod XML robi więcej, niż chcesz, ale jest to świetny sposób na sprawdzenie, co możesz zrobić. Istnieje również kilka dobrych przykładów/usr/share/doc/halevt/examples
.Musiałem także biec,
sudo sh -c "mkdir /var/halevt ; chown halevt:plugdev /var/halevt"
zanim wszystko zadziała.Oto moje dodatki, które umożliwiają automatyczne instalowanie dysków CD / DVD:
Krok 6
Kiedy już uruchomisz systemowego demona halevt, musisz go wyłączyć podczas logowania do GNOME i uruchomić go ponownie po wylogowaniu. (Zobacz moją odpowiedź na to pytanie dla menedżerów logowania spoza GDM). Te rzeczy są teoretyczne, ponieważ ich nie używam, ale powinny działać.
W
/etc/gdm/PreSession/Default
, dodać to do zatrzymania systemu halevt-demona:W
/etc/gdm/PostSession/Default
, dodać to, aby ponownie uruchomić system halevt-demona:źródło
Z biegiem czasu pojawiają się łatwiejsze rozwiązania.
To rozwiązanie opiera się na pakiecie oprogramowania udevil, który został napisany w tym celu i nie wymaga majstrowania przy regułach udev. Jest to prawdopodobnie lepsze (dla nowych i starych użytkowników) jako proste rozwiązanie.
devmon
Skrypt z udevil wykonuje całą magię, podczas gdy tylko w zależności od udev i wygadany. Działa niemal natychmiast po wyjęciu z pudełka, bez potrzeby wstępnej konfiguracji.Wszystko, co zrobiłem na mojej stacji roboczej, to wywołanie devmon z
rc.local
tego w następujący sposób:devmon 2>&1 >> /var/log/devmon &
Dla wygody możesz chcieć osadzić to w skrypcie init zamiast
rc.local
korzystać z automatycznego narzędzia, takiego jakpleaserun
tworzenie: https://unix.stackexchange.com/ a / 124609/42673Po uruchomieniu, pamięć, którą podłączam, jest sprawdzana (szuka partycji, a jeśli zostanie znaleziona, patrzy na etykiety systemu plików), a następnie podłączana do niej
/media/FILESYSTEM_LABEL
.Nie wyobrażam sobie nic prostszego niż to, że (nie) słynny system wprowadził tę funkcjonalność w pewnym momencie w przyszłości.
udevil At A Glance ( github.io/udevil )
Skrypt: devmon ( igurublog / script-devmon )
źródło
quack Odpowiedź quixote nie działa na Ubuntu Lucid Lynx (10.04) - nie ma
/sbin/vol_id
polecenia.Zamiast być fantazyjnym i używać udev, umieść to w swoim /etc/rc.local i gotowe:
źródło
Dla systemów opartych na Debianie (np. Ubuntu itp.) Istnieje pakiet usbmount , który automatycznie montuje dyski USB. Zasadniczo wykorzystuje podejście udev, jak już wspomniano - tylko prosta instalacja pakietu. Wygląda na to, że oryginalnemu autorowi pakietu zabrakło pary, ale Ubuntu / Debian nadal wydaje się go utrzymywać (wydaje mi się, że nie jest tak skomplikowany) - więc nadal jest dostępny w najnowszych wydaniach.
Zainstalowane skrypty można skonfigurować (/etc/usbmount/usbmount.conf) w celu zapewnienia odpowiednich punktów montowania.
źródło
Aby wypłukać doskonałe instrukcje usuwania Quack Quixote:
Dodaj następujący wiersz do wcześniej utworzonego pliku reguł udev (/etc/udev/rules.d) „
Następnie utwórz następujący skrypt i wykonaj jego plik wykonywalny (/usr/local/sbin/udev-autounmounter.sh) o następującej treści:
Wreszcie sam odmontowany skrypt (udev-auto-unmount.sh):
Tak więc z innymi instrukcjami, katalog pojawi się automatycznie i zniknie po zdarzeniach udev.
źródło
if [ -n "$device_is_mounted" ]; then
powinno byćif [ -z "${MOUNTPT}" ]; then
, prawda?Możesz wypróbować Pysdm
źródło
Możesz spróbować umieścić
su username -c gnome-volume-manager
plik /etc/rc.local. Może być wystarczające uruchomienie gnome-volume-managera.Edycja: Wygląda na to, że gnome-volume-manager nie jest już częścią domyślnej dystrybucji, nawet na pulpicie Ubuntu.
Może jednak po zainstalowaniu nadal będzie działać. Warto spróbować. Jeśli to nie działa, usuń go ponownie.
Jest też
usbmount
pakiet, który robi to, co chcesz, ale może zakłócać normalne automatyczne montowanie.źródło
Moje edytowane dodatki do rozwiązania opartego na udev quix quixote zostały odrzucone, więc umieszczę je tutaj. Najpierw zapoznaj się z jego postem.
Przede wszystkim, jeśli chcesz, aby reguła udev działała po podłączeniu dowolnego urządzenia za pośrednictwem podsystemu SCSI (który obejmuje zarówno USB, FireWire i eSATA), zmień dopasowanie SUBSYSTEMS w regule udev na
SUBSYSTEMS=="scsi"
.Pamiętaj jednak, że to automatycznie zamontuje prawie wszystko, w tym dyski wewnętrzne, jeśli podłączysz je podczas pracy systemu, więc może nie być to, czego chcesz.
Po drugie, oto skrypt, którego używam, który zastępuje wszystkie skrypty w tym poście. Automatycznie usuwa również utworzone punkty montowania w / media /, gdy tylko zamontowane urządzenie blokowe zostanie usunięte - nie ma potrzeby ręcznej interwencji. Co więcej, zamiast wywoływania innego skryptu, aby działał w tle, umieszcza się w tle, gdy nie jest wykonywany z terminala (np. Gdy jest wykonywany przez udev).
Używa inotifywait, aby poczekać, aż podłączone urządzenie zniknie, a następnie usunie utworzony katalog. Dlatego musisz mieć zainstalowane w systemie narzędzia inotify-tools. W przypadku dystrybucji opartych na Debianie (w tym Ubuntu)
sudo apt-get install inotify-tools
powinno wystarczyć.Zauważysz, że montuję urządzenia bez synchronizacji i tylko do odczytu. To tylko dlatego, że w 99% przypadków mój przypadek użycia jest odczytywany z zewnętrznego dysku, a ilekroć muszę na nim pisać, i tak będę aktywny na serwerze i mogę łatwo wydać
mount -o remount,rw <mountpoint>
polecenie. Edytuj według własnych potrzeb :)źródło
halevt
nie wydaje się być aktualnymapt-get
pakietem dla nowoczesnych wersji.Spróbuj skonfigurować za pomocą mountmanager, aby nie trzeba było ręcznie wprowadzać danych.
Powinien być częścią repozytorium ubuntu.
źródło
Jeśli masz tylko jeden dysk podłączony na raz, możesz po prostu edytować to w swoim
/etc/fstab
pliku. Coś w stylu:Powinno to zamontować go podczas rozruchu i udostępnić każdemu, kto ma perms. Jeśli masz więcej niż jeden dysk, nadal możesz to zrobić za pomocą:
źródło