Automatyczne instalowanie dysków USB (jak to działa)


12

Tło: Próbuję zamontować dysk USB jako tylko do odczytu, ale moja instalacja Ubuntu instaluje go po podłączeniu dysku.

Mogę ręcznie odmontować dysk i zamontować go ręcznie jako tylko do odczytu za pomocą poleceń umount i mount, ale to nie jest zabawne. Czy ktoś mógłby mi szybko wyjaśnić, w jaki sposób podłączenia USB są automatycznie wykonywane w typowym systemie Linux (udev? Tło historyczne też jest fajne) i może w jaki sposób mogę ulepszyć ten proces, aby pozwolić mi odczytać dysk na dysku?

Dzięki.

Edycja: Używam gnome, jeśli to w ogóle pomaga.
Edycja2: W pośpiechu zapomniałem podać trochę więcej informacji. Tak wygląda dysk z wyjścia „mount”.

/dev/sdb1 on /media/LaCie type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)

Edycja3: Może to również być na swój sposób ponownie. W wyjściu mount mam również następujące elementy:

gvfs-fuse-daemon on /home/fletcher/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=fletcher)  

Myślałem, że mogło to być związane z powyższym mocowaniem Fuseblk, ale dowiedziałem się o tym.

Gvfs to wirtualny system plików Gnome. Jest to wirtualny system plików zbudowany na bazie już istniejącego vfs jądra. gvfs korzysta z biblioteki GIO (która jest interfejsem API VFS), aby uzyskać dostęp do plików, urządzeń, zdalnych lokalizacji sieciowych itp. W tym przypadku powyżej („gvfs-fuse-daemon”) gvfs używa FUSE do montowania plików / lokalizacji / urządzeń. Zasadniczo dzieje się to po zamontowaniu zdalnego połączenia sieciowego w Nautilusie. Użyje FUSE, aby zamontować lokalizację (wewnątrz?) Katalogu .gvfs, a następnie komunikuje się z warstwą wirtualnego systemu plików gnome, aby komunikować się z nowym montowaniem.

Zasadniczo ta struktura pozwala użytkownikowi dynamicznie montować nowe lokalizacje i wchodzić z nimi w interakcje za pomocą nautilusa.

Tylko w celach informacyjnych: FUSE to system plików przestrzeni użytkownika, znany też jako umożliwiający uruchamianie montowania, nawet jeśli ten użytkownik nie jest rootem)

Więc gdzie mnie to opuszcza? Cóż, dysk LaCie jest montowany z typem fuseblk. To tylko urządzenie blokowe zamontowane z bezpiecznikiem. Więc jakiś demon automatycznie wykrył dysk, kiedy był podłączony, a następnie poszedł dalej i uruchomił bezpiecznik, aby zamontować moje urządzenie blokowe. Czym więc jest ten demon i jak jest skonfigurowany (domyślam się, że to jakiś wewnętrzny gnom) jest najważniejszym pytaniem. Drugim pytaniem jest, w jaki sposób system automatycznie wykrył nowo włożony dysk USB, ale myślę, że jest to trochę na bok i znacznie niższy poziom tutaj (czytaj: udev?).

Spinki do mankietów:


czy jest wpis fstab dla systemu plików / media / LaCie i / lub urządzenia / dev / sdb1? Czy mimo to / dev / sdb1 jest w ogóle oznaczony (e2label / dev / sdb1)?
Tok

Nie, nie ma wpisu fstab. Wierzę, że jest oznaczony, gdy jest montowany w / media / LaCie. Musiałbym zainstalować ntfslabel na pewno się dowiem, ale zaraz wyjdę z pracy. Pojawia się również na moim pulpicie jako LaCie.
myśliciel

Odpowiedzi:


3

Próbowałem to zrobić na komputerze i to działa :)

Najpierw otrzymuję nazwę mojego urządzenia:

ls -l /proc/disk/by-id/

W moim przypadku jest to / proc / disk / by-id / usb-09a6_8001

Dodałem tę linię do / etc / fstab:

/dev/disk/by-id/usb-09a6_8001   /media/macle ext2 ro,users 0 2

I działa, kiedy podłączę mój usbkey, jest on zamontowany ro i jest własnością mojego użytkownika.


