J'ai un serveur Ubuntu 12.04 qui exporte quelques systèmes de fichiers sur NFS.
server$ cat /etc/exports
/home 192.168.42.0/255.255.255.0(rw,anonuid=65534,anongid=65534,async,no_subtree_check)
/stuff 192.168.42.0/255.255.255.0(rw,anonuid=65534,anongid=65534,async,no_subtree_check)
/stuff 192.168.99.0/255.255.255.0(ro,anonuid=65534,anongid=65534,async,no_subtree_check)
J'ai aussi un client qui les monte:
client$ cat /etc/fstab
...
server:/home /home nfs hard,intr,rsize=8192,wsize=8192,_netdev 0 0
server:/stuff /server/stuff nfs hard,intr,rsize=8192,wsize=8192,_netdev 0 0
L'adresse IP du client est comprise dans la plage 192.168.42.x. Il fonctionnait Ubuntu 10.04 jusqu'à hier. NFS a bien fonctionné, plus ou moins (parfois, il ne fonctionnait pas automatiquement au démarrage, mais j'avais un script cron pour détecter et résoudre ce problème).
J'ai mis à jour le client vers Ubuntu 12.04 hier et je l'ai redémarré. NFS a continué à bien fonctionner.
J'ai mis à jour le client vers Ubuntu 14.04 aujourd'hui et je l'ai redémarré. Maintenant, NFS est monté mais toutes les informations de propriété de fichier ne sont mappées à personne: 4294967294:
client$ ls -ld /home/weblate
drwxr-xr-x 5 nobody 4294967294 4096 Jan 29 2014 weblate
Pourquoi est-ce cela et que dois-je faire pour que la propriété de fichier fonctionne à nouveau?
L'indice essentiel est apparu dans /var/log/syslog
:
Sep 16 13:11:07 client nfsidmap[7340]: nss_getpwnam: name 'www-data@lan' does not map into domain 'localdomain'
combiné avec cet extrait de NFSv4Howto
Si toutes les listes de répertoires affichent uniquement "personne" et "nogroupe" au lieu de vrais noms d'utilisateurs et de groupes, vous pouvez vérifier le paramètre de domaine défini dans /etc/idmapd.conf. Le client et le serveur NFSv4 doivent appartenir au même domaine.
et ce commentaire dans /etc/idmap.conf
:
# set your own domain here, if id differs from FQDN minus hostname
# Domain = localdomain
Donc, mon serveur pense que son domaine est lan
:
server$ hostname -f
server.lan
server$ grep server /etc/hosts
127.0.1.1 server.lan server
alors que mon client n'avait pas de domaine:
client$ hostname -f
client
client$ grep client /etc/hosts
127.0.1.1 client
Le correctif: éditez /etc/hosts
sur le client à lire
127.0.1.1 client.lan client
et redémarrez.
J'ai résolu mon problème par cette méthode. Ouvrez le fichier /etc/nfsmount.conf
et recherchez Nfsvers=
.
Décommentez cette ligne et écrivez la version NFS prise en charge par votre serveur. La mienne avait 3 ans alors j'ai écrit:
Nfsvers=3
J'ai redémarré le serveur NFS.