63 votes

inotify avec NFS

J'ai récemment créé un dropbox système à l'aide de inotify, regarder pour les fichiers créés dans un répertoire particulier. Le répertoire que je suis de regarder est monté à partir d'un serveur NFS, et inotify se comporte différemment que je ne l'aurais espérer. Envisagez le scénario suivant dans lequel un inotify script est exécuté sur Une machine, en regardant de /certains/nfs/dir/aussi/visible/de/B.

-À l'aide d'Une machine à créer un fichier dans /certains/nfs/dir/aussi/visible/de/B, le script se comporte comme prévu. L'utilisation de la machine B pour effectuer la même action, le script n'est pas informé d'un nouveau fichier supprimé dans le répertoire.
-Lorsque le script est exécuté sur le serveur NFS, il est notifié lorsque les fichiers sont créés à partir à la fois machine et de la machine B.

Est-ce un bug dans le bug dans le paquet que je suis de l'aide à l'accès inotofy, ou est-ce un comportement attendu?

En ce qui concerne,

Andrew

80voto

IfLoop Points 59461

inotify nécessite la prise en charge du noyau de travailler. Lorsqu'une application utilise un répertoire, il demande au noyau de l'informer lorsque ces changements se produisent. Lorsque le changement se produit, en plus de l'écriture de ces changements sur le disque, le noyau informe également sur l'observation des processus.

Sur un NFS distant de la machine, le changement n'est pas visible pour le noyau; il arrive entièrement à distance. NFS est antérieure à inotify et il n'y a pas de réseau de soutien de niveau dans NFS, ou quelque chose d'équivalent.

Si vous voulez contourner ce problème, Vous pouvez exécuter un service sur le serveur de stockage (depuis le noyau va toujours voir les changements du système de fichiers) que les courtiers inotify demandes pour des machines à distance, et de transmettre les données pour les clients distants.

Edit: Il me semble étrange que NFS doit être mise en cause pour son manque de soutien pour inotify.

NFS (Network File System) est un système de fichiers distribués protocole développé à l'origine par Sun Microsystems en 1984, article de wikipédia

Cependant:

Inotify (inode notifier) est un sous-système du noyau Linux qui sert à étendre les systèmes de fichiers à remarquer des changements au système de fichiers. [...] Il a été inclus dans le réseau principal au noyau Linux depuis la version 2.6.13 (18 juin 2005 ) [...]. article de wikipedia

Il est difficile de s'attendre à un portable protocole réseau/application pour un noyau de la fonction mise au point d'un système d'exploitation différent et qui semblait de plus de vingt ans plus tard. Même si elle n'a inclure des extensions pour elle, ils ne seraient pas disponibles ou utile sur d'autres systèmes d'exploitation.

*accent mis la mienne en tous les cas


Un autre problème avec ce; Permet de supposer que nous ne sommes pas à l'aide d'un réseau à tous, mais plutôt un système de fichiers local avec une bonne inotify support: ext3 (à supposer que sa montée en /mnt/foo). Mais au lieu d'un vrai disque, le système de fichiers est monté à partir d'un périphérique de bouclage ; et le fichier sous-jacent est accessible à un emplacement différent dans la vfs (par exemple, /var/images/foo.img).

Maintenant, vous n'êtes pas censé modifier monté les systèmes de fichiers ext3, Mais il est encore raisonnable de le faire si le changement est pour le contenu du fichier de métadonnées.

Supposons donc que d'un savant de l'utilisateur modifie le système de fichier de l'image (/var/images/foo.img) dans un éditeur hexadécimal, le remplacement d'un fichier de contenu avec quelques autres données, tandis que dans le même temps, un inotify montre est en observant le même fichier sur le système de fichiers monté.

Il n'y a aucun moyen raisonnable on peut l'arranger pour inotify à toujours informer l'observation des processus de ce genre de changement. Bien qu'il existe probablement des fluctuations qui pourraient être prises pour faire ext3 avis et l'honneur de le changer, rien de cela ne s'appliquerait, par exemple, le xfs drtiver, qui est par ailleurs tout à fait similaire.

Ni devrait il. Tu triches!. inotify ne peut vous informer des changements qui se sont produits à travers le vfs au point d'être regardé. Si les changements survenus à l'extérieur que VFS, en raison d'une modification des données sous-jacentes, inotify ne peux pas vous aider, vous et n'est pas conçu pour résoudre ce problème.

Avez-vous envisagé d'utiliser une file d'attente de messages de notification de réseau?

6voto

cmchao Points 46

J'ai trouvé un FAM SGI utilisant un démon superviseur pour surveiller la modification de fichier. Il supporte NFS et vous pouvez voir une description sur le wiki

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X