¿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?

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

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 .


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.