Перейти к содержимому
Bs0Dd

Сетевые диски в OpenOS (RemoteDISK)

Рекомендуемые сообщения

Некоторое время назад возникла необходимость иметь доступ к файлам с разных компьютеров. Для такого уже есть программка от @Zer0Galaxy, но ей невозможно пользоваться, поскольку сервер падает при открытии файла (ибо модем заставляют переслать таблицу с функциями файла, а он в такое не умеет). В октябре я засел писать свою версию (еще не зная о программе "FTP"), писал с большими перерывами, а потому первая более-менее рабочая версия у меня получилась только сейчас.

Данная система работает несколько иначе, она выделяет под сервер не определенную папку, а диск целиком, являясь, фактически, прокси-прослойкой между диском сервера и ОС клиента, также на стороне сервера есть два уровня логирования запросов (в текстовый файл). "Лэйбл" передается напрямую с реального удаленного диска, адрес тоже соответствует реальному, но без всех тире и с приставкой "-rfs".

 

rmdisk.png

 

Посмотреть весь код можно на ГитХабе

 

Как развернуть сеть:

Скрытый текст

Для начала, нужно поднять сервер:

  1. Скачаем его с Пастебина: pastebin get 8yTQdACn /etc/rc.d/rmdsrv.lua

  2. Затем в файле /etc/rc.cfg нужно задать настройки для сервера: порт, имя сервера, логин, пароль, адрес жесткого диска, режим работы и уровень логирования. Делается это аналогично файлу примера.

  3. Если все настроено верно, запускем сервер через RC командой: rc rmdsrv start и наблюдаем такую картину:

   server.png

      Сервер поднят, а значит половина дела сделана. Впоследствии, его можно завершить командой: rc rmdsrv stop

 

Теперь настраиваем клиент:

  1. Скачиваем набор утилит и библиотеку через инсталлятор на Пастебине: pastebin run CnJP04yJ

  2. Теперь у нас есть программы rmdmt и rmdumt. Для монтирования нужна первая: rmdmt <port> <hostname> <login> <password>

      Если необходимо часто подключаться к нескольким серверам, можно написать небольшой скрипт для монтировщика и запустить его командой: rmdmt -f <filename>. Пример такого файла есть тут.

  3. Теперь сетевой диск примонтировался в папку /mnt/ (монтировщик указывает путь до смонтированного диска). Можно работать с ним как с реальным носителем.

      connector.png

  4. Если диск вам более не нужен и вы не хотите занимать место на сервере, воспользуйтесь демонтировщиком: rmdumt <path>. Для него также можно написать скрипт. Или сразу отключиться от всех дисков командой: rmdumt -l.

      disconnector.png

 

Вот и все!

 

Про режимы работы и уровни логирования:

Скрытый текст

У сервера есть два режима работы, которые задаются значениями 1 и 2 у переменной mode

  1. mode = 1 - Режим 14/1

      На сервере может находиться до 14 человек, но каждый может открыть только по одному файлу.

  2. mode = 2 - Режим 7/2

      На сервере может находиться всего до 7 человек, но теперь каждый может открыть целых два файла.

Сделано такое ограничение намеренно, поскольку система не может держать одновременно открытыми более 16 файлов (2 из которых идут на нужды системы и самого сервера)

Внимание: имейте ввиду, если вы попытаетесь открыть файл сверх лимита, сервер вернет ошибку "too many open handles". Поэтому не забывайте сами закрывать файлы. И учтите, что система позволяет открыть на запись файл только единожды. Поэтому если другой клиент уже открыл его на запись, вы не сможете этого сделать, а поскольку это ограничение на уровне системы, обойти его скорее всего не выйдет.

 

Также у сервера имеются три уровня логирования (ведется в файл /etc/rdwork.log). Задаются значениями false, 1 и 2 у переменной log

  1. log = false - Логирование отключено

  2. log = 1 - Логирование данных о подключениях и входе на сервер

  3. log = 2 - Логирование данных о подключениях, входе на сервер, а также дисковых запросов от клиентов (имейте ввиду, что лог-файл может достигнуть очень больших размеров)

 

Примите во внимание, что обмен сетевыми пакетами требует некоторого времени, поэтому чтение/запись данных (особенно малыми блоками) может занять продолжительное время. Возможно, в будущем, попробую снизить задержки.

Еще, если кто-то нашел в программах баг или недоработку (а таких может быть много), просьба сразу сообщить об этом. А если вы еще и скажете, как решить эту проблему, то цены вам не будет))).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14 часа назад, Bs0Dd сказал:

На сервере может находиться до 14 человек, но каждый может открыть только по одному файлу.

А почему бы не сделать в этом случае виртуальные файлы с очередью записи на диск?

Типо, если юзер открывает файл для чтения, то он читается полностью и помещается в таблицу, а файл закрывается.

Если юзер открывает файл для записи, то запись идет в таблицу, а при закрытии добавляется в очередь записи на диск.

Плюс еще какие-то условия для соблюдения прозрачности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, hohserg сказал:

А почему бы не сделать в этом случае виртуальные файлы с очередью записи на диск?

Выгружать файлы целиком в ОЗУ очень нехорошая идея. Если все 14 клиентов пооткрывают файлов (размер которых может быть и немаленьким), сервер может закушать столько памяти, что и вовсе свалится от ее нехватки, а дорогие сервера с кучей ОЗУ под это выделять не всегда возможно. Да с количеством файлов надо что-то думать, но так, чтобы оно сильно не ело память.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ок, грузи не сразу, а по кускам. Но после каждого чтения куска закрывать файл и сохранять место чтения. Суть в том ,чтобы убрать ограничение на количество клиентов и количество открытых(выглядящих открытыми) файлов

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
36 минут назад, hohserg сказал:

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

Ладно, позже попробую реализовать. Если получится, добавлю в качестве третьего режима (первые два режима все же более надежны и стабильны, поэтому пускай будут)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...