Come si monta -bind una directory locale?


16

In Linux, una delle grandi cose che potresti fare (per gli sviluppatori, in particolare) era montare una cartella e legarla localmente ad un'altra cartella sul sistema.

Ciò ha avuto il vantaggio rispetto ai collegamenti simbolici in quanto strumenti come Git non lo hanno rilevato come un diverso tipo di nodo e non è stato necessario rimuovere il contenuto originale. Quando hai finito, puoi semplicemente smontare e ti rimangono i contenuti del filesystem originale.

Tuttavia, mount -bindo mount.localnon sembra esistere su Mac (a partire da OS X 10.10.2, Yosemite).

Come lo fai?

Risposte:


10

Come accennato da un altro utente su StackOverflow , è possibile utilizzare un mount NFS per farlo. Tuttavia, richiede un po 'di installazione una tantum.

Innanzitutto, dovrai impostare un /etc/exportsfile (se non l'hai già fatto).

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

In secondo luogo, dovrai avviare i servizi rpc e nfsd .

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

Da lì, dai un po 'di NFSd per svegliarti e fare colazione, e dovresti essere bravo a montare:

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

Per ripristinare i contenuti originali, basta fare

$ sudo umount ./mnt

Ho provato a montare il mio exfat drive USB$ sudo mount localhost:/Volumes/Aren/Movies /Users/me/Movies/
Necktwi l'

mount_nfs: can't mount /Volumes/Aren/Movies from localhost onto /Users/me/Movies: No such file or directory
Necktwi,

Funziona bene Se lo faccio nell'altro modo!
Necktwi,

Se ottieni "Nessun file o directory", prova prima a creare una cartella da montare sulla destinazione. Se ricevi un errore "Autorizzazione negata", prova "sudo nfsd restart" (per me, nfsd era già stato avviato, quindi ho dovuto riavviare per ritirare la nuova linea di esportazione, credo)
Nick

1
@JayGee I am OP. Ha funzionato per me al momento, che errore ha Git? Sei cduscito e poi di nuovo dentro prima di usare Git? Le shell tendono a lavorare con i descrittori di file collegati agli inode, non ai percorsi di stringa completi, quindi se montate e rimanete nella "stessa" directory, la shell funzionerà comunque usando la directory sottostante anziché quella montata. Non c'è motivo per cui Git dovrebbe vedere qualcosa come montato - il montaggio non funziona in questo modo. A tutti gli effetti è lo stesso tipo di filesystem.
Qix - MONICA È STATA MISTREATA il

9

C'è un'altra opzione: bindfs . Richiede l'installazione di FUSE ma offre un'alternativa all'utilizzo di NFS.

Potrebbe essere necessario compilare dal sorgente ma vedo che è disponibile anche in MacPorts .


2
Homebrew: installa osxfuse , quindi brew install homebrew/fuse/bindfs(testato su El Capitan; non è necessario sudoprima bindfsper i montaggi orientati all'utente)
dhchdhd

Lo svantaggio del fusibile è che non supporta gli eventi inotify. Se la fonte viene aggiornata, mentre l'app sta cercando aggiornamenti nella destinazione, non riceverà aggiornamenti.
diimdeep,

Inoltre è un po 'complicato per me quando compilo cose all'interno di un volume di bindfs. In particolare ottengo costantemente "troppi file aperti" per un particolare progetto in Xcode senza una ragione apparente. Se copio il contenuto senza montarlo, si costruisce bene.
Grishka,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.