2010-12-06 100 views
0

Lors du montage d'un système de fichiers NFS, toutes les opérations de traitement des données passent par le client nfs. Comment puis-je écrire mes propres gestionnaires pour utiliser autre chose que NFS?Solaris: Montage d'un système de fichiers sur les gestionnaires d'une application

Une alternative serait un serveur NFS localhost mais que les coutures terriblement inefficaces

Modifier

Exemple de ce qui devrait arriver

Normalement avec un système de fichiers que vous obtenez: app lecture/écriture système de fichiers, Solaris voit où il est monté et s'il s'agit d'un disque, il lit/écrit le disque. Si c'est un logiciel miroir, il lit et écrit dans le logiciel miroir. Si c'est NFS, il lit et écrit sur un serveur NFS distant. Je veux qu'il lise et écrive à un logiciel de stockage personnalisé au lieu de l'une des options mentionnées ci-dessus. Notre logiciel de stockage sert à stocker les fichiers utilisés par les applications. Il est destiné à des blocs de données volumineux ou remplacés fréquemment qui ne sont pas stockés dans une base de données. Cela inclut également une certaine flexibilité spécifique à notre entreprise.

Les applications anciennes/existantes ne connaissent pas notre nouveau logiciel. Tout ce qu'ils savent faire est de lire/écrire un répertoire. Nous pouvions dire à Solaris que le répertoire était hébergé sur NFS et que le serveur NFS traduisait et se connectait au logiciel de stockage. Nous préférerions parler à Solaris de notre nouveau programme dont Solaris n'a jamais entendu parler, puis enseigner à Solaris comment parler à notre programme.

+0

Vous voulez une application de parler directement à un serveur NFS? Est-ce ce que vous demandez? Une raison particulière pourquoi? –

+0

Je voudrais un moyen d'intercepter les données des applications existantes qui utilisent des fichiers/système de fichiers. Le client NFS est juste un exemple. Je pourrais écrire un serveur NFS et le monter de cette façon, mais le but principal est de monter des données, pas de parler à NFS. –

+1

Pouvez-vous fournir des exemples concrets de ce que vous attendez et expliquer pourquoi un serveur NFS localhost ferait le travail mais d'une manière inefficace? – jlliagre

Répondre

0

Vous voudrez peut-être regarder certains serveurs CIFS. Alfresco a JCIFS, qui est une bibliothèque de serveurs CIFS en Java. Il vous permet de présenter les ressources sous forme de fichiers, comme si elles se trouvaient sur un système Windows. Cela signifie que les programmes peuvent "monter" ces serveurs CIFS et que vous pouvez publier des données à partir de votre base de données via ce mécanisme.

Je ne l'ai pas utilisé, mais cela ressemble à ce que vous voulez faire et peut-être quelque chose que vous pourriez vouloir regarder.

Il y a aussi FUSE qui vous permet de créer des systèmes de fichiers personnalisés en "mode utilisateur" plutôt que d'avoir à pirater le noyau. Cela fonctionne sur Unix et Mac OS, il peut y avoir une version de Windows aussi bien. Cela peut, en théorie, faire n'importe quoi. Par exemple, il existe des instances qui vous permettent de monter un système distant sur SSH à l'aide d'un système FUSE. Ceux-ci ont tendance à être écrits en C/C++.

+0

Nous n'utilisons pas Windows .... Pour des raisons évidentes. [FUSE] (http://fuse.sourceforge.net/) a l'air très intéressant. Bien mieux que d'écrire un serveur de traduction NFS: P –

+0

Si vous ne faites pas des choses farfelues au niveau du fichier, Solaris prend totalement en charge le format CIFS, donc vous pouvez toujours considérer les serveurs CIFS. –

1

Pour moi, cela ressemble à ce que vous auriez à créer un système de fichiers pseudo. Solaris utilise VFS (Virtual File System), dans lequel vous pouvez utiliser différents systèmes de fichiers présentés comme une structure uniforme à l'espace utilisateur. Si vous installez un système de fichiers UFS ou NFS ou WHATEVER, les utilisateurs et les applications peuvent utiliser des outils agnostiques du système de fichiers pour interagir avec VFS.

Cela signifie que vous avez besoin de créer un pseudo système de fichiers; un système de fichiers qui gère les opérations vnode et vfs (interface VFS syscall), comme read(), write() etc et les lie, (décide quoi faire quand quelqu'un ouvre un fichier particulier, etc.), à un backend de base de données de votre choix.

En savoir plus:

http://developers.sun.com/solaris/articles/solaris_internals_ch14_file_system_framework.pdf

Sons comme une grande tâche ...

Cordialement, JGR

+0

Avec notre logiciel de stockage de données (un peu comme une base de données mais pas exactement), les applications existantes doivent toutes être réécrites. Mais si nous montons simplement le système de fichiers à un endroit qui est des contrôles de périphériques, alors nous obtenons le meilleur des deux mondes .. Les applications qui utilisent les systèmes de fichiers ne sont pas affectées et ils obtiennent les avantages de notre logiciel de stockage. –

+0

Ok, donc vous avez des applications qui parlent à votre base de données. La base de données écrit dans un système de fichiers via Solaris VFS. Exactement ce que vous avez besoin de faire à nouveau? J'ai toujours peur ... – jgr

+0

J'ai besoin d'un moyen de sauvegarder des fichiers dans ma base de données plutôt que directement sur le disque dur. Mais je ne veux pas avoir à réécrire toutes les applications existantes qui utilisent actuellement le système de fichiers. Je n'utilise pas VFS. –

0

NFS ne concerne pas le montage d'un répertoire sur un logiciel mais le montage d'un partage distant sur un répertoire. Que le périphérique de stockage soit distant ou non importe peu, il est encore à travers les couches du logiciel du noyau. Solaris utilise VFS pour fournir la première couche. Vous devez implémenter le sous-jacent. Ce serait une tâche assez difficile pour quelqu'un qui connaît déjà VFS. Comme vous n'êtes évidemment pas familier avec l'écriture de code de noyau, je serais très pessimiste au sujet de votre projet ...

Ce que je vous suggérerais plutôt serait une approche plus simple et moins risquée. Implémentez une bibliothèque d'interposition qui intercepterait le code d'E/S de l'application (ouvrir, lire, écrire, fermer et j'aime ou peut-être libc fopen, fwrite, vous devez déterminer quel est le meilleur emplacement pour interposer) et appeler votre logiciel de stockage au lieu.

Voici un exemple simple du processus: http://developers.sun.com/solaris/articles/lib_interposers.html