OSX: Bloqueio no vagrant com o convidado do Ubuntu usando o NFS não funciona

6

No OSX 10.10.3 usando o VirtualBox 4.3.26 e o vagrant 1.7.2 ao usar o NFS para a pasta compartilhada em um convidado do Ubuntu 14.04 LTS, o aplicativo PHP no convidado tentando usar o LOCK_EX na pasta compartilhada simplesmente bloqueia para sempre (ou : muito tempo para ser utilizável).

Essa configuração costumava funcionar por meses. Cerca de dois dias atrás, após um host inicializar a máquina do Vagrant, ela ficou inutilizável e, desde então, uma nova compilação dessa VM exibe esse problema (talvez o problema inicial já estivesse relacionado a isso).

Nenhum novo software foi instalado nos últimos dias. A atualização do OSX foi realizada por volta da semana passada, mas tudo nessa máquina continuou funcionando.

Após uma longa pesquisa, descobrimos que o culpado é a pasta compartilhada do NFS. Nós estávamos usando essa linha há muito tempo:

config.vm.synced_folder ".", "/vagrant", type: nfs

Um strace no convidado é assim:

[pid 26767] open("/vagrant/some/file", O_RDWR|O_CREAT, 0666) = 5
[pid 26767] fstat(5, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
[pid 26767] lseek(5, 0, SEEK_CUR)      = 0
[pid 26767] chmod("/vagrant/some/file", 0777) = 0
[pid 26767] flock(5, LOCK_EX

ele trava neste momento. Eu mesmo poderia reproduzi-lo com:

<?php
$f = fopen('lock.test', 'w');
echo "Trying to get lock on file ...\n";
var_dump(flock($f, LOCK_EX));
echo "Got lock, unlocking\n";
var_dump(flock($f, LOCK_UN));
echo "Exiting\n";

Como infelizmente esperado, ficou na primeira linha flock .

Eu verifiquei o sistema /etc/expoerts e verifiquei se era um arquivo limpo sem sobras quebradas / antigas depois que a VM foi encerrada.

A mesma configuração em outro 10.10.3 com outro software idêntico funciona sem problemas (embora um hardware um pouco diferente). Eu criei a VM nesse outro hardware várias vezes ao dia e tudo funciona conforme o esperado.

Obviamente, devido à perda de desempenho, é absolutamente desejável que o NFS funcione corretamente novamente (não usar a pasta compartilhada atualmente não é uma opção).

    
por mark 29.04.2015 / 19:02

1 resposta

2

Eu tive exatamente o mesmo problema. Eu li em algum lugar que a mudança para as seguintes opções resolveu seus problemas:

config.vm.synced_folder ".", "/vagrant", mount_options: ["rw", "tcp", "nolock", "noacl", "async"], type: "nfs", nfs_udp: false

Para mim, tudo o que precisei fazer foi restringir isso à seguinte opção:

mount_options: ["nolock"]

Então sua linha deve ser parecida com:

config.vm.synced_folder ".", "/vagrant", mount_options: ["nolock"], type: "nfs"
    
por 08.08.2016 / 11:20