Dzięki profy :) Ale głównym celem mojego pytania jest złagodzenie skrajnej frustracji, którą odczuwam za każdym razem, gdy jestem zmuszony zrozumieć, jak działają automount i urządzenia USB. Jestem tutaj, aby rozszyfrować magię stojącą za tymi złożonymi systemami. Poza tym korzystanie z urządzeń fstab i usb jest nieco trudne, ponieważ nie zawsze gwarantuje się, że zostaną podłączone podczas uruchamiania!
myśliciel

1
Nie wiem, jak to działa, ale jestem prawie pewien, że nowe urządzenia są wykrywane przez reguły udev, spójrz na /etc/udev/rules.d/ i na /lib/udev/rules.d/.
profy


2

Jak powiedział Ulrich Dangel, w dzisiejszych czasach referencje powinny być udisk. Nie widziałem jeszcze, jak jest powiadamiany (udev-> dbus-> udisks?), Ale ręcznie można go użyć do zamontowania urządzenia z potrzebnymi opcjami.

Udisks rozmawia z polkit, aby zobaczyć, co użytkownik może zrobić z woluminami. Zgaduję tutaj, ale jeśli moglibyśmy znaleźć miejsce do ustawienia właściwości dla nazwanego dysku / urządzenia, powinno ono działać.

Korzystając z udisksctl, użytkownik powinien mieć możliwość zamontowania urządzenia za pomocą potrzebnych opcji, takich jak to:

udisksctl mount -b / dev / sdxy -o ro / mountpoint

Jednak nie wiem, gdzie umieścić opcje.

AKTUALIZACJA: Po sugestiach Ulricha poszedłem do narzędzia dyskowego Gnome i osiągnąłem to, czego potrzebujesz, ale nie jestem pewien, czy jest to najbardziej eleganckie rozwiązanie, czy nie. Używam Kororaa 17 (opartego na Fedorze 17) z Cinnamon + Gnome3, poszedłem do narzędzia „Dyski” i zmodyfikowałem opcje montowania dla mojego napędu USB, dodałem „ro” i zapisałem.

Dodaje wpis do fstab (tam nie uważam go za eleganckie rozwiązanie, myślę, że powinien on pozostać jako konfiguracja użytkownika, a nie systemowa), podłączam dysk i jest on montowany automatycznie w wybranym punkcie montowania z opcjami Zapisałem w narzędziu Dyski Gnome.


Co masz na myśli mówiąc o tym, że jest powiadamiany? Czego brakuje?
Ulrich Dangel

I nie jest to udev→dbus→udiskjednakudev/uevent→udisk→dbus
Ulrich Dangel

Miałem na myśli, że nie byłem do końca pewien i chciałem to zweryfikować, ale teraz widzę, że nie byłem w 100% w błędzie.
trzykrotnie

[strike] Proszę pokazać linię, która została dodana do fstab. Chciałbym potwierdzić, co myślę. [/ Strike] Więc linia fstab pasuje do odpowiedzi @ profy? tzn. z roopcją.
inwertowanie

-1

Na temat tego, jak jądro wykrywa sprzęt, oto bardzo fajny artykuł na temat tego, co się dzieje .

W podsumowaniu:

  • jądro stale skanuje magistrale komputera i mapuje urządzenia do wirtualnego systemu plików, zwykle pod /sys/.
  • jądro wysyła komunikat, że nowy sprzęt jest dostępny dla udev, który:
    • Przetwarzaj reguły udev na urządzeniu
    • dowiązanie symboliczne do /dev/
    • ładować sterowniki urządzeń
    • powiadom przestrzeń użytkownika urządzenia za pomocą dbus

W tym momencie urządzenie jest gotowe do użycia przez przestrzeń użytkownika. Gvfs i FUSE są systemami plików przestrzeni użytkownika.


Nie, udevzwykle nie powiadamia aplikacji za pośrednictwem aplikacji dbuspodmiotów zewnętrznych. Jeśli użyjesz qdbus --system, nie zobaczysz żadnych nazw udev. Zazwyczaj aplikacje po prostu subskrybują się ueventslub wysyłają własne reguły
Ulrich Dangel

Dzięki za zwrócenie na to uwagi @ulrich. Moje streszczenie zawiera bardzo podstawowy zarys, z wyłączeniem wielu kroków pośrednich. Zobacz link do szczegółowego opisu.
inwertowany

2
artykuł jest również fałszywy, ponieważ zwykle nie jest wymagane badanie w celu monitorowania autobusów
Ulrich Dangel
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.