Próbuję zrozumieć różnicę między używaniem ln -s
a mount --bind
. W podstawowym scenariuszu mogę użyć obu, aby uzyskać dostęp do jednego katalogu z innego miejsca. W jakich scenariuszach ci dwaj będą zachowywać się inaczej?
command-line
mount
symbolic-link
Łukasz
źródło
źródło
rm -r
na zasadziemount --bind
. Przy pomocy aln
usuwa link, podczas gdy dla a--bind
ma taki sam efekt jak uruchomienierm -r
na celu. Nie dobrze, jak znalazłem na krótko przed przebudową jednego z moich serwerów ...Odpowiedzi:
Zachowują się inaczej w co najmniej dwóch przypadkach:
A
), które mająB
zamontowane coś innego ( ). Link pokaże zawartość mount target (B
) zamiast oryginalnego (A
).Ponadto możesz powiązać zamontować katalog lub plik w istniejącym katalogu lub pliku, maskując oryginalną zawartość (czyniąc oryginalną zawartość niedostępną, chyba że oryginał został podłączony w innym miejscu). Link symboliczny wymaga przeniesienia lub usunięcia oryginału.
źródło
Cóż,
ln -s
tworzy dowiązanie symboliczne, podczas gdymount --bind
tworzy wierzchowca.Dowiązanie symboliczne to specjalny typ pliku. Jeśli to zrobisz
ln -s /var/target /var/link
,/var/link
będzie to plik zawierający ścieżkę „/var/target
”. Jedyną różnicą między dowiązaniem symbolicznym a zwykłym plikiem jest to, że gdy program próbuje wykonać operację na dowiązaniu symbolicznym, operacja jest zwykle wykonywana na obiekcie docelowym zamiast pliku. Więc teraz, jeśli to zrobiszls /var/link
,ls
program spróbuje uzyskać listę katalogów dla/var/link
, ale/var/target
zamiast tego dostanie listę katalogów .Dowiązania symboliczne są jednak nadal tylko plikami. Można je zmienić i usunąć, i cały ten jazz. Zauważ, że nie możesz utworzyć dowiązania symbolicznego (lub zwykłego pliku, jeśli o to chodzi) wywoływanego,
/var/link
jeśli istnieje już plik o nazwie/var/link
; najpierw musisz się go pozbyć.Montaż nie jest plikiem; jest to zapis, który jądro przechowuje w pamięci. Jeśli to zrobisz
mount --bind /var/target /var/mount
, jądro zapisze fakt, że/var/mount
teraz jest to nowa nazwa/var/target
. (Nie znam szczegółów; w szczególności nie wiem, czy zamontowanie czegoś w podkatalogu/var/target
sprawi, że również się pojawi/var/mount
, lub dlaczego lub dlaczego nie. Modyfikacje tej odpowiedzi byłyby mile widziane.) Więc teraz jeśli to zrobiszls /var/mount
, stanie się to samo, jakbyś to zrobiłls /var/target
, ponieważ/var/mount
i/var/target
są w tym samym katalogu.Mocowania nie są plikami. Nie wiem, co by się stało, gdybyś próbował zmienić nazwę lub usunąć
/var/mount
. Zauważ, że nie możesz zamontować niczego na,/var/mount
chyba że istnieje już katalog na/var/mount
.źródło
ln -s ../../myfile .
. Jeśli przeniesiesz to do innego katalogu, wskaże to gdzie indziej, ponieważ jest to łącze względne. Może to być przydatne, jeśli chcesz wykonać kopię zapasową poddrzewa i nadal mieć łącza działające w kopii zapasowej.Dodatkowo, ln -s przetrwałoby restart; podczas gdy mount --bind nie zrobiłby tego, chyba że edytujesz / etc / fstab, aby był trwały.
źródło
Oprócz innych odpowiedzi. System nie zezwala na stałe łącze do katalogu:
Mount pozwala ci tworzyć twarde łącza, tj. Dwie lub więcej nazw dla tego samego i- węzła :
(Można znaleźć, że pomaga w tworzeniu kopii zapasowych migawek ze starą wersją rsync.)
Pamiętaj również, że to połączenie nie zostało ukończone:
Tak więc mount jest nadal do odczytu i zapisu, nawet jeśli poprosiłem o opcję ro (tylko do odczytu).
źródło