Czy są jakieś wady stosowania mount --bind jako zamiennika dowiązań symbolicznych?


55

Dowiązania symboliczne mają ograniczenia w sposobie, w jaki funkcje takie jak ls, mvi cpmogą na nich działać, ponieważ w przeciwieństwie do poleceń inicjowanych przez powłokę cd, takie funkcje nie mają informacji o tym, w jaki sposób użytkownik uzyskał dostęp do katalogu w odniesieniu do ścieżki logicznej (patrz powiązany post ). Wygląda na to, że użycie mount --bindopcji zamiast tego pozwala obejść ten problem, oferując zwiększoną funkcjonalność i kompatybilność z sambą i innymi serwerami plików, ponieważ wtedy podłączony katalog będzie miał dwie niezależne ścieżki fizyczne zamiast łącza.

Chciałbym zastąpić wszystkie moje dowiązania symboliczne referencjami, używając tej mount --bindopcji, ale oznaczałoby to zamontowanie ponad 150 punktów w fstab. Czy są jakieś problemy z wydajnością, które mogą wynikać z tej lub innych wad, które powinienem wziąć pod uwagę?


Czy zastanawiałeś się nad użyciem twardych linków ?
ire_and_curses

1
@ire_and_curses Większość systemów uniksowych zabrania twardych linków z dobrych powodów (i z tych samych powodów, praktycznie nigdy nie powinieneś ich używać nawet w systemach, w których możesz).
Eliah Kagan

3
@ire_and_curses: Aby wyjaśnić oświadczenie Eliasza, nie można utworzyć twardego łącza do katalogu (chociaż w pewnym sensie HFS + je obsługuje). A utworzenie rekurencyjnego drzewa twardych linków nie utrzymuje synchronizacji obu ścieżek katalogów.
bahamat

Odpowiedzi:


62

Z mount --bind, drzewo katalogów istnieje w dwóch (lub więcej) miejscach w hierarchii katalogów. Może to powodować szereg problemów. Kopie zapasowe i inne kopie plików wybiorą wszystkie kopie. Trudno jest określić, że chcesz skopiować system plików: ostatecznie skończysz kopiowanie plików podłączonych do wiązania. Wyszukiwania z find, grep -r, locate, itd., Będą przechodzić wszystkie kopie, i tak dalej.

Nie uzyskasz żadnej „zwiększonej funkcjonalności i kompatybilności” z mocowaniami powiązań. Wyglądają jak każdy inny katalog, który przez większość czasu nie jest pożądanym zachowaniem. Na przykład Samba domyślnie udostępnia łącza symboliczne jako katalogi; nie ma nic do zyskania dzięki zastosowaniu oprawki do wiązania. Z drugiej strony montowanie powiązań może być przydatne do ujawnienia hierarchii katalogów w systemie plików NFS.

Nie będziesz mieć żadnych problemów z wydajnością z mocowaniami łączenia. Będziesz miał bóle głowy związane z administracją. Montowania Bind mają swoje zastosowania, takie jak udostępnianie drzewa katalogów z chroota lub ujawnianie katalogu ukrytego przez punkt montowania (zwykle jest to przejściowe zastosowanie podczas przebudowy struktury katalogów). Nie używaj ich, jeśli nie potrzebujesz.

Tylko root może manipulować oprawami bindowania. Nie można ich przenosić zwykłymi środkami; blokują swoją lokalizację i katalogi przodków.

Ogólnie rzecz biorąc, jeśli przekazujesz dowiązanie symboliczne do polecenia, polecenie działa na samo łącze, jeśli działa na plikach, i na cel łącza, jeśli działa na zawartości pliku. Dotyczy to również katalogów. Zazwyczaj jest to właściwa rzecz. Niektóre polecenia mają możliwości leczenia dowiązania symboliczne w inny sposób, na przykład ls -L, cp -d, rsync -l. Cokolwiek próbujesz zrobić, jest znacznie bardziej prawdopodobne, że dowiązania symboliczne są właściwym narzędziem, niż łączenie oprawek jest właściwym narzędziem.


Dzięki. Chyba nie zastanawiałem się nad wpływem na kopie zapasowe, kopie i wyszukiwanie plików. Udało mi się zmusić Sambę do podążania za dowiązaniami symbolicznymi, dodając „follow symlinks = yes” w smb.conf, ale zagraża to bezpieczeństwu, ponieważ każdy użytkownik samby może wykonać powiedzenie „ln -s / etc” w folderze do zapisu i zyskać dostęp do plików systemowych. Próbuję znaleźć sposób na obejście tego. Daj mi znać, jeśli znasz jeden.
mrtrujiyo

2
@mrtrujiyo W przypadku tego wymogu myślę, że sensowne byłoby uruchomienie serwera samba w chroot i podłączenie katalogów, które chcesz wyeksportować do tego chroota. Pamiętaj, aby wykluczyć katalog główny chroot z kopii zapasowych i tak dalej (w tej organizacji musisz tylko wykluczyć jeden katalog najwyższego poziomu, aby nie było zbytniego bólu głowy związanego z konserwacją).
Gilles 'SO - przestań być zły'

