¿Cómo se monta-enlaza un directorio local?

16

En Linux, una de las mejores cosas que podía hacer (para los desarrolladores, en particular) era montar una carpeta y vincularla localmente a otra carpeta en el sistema.

Esto tenía la ventaja sobre los enlaces simbólicos debido a que las herramientas de hecho como Git no lo detectaron como un tipo diferente de nodo, y no era necesario eliminar el contenido original. Cuando termines, puedes desmontar y quedarte con el contenido original del sistema de archivos.

Sin embargo, mount -bindo mount.localno parece existir en Mac (a partir de OS X 10.10.2, Yosemite).

¿Cómo haces esto?

Qix - MONICA FUE MALTRATADA
fuente

Respuestas:

10

Como lo mencionó otro usuario en StackOverflow , puede usar un montaje NFS para hacer esto. Sin embargo, requiere un poco de configuración única.

Primero, deberá configurar un /etc/exportsarchivo (si aún no lo ha hecho).

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

En segundo lugar, deberá iniciar los servicios rpc y nfsd .

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

A partir de ahí, dele a NFSd un poco para despertarse y desayunar, y debería ser bueno para montar:

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

Para restaurar el contenido original, solo haz

$ sudo umount ./mnt
Qix - MONICA FUE MALTRATADA
fuente
Traté de montar mi unidad usb $ sudo mount localhost:/Volumes/Aren/Movies /Users/me/Movies/
exfat
mount_nfs: can't mount /Volumes/Aren/Movies from localhost onto /Users/me/Movies: No such file or directory
Necktwi
Funciona bien si lo hago de otra manera!
Necktwi
Si aparece "No existe tal archivo o directorio", intente crear primero una carpeta para montar en el destino. Si obtiene un error de "Permiso denegado", intente "sudo nfsd restart" (para mí, nfsd ya se inició, por lo que necesité reiniciar para recoger la nueva línea de exportaciones, creo)
Nick
1
@ JayGee, soy OP. Me funcionó en ese momento, ¿qué error tiene Git? ¿Has cdsalido y luego entras antes de usar Git? Los shells tienden a funcionar con descriptores de archivos que están vinculados a inodos, no a rutas de cadena completas, por lo que si monta y permanece en el "mismo" directorio, el shell seguirá funcionando usando el directorio subyacente en lugar del montado. No hay razón para que Git vea algo montado, el montaje no funciona así. Para todos los efectos, es el mismo tipo de sistema de archivos.
Qix - MONICA FUE MAL TRATADA el
9

Hay otra opción: bindfs . Requiere que instale FUSE, pero proporciona una alternativa al uso de NFS.

Es posible que necesite compilar desde la fuente, pero veo que también está disponible en MacPorts .

mjturner
fuente
2
Homebrew: Instale osxfuse , luego brew install homebrew/fuse/bindfs(Probado en El Capitan; no es necesario sudoantes bindfspara montajes orientados al usuario)
dhchdhd
La desventaja del fusible es que no admite eventos de inotify. Si la fuente se actualizó, mientras la aplicación busca actualizaciones en el destino, no recibirá actualizaciones.
diimdeep
También es un poco raro para mí compilar cosas dentro de un volumen bindfs. En particular, constantemente obtengo "demasiados archivos abiertos" para un proyecto en particular en Xcode sin razón aparente. Si solo copio el contenido sin montar, se construye bien.
Grishka