Solaris: монтирование файловой системы на обработчиках приложения

При монтировании файловой системы NFS вся обработка данных проходит через клиент nfs. Как я могу написать свои собственные обработчики, чтобы использовать что-то кроме NFS?

Альтернативой может быть сервер NFS на локальном хосте, но такой шов ужасно неэффективен

редактировать

Пример того, что должно произойти

Обычно с файловой системой вы получаете: приложение читает / записывает файловую систему, Solaris видит, где оно смонтировано, и если это диск, то оно читает / записывает диск. Если это программное зеркало, оно читает и пишет в программное обеспечение зеркала. Если это NFS, он читает и пишет на удаленный сервер NFS. Я хочу, чтобы он считывал и записывал в пользовательское программное обеспечение для хранения данных вместо любого из вышеупомянутых параметров.

Наше программное обеспечение для хранения предназначено для хранения файлов, используемых приложениями, оно ориентировано на большие или часто заменяемые порции данных, которые не хранятся в базе данных. Это также включает определенную гибкость, характерную для нашей компании.

Старые / существующие приложения не знают о нашем новом программном обеспечении. Все, что они знают, это читать / писать каталог. Мы могли бы сказать Solaris, что каталог был размещен в NFS, а затем сервер NFS транслируется и подключается к программному обеспечению хранилища. Мы бы предпочли рассказать Solaris о нашей новой программе, о которой Solaris никогда не слышал, а затем научить Solaris разговаривать с нашей программой.

3 ответа

Решение

Возможно, вы захотите взглянуть на некоторые серверы CIFS. У Alfresco есть JCIFS, который является библиотекой CIFS-сервера на Java. Это позволяет вам представлять ресурсы в виде файлов, как будто они находятся в системе Windows. Таким образом, это означает, что программы могут "монтировать" эти серверы CIFS, и вы можете публиковать данные из вашей базы данных с помощью этого механизма.

Я не использовал его, но это звучит как то, что вы хотите сделать, и, возможно, то, что вы можете захотеть посмотреть.

Также есть FUSE, который позволяет вам создавать собственные файловые системы в "пользовательском режиме", а не взламывать ядро. Работает на Unix и Mac OS, может быть и версия для Windows. Это может, теоретически, сделать что угодно.

Например, есть экземпляры, которые позволяют вам монтировать удаленную систему через SSH, используя систему FUSE. Как правило, они написаны на C/C++.

Для меня это звучит так, как будто вам нужно создать псевдофайловую систему. Solaris использует VFS (виртуальную файловую систему), в которой вы можете использовать разные файловые системы, представленные как единая структура для пространства пользователя. Когда вы монтируете файловую систему UFS или NFS или WHATEVER, пользователи и приложения могут использовать независимые от файловой системы инструменты для взаимодействия с VFS.

Это означает, что вам нужно создать псевдофайловую систему; файловая система, которая управляет операциями vnode и vfs (интерфейс системного вызова VFS), такими как read(), write() и т. д., и связывает их (решает, что делать, когда кто-то открывает конкретный файл и т. д.), с сервером базы данных на ваш выбор.

Прочитайте больше:

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

Похоже, большая задача...

С уважением, JGR

NFS - это не монтирование каталога в программном обеспечении, а монтирование удаленного общего ресурса в каталоге. Независимо от того, является ли устройство хранения удаленным или нет, это не имеет большого значения, оно все еще проходит через слои программного обеспечения ядра. Solaris использует VFS для предоставления первого уровня. Вы должны реализовать основной. Это было бы довольно сложной задачей для тех, кто уже знаком с VFS. Поскольку вы, очевидно, не знакомы с написанием кода ядра, я был бы очень пессимистичен относительно вашего проекта...

Вместо этого я бы предложил вам сделать более простой и менее рискованный подход. Реализовать библиотеку вставок, которая будет перехватывать код ввода-вывода приложения (открывать, читать, писать, закрывать и т. Д. Или, возможно, libc fopen, fwrite, вам нужно выяснить, какое место лучше всего вставлять) и вызывать программное обеспечение хранилища. вместо.

Вот простой пример процесса: http://developers.sun.com/solaris/articles/lib_interposers.html

Другие вопросы по тегам