Comment monter -bind un répertoire local?

16

Sous Linux, l'une des grandes choses que vous pourriez faire (pour les développeurs, en particulier) était de monter un dossier et de le lier localement à un autre dossier du système.

Cela avait l'avantage sur les liens symboliques car les outils tels que Git ne le détectaient pas comme étant un type de nœud différent, et vous n'aviez pas besoin de supprimer le contenu d'origine. Lorsque vous avez terminé, vous pouvez simplement démonter et vous vous retrouvez avec le contenu du système de fichiers d'origine.

Cependant, mount -bindou mount.localne semblent pas exister sur Mac (à partir d'OS X 10.10.2, Yosemite).

Comment procédez-vous?

Qix - MONICA A ÉTÉ MAUVAISE
la source

Réponses:

10

Comme mentionné par un autre utilisateur sur StackOverflow , vous pouvez utiliser un montage NFS pour cela. Cependant, cela nécessite un peu de configuration unique.

Tout d'abord, vous devrez configurer un /etc/exportsfichier (si vous ne l'avez pas déjà fait).

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

Deuxièmement, vous devrez démarrer les services rpc et nfsd .

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

De là, donnez un peu à NFSd pour vous réveiller et prendre le petit déjeuner, et vous devriez être bon à monter:

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

Pour restaurer le contenu d'origine, faites simplement

$ sudo umount ./mnt
Qix - MONICA A ÉTÉ MAUVAISE
la source
J'ai essayé de monter mon lecteur 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
Son bon fonctionnement Si je le fais dans l'autre sens!
Necktwi
Si vous obtenez «Aucun fichier ou répertoire de ce type», essayez de créer d'abord un dossier sur lequel monter sur la destination. Si vous obtenez une erreur "Autorisation refusée", essayez "sudo nfsd restart" (pour moi, nfsd a déjà été démarré, il a donc fallu redémarrer pour récupérer la nouvelle ligne d'export, je pense)
Nick
1
@JayGee je suis OP. Cela a fonctionné pour moi à l'époque, quelle erreur Git a-t-il? Avez-vous cdsorti puis réintégré avant d'utiliser Git? Les shells ont tendance à fonctionner avec des descripteurs de fichiers liés à des inodes, et non à des chemins de chaîne complets - donc si vous montez et restez dans le "même" répertoire, le shell fonctionnera toujours en utilisant le répertoire sous-jacent au lieu du répertoire monté. Il n'y a aucune raison pour que Git voit quoi que ce soit comme monté - le montage ne fonctionne pas comme ça. À toutes fins utiles, il s'agit du même type de système de fichiers.
Qix - MONICA A ÉTÉ BRISÉE le
9

Il existe une autre option - bindfs . Il vous oblige à installer FUSE mais fournit une alternative à l'utilisation de NFS.

Vous devrez peut-être compiler à partir des sources, mais je vois qu'il est également disponible dans MacPorts .

mjturner
la source
2
Homebrew: Installez osxfuse , puis brew install homebrew/fuse/bindfs(Testé sur El Capitan; pas besoin d' sudoavant bindfspour les montures orientées utilisateur)
dhchdhd
L'inconvénient du fusible est qu'il ne prend pas en charge les événements inotify. Si la source est mise à jour, alors que l'application surveille les mises à jour dans la destination, elle ne recevra pas de mises à jour.
diimdeep
C'est aussi un peu bizarre pour moi lors de la compilation de choses dans un volume bindfs. En particulier, je reçois systématiquement "trop ​​de fichiers ouverts" pour un projet particulier dans Xcode sans raison apparente. Si je copie simplement le contenu sans le monter, cela se construit bien.
Grishka