6 votes

OSX : Le verrouillage de vagrant avec un invité Ubuntu utilisant NFS ne fonctionne pas

Sur OSX 10.10.3 utilisant VirtualBox 4.3.26 et vagrant 1.7.2 lors de l'utilisation de NFS pour le dossier partagé dans un invité Ubuntu 14.04 LTS, l'application PHP dans l'invité essayant d'utiliser LOCK_EX sur le dossier partagé se bloque simplement pour toujours (ou : trop longtemps pour être utilisable).

Cette configuration a fonctionné pendant des mois. Il y a environ deux jours, après un démarrage de l'hôte, la machine Vagrant est devenue inutilisable et depuis lors, une nouvelle version de cette VM présente ce problème (peut-être que le problème initial était déjà lié à cela).

Aucun nouveau logiciel n'a été installé au cours des derniers jours. La mise à jour d'OSX a été effectuée la semaine dernière, mais tout a continué à fonctionner sur cette machine.

Après de longues recherches, nous avons découvert que le coupable était le dossier partagé NFS. Nous utilisions cette ligne depuis longtemps :

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

A strace à l'intérieur de l'invité ressemble à ceci :

[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

il est bloqué à ce stade. J'ai même pu le reproduire moi-même avec :

<?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";

Comme on pouvait malheureusement s'y attendre, il s'est accroché dès le premier flock ligne.

J'ai vérifié le /etc/expoerts et s'est assuré qu'il s'agissait d'un fichier propre, sans résidus cassés ou anciens, une fois la VM éteinte.

La même configuration sur un autre 10.10.3 avec des logiciels identiques fonctionne sans problème (bien que le matériel soit un peu différent). J'ai construit la VM sur cet autre matériel plusieurs fois par jour et tout fonctionne comme prévu.

Il est évident qu'en raison de la perte de performance, il est absolument nécessaire de rétablir le bon fonctionnement de NFS (ne pas utiliser du tout le dossier partagé n'est actuellement pas une option).

2voto

Thijs Riezebeek Points 136

J'ai eu exactement le même problème. J'ai lu quelque part que les options suivantes avaient permis de résoudre le problème :

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

Pour moi, tout ce que j'ai eu à faire, c'est d'ajouter l'option suivante :

mount_options: ["nolock"]

Votre ligne devrait donc ressembler à quelque chose comme :

config.vm.synced_folder ".", "/vagrant", mount_options: ["nolock"], type: "nfs"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X