Jak montujesz -bind lokalny katalog?

16

W Linuksie jedną z wielkich rzeczy, które możesz zrobić (w szczególności dla programistów) było zamontowanie folderu i lokalne powiązanie go z innym folderem w systemie.

Miało to przewagę nad dowiązaniami symbolicznymi, ponieważ narzędzia takie jak Git nie wykryły, że jest to inny typ węzła i nie trzeba było usuwać oryginalnej zawartości. Gdy skończysz, możesz po prostu odmontować i pozostanie oryginalna zawartość systemu plików.

Jednak mount -bindczy mount.localnie wydaje się istnieć na Mac (od OS X 10.10.2, Yosemite).

Jak sobie z tym radzisz?

Qix - MONICA BYŁA TŁUMACZONA
źródło

Odpowiedzi:

10

Jak wspomniano przez innego użytkownika na StackOverflow , możesz użyć do tego podłączenia NFS. Wymaga to jednak trochę jednorazowej konfiguracji.

Najpierw musisz skonfigurować /etc/exportsplik (jeśli jeszcze tego nie zrobiłeś).

$ sudo tee -a /etc/exports <<< "/ -alldirs -mapall=$USER localhost"

Po drugie, trzeba rozpocząć z RPC i nfsd usług.

$ sudo launchctl start com.apple.rpcbind
$ sudo nfsd start

Stamtąd daj trochę NFSd, aby się obudził i zjadł śniadanie, a powinieneś być w stanie zamontować:

$ sudo mount localhost:/path/to/target ./mnt

Aby przywrócić oryginalną zawartość, po prostu zrób

$ sudo umount ./mnt
Qix - MONICA BYŁA TŁUMACZONA
źródło
Próbowałem zamontować mój exfat dysk USB$ sudo mount localhost:/Volumes/Aren/Movies /Users/me/Movies/
Necktwi
mount_nfs: can't mount /Volumes/Aren/Movies from localhost onto /Users/me/Movies: No such file or directory
Necktwi
Działa dobrze, jeśli zrobię to w inny sposób!
Necktwi
Jeśli pojawi się komunikat „Brak takiego pliku lub katalogu”, spróbuj najpierw utworzyć folder, w którym ma zostać zamontowany folder docelowy. Jeśli pojawi się błąd „Odmowa zezwolenia”, spróbuj „sudo nfsd restart” (dla mnie nfsd już się uruchomił, więc myślę, że trzeba go zrestartować, aby odebrać nową linię eksportu, myślę)
Nick
1
@JayGee Jestem OP. W tym czasie zadziałało dla mnie, jaki błąd ma Git? Czy cdwyszedłeś, a potem wróciłeś przed użyciem Git? Powłoki mają tendencję do pracy z deskryptorami plików, które są powiązane z i-węzłami, a nie pełnymi ścieżkami łańcucha - więc jeśli montujesz i pozostajesz w „tym samym” katalogu, powłoka będzie nadal działać przy użyciu katalogu bazowego zamiast katalogu zamontowanego. Nie ma powodu, dla którego Git powinien widzieć wszystko jako zamontowane - montowanie tak nie działa. Dla wszystkich celów i celów jest to ten sam typ systemu plików.
Qix - MONICA MISTREATED
10

Jest jeszcze jedna opcja - bindfs . Wymaga zainstalowania FUSE, ale stanowi alternatywę dla korzystania z NFS.

Być może będziesz musiał skompilować ze źródła, ale widzę, że jest on również dostępny w MacPorts .

mjturner
źródło
2
Homebrew: Install osxfuse , następnie brew install homebrew/fuse/bindfs(Testowane na El Capitan, nie ma potrzeby sudo, zanim bindfsdla wierzchowców zorientowanych na użytkownika)
dhchdhd
Wadą bezpiecznika jest to, że nie obsługuje on zdarzeń inotify. Jeśli źródło zostanie zaktualizowane, podczas gdy aplikacja będzie szukała aktualizacji w miejscu docelowym, nie będzie otrzymywać aktualizacji.
diimdeep
Jest to również trochę nieporadne dla mnie podczas kompilowania rzeczy w woluminie bindfs. W szczególności stale otrzymuję „zbyt wiele otwartych plików” dla jednego konkretnego projektu w Xcode bez wyraźnego powodu. Jeśli po prostu skopiuję zawartość bez montowania, kompilacja się powiedzie.
Grishka,