Jaka jest różnica między ln -s a mount --rbind?

8

Jaka jest różnica pomiędzy:

ln -s /mnt/extra/home /

i

mkdir /home
mount --rbind /mnt/extra/home /home
NerdOfLinux
źródło
1
lntworzy linki; w szczególności ln -stworzy dowiązania symboliczne. mountmontuje system plików w katalogu. Nie mają ze sobą nic wspólnego.
AlexP
Ale mount --rbind /mnt/extra/homejest już zamontowanym katalogiem
NerdOfLinux
Postaw to jako odpowiedź, a ja
oznaczę

Odpowiedzi:

13

mount --rbindtworzy rekurencyjne mocowanie binda; oznacza to, że podłączona hierarchia systemu plików /mnt/extra/homebędzie również dostępna przez /home.

W praktyce główna różnica między ln -srozwiązaniem a mount --rbindrozwiązaniem polega na tym, że with ln -s /homejest dowiązaniem symbolicznym, podczas gdy z mount --rbindnim jest katalog; wpływa to narzędzia, takie jak find, df, test/ [etc.

Ponadto ln -szawiedzie, jeśli /homeistnieje, a mount --rbindzawiedzie, jeśli nie istnieje lub nie jest pustym katalogiem.

Ważny jest również komentarz Marka: ln -spotrzebny jest zapisywalny system plików, w którym można utworzyć dowiązanie symboliczne.

AlexP
źródło
7
Duża różnica polega na tym, że ln -smodyfikuje system plików, podczas gdy mount --rbindnie. Oznacza to, że możesz zamontować katalog domowy na katalogu głównym tylko do odczytu (np. Bootowalnym CD), ale nie możesz utworzyć na nim dowiązania symbolicznego.
Mark
3
--bindi --rbindnie dbam o to, czy moje katalogi docelowe są puste, po prostu montują „na wierzchu” dowolnych plików, pozostawiając je niedostępne
Xen2050,
7

W takim przypadku zarówno mocowanie wiązania, jak i dowiązanie symboliczne będą działać podobnie do większości celów, ale mają one istotne różnice.

Łącze symboliczne jest nieco lżejsze. Możesz mieć setki lub tysiące dowiązań symbolicznych bez większego problemu z zarządzaniem. Siedzą w systemie plików, a nie wymagają specjalnej konfiguracji na poziomie systemu.

Łącza symboliczne mogą być archiwizowane i kopiowane poprawnie za pomocą narzędzi takich jak cp i rsync. Oznacza to, że narzędzia mogą rozpoznawać i kopiować dowiązanie symboliczne, zapewniając, że podczas przywracania gdzieś indziej łącze zostanie przywrócone i wskaże poprawne miejsce docelowe. Domyślnie wszystko będzie działać poprawnie. Z drugiej strony, podczas tworzenia kopii zapasowej lub kopiowania oprawy montażowej montaż zostanie potraktowany w sposób przezroczysty, co spowoduje skopiowanie samych plików, co może prowadzić do duplikacji, jeśli otrzymasz te same pliki w ich innej lokalizacji, i wymagać dodatkowej pracy, jeśli chcesz replikacja podłączenia binda w miejscu docelowym.

Dowiązania symboliczne mogą być modyfikowane lub usuwane przez każdego użytkownika, który ma dostęp do łącza, więc łatwo jest ustawić je jako superużytkownika lub otworzyć dla konkretnego użytkownika. Mocowania powiązań mogą być konfigurowane lub modyfikowane tylko przez administratora.

Jeśli to brzmi jak świecące poparcie dla dowiązań symbolicznych, to właśnie tak. Są prostszym sposobem łączenia plików i katalogów. Używałbyś montowań powiązań tylko w sytuacjach, w których dowiązanie symboliczne nie działałoby, co może być mniejszą liczbą sytuacji niż mogłoby się wydawać. Większość narzędzi, w tym narzędzia do tworzenia kopii zapasowych i synchronizacji, mają rozsądne domyślne zachowanie dla dowiązań symbolicznych, a ich traktowanie dowiązań symbolicznych może być konfigurowalne. Mocowania wiązań są przezroczyste dla takich narzędzi, więc tracisz elastyczność i możesz stracić rozsądne zachowanie (na przykład, jak wspomniano powyżej, powielanie katalogów w twoich kopiach zapasowych).

thomasrutter
źródło
0

Jeszcze jedna różnica polega na tym, że dowiązanie symboliczne jest symboliczne , tzn. Odnosi się tylko do ścieżki - ciągu znaków i jest usuwane przy każdym otwarciu podkatalogu / pliku na ścieżce docelowej. Natomiast mount --rbindzachowuje się bardziej jak łącze twarde, dla którego ścieżka nie jest ponownie oceniana przy każdym dereferencji.

To robi różnicę w niektórych scenariuszach, takich jak chroot. Np. Vsftpd chroot s do katalogu domowego konta użytkownika FTP, na które się logujesz. Zatem jeśli umieścisz dowiązanie symboliczne w tym katalogu, vsftpdnie będzie w stanie go wyrejestrować, a zatem cel nie będzie dostępny przez FTP. Jeśli zrobisz to mount --rbind, po vsftpdprostu uzyskasz dostęp do tego poddrzewa tak, jakby rzeczywiście tam było, podobnie jak wtedy, gdy plik został tam na stałe połączony.

Ruslan
źródło