Собственное облако на sshfs с локальной копией
Можно ли такое сделать?
Страницы:
Распечатать
- 1
- 2
. Редактировалось 4 раза, последний — #1
Решил сделать на одном из VDSов собственное облачное хранилище. Каких-либо особых требований не было, поэтому пошел самым примитивным образом: просто создал на VDS еще одного пользователя и стал его домашний каталог монтировать по sshfs (причем даже не из командной строки, а из GUI файл-менеджера, введя там sftp://сервер/home/пользователь и указав «запомнить пароль»). В этом случае время доступа к файлу получается намного лучше, чем при использовании WebDAV с HTTPS.
Но возник вопрос: можно ли как-то сделать так, чтобы сохранялась локальная копия файла, которая оставалась бы доступна тогда, когда нет соединения с Интернет? Скажем, с помощью unionfs или чего-то подобного?
Еще обнаружилось, что использовать такое облако под Android довольно сложно: хотя есть приложение EasySSHFS, оно работает только при наличии прав рута, что в моем случае неприемлемо.
Но возник вопрос: можно ли как-то сделать так, чтобы сохранялась локальная копия файла, которая оставалась бы доступна тогда, когда нет соединения с Интернет? Скажем, с помощью unionfs или чего-то подобного?
Еще обнаружилось, что использовать такое облако под Android довольно сложно: хотя есть приложение EasySSHFS, оно работает только при наличии прав рута, что в моем случае неприемлемо.
Ребята, давайте жить спокойно!
Впрочем, для Android, хоть и кривое, но решение нашлось: открывать файлы по SFTP умеют Cx Проводник и ES Explorer.
Ребята, давайте жить спокойно!
. Редактировалось 1 раз, последний — #3
чтобы сохранялась локальная копия файла
А в каких случаях должна будет создаваться локальная копия? При чтении/записи файла на sshfs? Если есть локальная копия файла, то при чтении этого файла с sshfs он должен загружаться с сервера или из локальной копии (т. е. должна ли локальная копия использоваться в качестве кэша)?
Вот, посмотри, может что-то из этого подойдёт:
10geek написал(а):
При чтении/записи файла на sshfs? Если есть локальная копия файла, то при чтении этого файла с sshfs он должен загружаться с сервера или из локальной копии (т. е. должна ли локальная копия использоваться в качестве кэша)?
В идеале они должны быть все время синхронизированы. Т.е., допустим, я редактирую текстовый файл. Тогда при каждом сохранении, если у меня включен Интернет, он должен сохраняться и локально, и удаленно. Если Интернет отключен, то я могу редактировать локальную копию, а при включении она должна уйти на сервер. Если же я отредактировал его с другого компьютера, а потом и локальную копию тоже, то приоритет определяется временем: сохраняться тот, у которого время модификации новее.
Глянул, вроде mcachefs и catfs подходят. Правда, последняя — все еще в alpha state. Впрочем, есть мысль, что можно поступить проще: написать скрипт, который будет раз в несколько минут запускать обычный rsync для нужных мест, а сами файлы сохранять локально как обычно.
Но в итоге, поразмыслив еще раз, я все же решил проблему иначе: вместо собственного облака поставил клиент Яндекс.Диска и насоздавал в его каталоге symlinkов на все те места, которые я хочу синхронизировать, а также прописал в конфиге, что старое содержимое (у меня там куча архивов и фото лежит) синхронизировать не надо. Вроде получилось вполне приемлемо, с учетом того, что у Яндекса сервера ближе расположены, чем у прочих облачных служб.
Единственное что, не уверен, что будут хорошо синхронизироваться большие проекты типа IntB, но для них, по идее, нужно вообще git использовать.
Это и проблему доступа из под Windows/Android решит, если вдруг она станет актуальна.
Ребята, давайте жить спокойно!
И всё-таки, если бы ты решил синхронизировать файлы на сервер, то чем не устроил бы вариант с rsync или unison? И кстати, надо заметить, что sshfs весьма тормозная штука при высоких пингах. И даже с низким пингом синхронизация происходила бы намного медленнее, чем через unison, который работает в несколько потоков. Правда, у unison есть одна не самая приятная особенность: ему для работы требуются одинаковые версии unison на сервере и на клиенте.
Про такую штуку как unison, я просто не знал. А так, да, вполне подходит для таких задач. А она постоянно в памяти висит и мониторит изменения или работает как утилита ком. строки, по вызову?
Ребята, давайте жить спокойно!
Работает она по вызову, но может и постоянно мониторить изменения (опция -repeat). При первом запуске в базу добавляются отсутствующие файлы, поэтому, в зависимости от их количества и размера, этот процесс может длиться долго.
. Редактировалось 2 раза, последний — #8
Пока изучал документацию по systemd, нашёл ещё одно решение на случай, если изменения нужно выгружать автоматически. Можно воспользоваться systemd-юнитом *.path с директивой PathModified=. Она отвечает за мониторинг изменений файла или каталога средствами inotify, при изменении которого будет запускаться юнит, указанный в директиве Unit=, который будет иметь Type=oneshot и команду rsync, указанную в ExecStart=.
Не знал про такое. Полезная возможность! А отслеживание идёт со всеми подкаталогами?
Ребята, давайте жить спокойно!
. Редактировалось 1 раз, последний — #10
Документация об этом умалчивает, а мне пока что не на чем проверить. Но, судя по комментарию Поттеринга на GitHub systemd не отслеживает изменения в подкаталогах рекурсивно и что есть какие-то проблемы с тем, чтобы эту возможность реализовать. Может быть сейчас уже это реализовано, надо проверять.
Страницы:
Распечатать - 1
- 2
У вас нет прав для отправки сообщений в эту тему.