Pourquoi rename () renvoie-t-il false malgré le déplacement réussi d’un fichier sur un disque monté NFS?

Je reçois un avertissement d’ Invalid argument lors du déplacement d’un fichier d’un disque local vers un disque monté NFS. Le fichier est déplacé avec succès malgré le message d’erreur:

Warning: rename(/tmp/image.jpg,/mnt/remote.server-disk1/image.jpg): Invalid argument

Le disque monté:

 $ df remote.server:/disk1 917G 269M 871G 1% /mnt/remote.server-disk1 

Le disque exporté sur le serveur distant:

 $ cat /etc/exports /disk1 remote.server(rw,sync,root_squash,secure,crossmnt,anonuid=504,anongid=504) 

Le fichier sur le disque local avant de renommer ():

 $ stat /tmp/image.jpg File: `image.jpg' Size: 2105 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 33556339 Links: 1 Access: (0777/-rwxrwxrwx) Uid: ( 501/ apache) Gid: ( 501/ apache) ... 

Le fichier sur le disque distant après renommer ():

 $ stat /disk1/image.jpg File: `image.jpg' Size: 2105 Blocks: 8 IO Block: 4096 regular file Device: 821h/2081d Inode: 34603214 Links: 1 Access: (0777/-rwxrwxrwx) Uid: ( 501/ apache) Gid: ( 501/ apache) ... 

Des idées? Merci

Sous Unix vous ne pouvez pas renommer ou déplacer entre des systèmes de fichiers . Au lieu de cela, vous devez copier le fichier d’un emplacement source vers l’ emplacement de destination , puis supprimer la source. Cela explique le message d’erreur que vous obtenez. Cependant, il semble difficile de savoir pourquoi il fait toujours le déplacement. Cela pourrait être lié aux permissions ou le disque monté NFS est mis en cache localement.

Peut-être que c’est parce que vous faites cela sans citations

rename(/tmp/image.jpg,/mnt/remote.server-disk1/image.jpg);

essayez d’append des devis

rename('/tmp/image.jpg', '/mnt/remote.server-disk1/image.jpg');

Je n’ai pas pu résoudre ce problème, mais copy () et ensuite unlink () ont fonctionné sans erreur.