14

Oprócz tego, co wcześniej napisał @Gilles , warto zauważyć, że niektóre narzędzia mogą uznać katalog podłączony za odrębny system plików. Może to mieć wpływ na wydajność lub funkcjonalność, jeśli program nie może dłużej zakładać, że ten sam numer i-węzła odnosi się do tego samego pliku (czego nie ma, jeśli są w różnych systemach plików), nie można zoptymalizować ruchu jako link-at- źródło-następnie-odłącz-źródło itp.


Dzięki. Zastanawiałem się, jak proste narzędzia takie jak df i du poradzą sobie z obliczeniami wielkości katalogów w systemach plików z mocowaniami powiązań.
mrtrujiyo

1
Przynajmniej GNU dfw moim systemie domyślnie nawet nie bierze pod uwagę katalogów podłączonych, ale jeśli zostaniesz o to poproszony, jest traktowany jako kolejne podłączenie tego samego systemu plików. (Które, jeśli mnie zapytacie, jest oczekiwanym zachowaniem narzędzia do celów df.)
CVn

6

Powinieneś także chcieć używać montowań powiązań zamiast dowiązań symbolicznych, gdy polegasz na wsparciu, które nie zawsze może być na miejscu (na przykład dysk zewnętrzny) i chcesz mieć pewność, że oryginalna struktura katalogów istnieje, nawet jeśli wsparcie zawiedzie lub zostanie usunięty.

Na przykład, jeśli chcę zachować / var / tmp na karcie SD, skorzystam z mount bind, ponieważ niektóre programy oczekują, że katalog / var / tmp będzie prawidłowy, nawet jeśli karta zostanie usunięta.


1

Próbowałem powiązać mount, aby obejść problem z instalacją niektórych pakietów z pacman(archlinux, więcej o tym tutaj ) w systemie, w którym /var(oraz /homei /usr/local) były dowiązaniami symbolicznymi (między systemami plików: SSD do SATA).

Wyglądało to świetnie na początku, ale jak zauważył Gilles, locatezawsze dawał wiele wyników dla jednego pliku, mimo PRUNE_BIND_MOUNTS = "yes"linii /etc/updatedb.conf.

$ locate \*/findutils-4.4.2 | xargs ls -ldiog
33816600 drwxr-xr-x 12 4096 Dec  3 00:05 /SHARED/LOCALS/Manjaro/src/findutils-4.4.2
33816600 drwxr-xr-x 12 4096 Dec  3 00:05 /usr/local/src/findutils-4.4.2

Kopiąc trochę dalej, odkryłem, że bardziej złożone mocowania wiązania mogą być przycinane poprawnie:

$ sudo mount --bind /SHARED/LOCALS/common/ /usr/local/common
$ findmnt | fgrep -n sdb
34:├─/SHARED/LOCALS                  /dev/sdb5           ext4           rw,relatime,data=ordered
35:│ └─/SHARED/LOCALS/Manjaro/common /dev/sdb5[/common]  ext4            rw,relatime,data=ordered
36:├─/usr/local                      /dev/sdb5[/Manjaro] ext4            rw,relatime,data=ordered
37:│ └─/usr/local/common             /dev/sdb5[/common]  ext4            rw,relatime,data=ordered
38:├─/SHARED/HOMES                   /dev/sdb4           ext4            rw,relatime,data=ordered
39:├─/home                           /dev/sdb4[/Manjaro] ext4            rw,relatime,data=ordered
40:├─/SHARED/VARS                    /dev/sdb3           ext4            rw,relatime,data=ordered
41:├─/var                            /dev/sdb3[/Manjaro] ext4            rw,relatime,data=ordered
42:└─/opt                            /dev/sdb5[/opt]     ext4            rw,relatime,data=ordered

$ sudo updatedb --debug-pruning 2>&1 >/dev/null | grep bind
prune_bind_mounts\000
Rebuilding bind_mount_paths:
Matching bind_mount_paths:
Skipping `/SHARED/LOCALS/Manjaro/common': bind mount
Skipping `/usr/local/common': bind mount

$ locate \*/mmedia
/SHARED/LOCALS/common/mmedia

Bez opcji PRUNE_BIND_MOUNT uzyskałbym 3 wyniki:

$ sudo sed -i '1 s/yes/no/' /etc/updatedb.conf 
$ sudo updatedb --debug-pruning 2>&1 >/dev/null | grep bind
prune_bind_mounts\000
$ locate \*/mmedia
/SHARED/LOCALS/Manjaro/common/mmedia
/SHARED/LOCALS/common/mmedia
/usr/local/common/mmedia
$ sudo sed -i '1 s/no/yes/' /etc/updatedb.conf 

Kolejny problem z mocowaniami powiązań:

Oczywiście można ręcznie dodawać uchwyty powiązań (mounpoint lub target) do PRUNEPATHSin /etc/updatedb.conf.

Ponadto, mountpointróżne narzędzia statlub funkcje mogą być używane w narzędziach do poprawy przejścia systemu plików, jak tutaj zaproponowano

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.