powiązać montaż tylko do odczytu za pomocą fstab na Ubuntu?

8

Muszę ponownie zamontować jeden katalog (/ src) jako tylko do odczytu w innej lokalizacji (/ dst). Można to zrobić w następujący sposób:

$ sudo mount --bind /src /dst
$ sudo mount -o remount,ro /dst

Chciałbym jednak, /etc/fstababy montowanie odbywało się w czasie rozruchu i widziałem różne sugerowane rozwiązania tego problemu, np

/src  /dst    none  bind            0 0
/src  /dst    none  remount,bind,ro 0 0

co niestety pozostawia zainstalowany katalog do odczytu / zapisu w moim systemie i to

/src  /dst    none  bind            0 0
/dst  /dst    none  remount,bind,ro 0 0

co spowoduje błąd podczas próby zamontowania /dst:

mount: /dst not mounted already, or bad option

Powyższe rozwiązania podobno działają na różnych dystrybucjach, ale niestety nie na Ubuntu 10.04.4 LTS (jądro 2.6.32-41-server).

Jakieś pomysły, jak to osiągnąć, oprócz wprowadzania mountpoleceń /etc/rc.local?

mgd
źródło

Odpowiedzi:

6

W starszych jądrach mount --bindnie można utworzyć widoku tylko do odczytu systemu plików do odczytu i zapisu. Jądro przechowuje status odczytu i zapisu systemu plików w jednym miejscu, które nie jest duplikowane przez podłączenie wiązania. Nowsze jądra na to pozwalają, ale nadal wymagają osobnego mountkroku: najpierw powiąż, a potem ustaw tylko do odczytu. Istnieje łatka na jądro, która to zmienia, a niektóre dystrybucje (takie jak Debian) ją zastosowały, ale Ubuntu nie (przynajmniej od 12.04).

Jednym z rozwiązań jest utworzenie widoku tylko do odczytu ze skryptu rozruchowego zamiast /etc/fstab, jak wyjaśnia Oli .

W przeciwnym razie możesz zamiast tego użyć bindfs . To jest system plików FUSE . Przejście przez BEZPIECZNIK jest nieco wolniejsze, ponieważ wprowadza dodatkową warstwę pośrednictwa. Tracisz także obsługę rozszerzonych metadanych plików, takich jak listy ACL. Z drugiej strony widok tylko do odczytu będzie miał rozpoznawalny typ systemu plików, co ułatwi wykluczenie z przechodzenia przez system plików (takie jak locatei kopie zapasowe).

fstabWpis wygląda następująco:

bindfs#/src  /dst  fuse perms=a=rX
Gilles „SO- przestań być zły”
źródło
6

Zgodnie z tym artykułem LWN , takie zachowanie wkradło się do jądra wokół wersji 2.6.25. Krótko mówiąc, jeśli docelowym systemem plików jest rw, powiązanie czegoś na wierzchu nie może go przekonwertować ro.

W wersji 2.6.26 częściowo naprawili rzeczy, abyś mógł uruchomić remount (jak odkryłeś), ale wciąż nie ma możliwości zrobienia tego z poziomu fstab.


Oto, czego próbowałem w fstab:

/home/oli/Desktop/testmount  /mnt none bind,ro

Po wypalania mount -a, /mntbył zamontowany, ale wciąż mogą tworzyć pliki. Po uruchomieniu strzelanie sudo mount -o remount /mntstało się tylko do odczytu.

Więc tak, myślę, że najczystszą metodą jest albo wejście do linii, /etc/rc.localalbo napisanie super-prostego skryptu Upstart, który zaczyna się na mountallzdarzeniu (więc dzieje się to natychmiast).

Oli
źródło
Przeczytałem również, że mount --bindnie można zmienić mountopcji (tak też napisano na stronie podręcznika dla mount). Dziwne jest to, że wymienione przeze mnie rozwiązania (według innych źródeł) działają na przykład na Fedorze (pierwsze rozwiązanie). Dzięki za pomysł upstart. (BTW, myślę, że drugie „rw” w pierwszym wierszu powinno być „ro”.)
mgd