Como você monta -bind um diretório local?

16

No linux, uma das grandes coisas que você poderia fazer (para desenvolvedores, em particular) era montar uma pasta e vinculá-la localmente a outra pasta no sistema.

Isso tinha a vantagem sobre os links simbólicos, pois ferramentas como o Git não o detectaram como um tipo diferente de nó e você não precisou remover o conteúdo original. Quando você terminou, você pode desmontar e ficou com o conteúdo original do sistema de arquivos.

No entanto, mount -bindou mount.localparece não existir no Mac (a partir do OS X 10.10.2, Yosemite).

Como você faz isso?

Qix - MONICA FOI ERRADA
fonte

Respostas:

10

Conforme mencionado por outro usuário no StackOverflow , você pode usar uma montagem NFS para fazer isso. No entanto, requer um pouco de configuração única.

Primeiro, você precisará configurar um /etc/exportsarquivo (se ainda não o fez).

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

Em segundo lugar, você precisará iniciar os serviços rpc e nfsd .

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

A partir daí, dê ao NFSd um pouco para acordar e tomar café da manhã, e você deve montar:

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

Para restaurar o conteúdo original, basta fazer

$ sudo umount ./mnt
Qix - MONICA FOI ERRADA
fonte
Tentei montar o meu exFAT drive 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
Está funcionando bem Se eu fizer o contrário!
Necktwi
Se você obtiver "Não existe esse arquivo ou diretório", tente criar uma pasta para montar no destino primeiro. Se você receber um erro "Permissão negada", tente "sudo nfsd restart" (para mim, nfsd já começaram, assim, que precisava reiniciar para pegar a nova linha de exportações, eu acho)
Nick
1
@JayGee Eu sou OP. Funcionou para mim na época, que erro o Git tem? Você já cdsaiu e voltou antes de usar o Git? Os shells tendem a trabalhar com descritores de arquivos vinculados a inodes, e não a caminhos completos de strings - portanto, se você montar e permanecer no diretório "mesmo", o shell ainda funcionará usando o diretório subjacente em vez do diretório montado. Não há razão para o Git ver algo montado - a montagem não funciona assim. Para todos os efeitos, é o mesmo tipo de sistema de arquivos.
Qix - MONICA FOI ERRADA
9

Há outra opção - bindfs . Requer a instalação do FUSE, mas fornece uma alternativa ao uso do NFS.

Você pode precisar compilar a partir do código-fonte, mas vejo que ele também está disponível no MacPorts .

mjturner
fonte
2
Homebrew: Instalar osxfuse , então brew install homebrew/fuse/bindfs(Testado em El Capitan, sem necessidade de sudoantes bindfspara montagens orientados para o utilizador)
dhchdhd
A desvantagem do fusível é que ele não suporta eventos de inotificação. Se a fonte for atualizada, enquanto o App estiver assistindo a atualizações no destino, ele não receberá atualizações.
precisa saber é o seguinte
Também é um pouco complicado para mim quando compilar coisas dentro de um volume bindfs. Em particular, eu sempre recebo "muitos arquivos abertos" para um projeto específico no Xcode sem motivo aparente. Se eu apenas copiar o conteúdo sem montar, ele ficará bem.
Grishka