Собственное облако на sshfs с локальной копией

Можно ли такое сделать?

Настройки отображения темы Показывать по сообщений с сортировкой .
Выводить , отправленные .
Одна страница
Распечатать
4X_Pro
Создатель форума
Всего сообщений: 1320
Зарегистрирован: 9 дек 2015, 19:20
Рейтинг пользователя: 670

0
26 января 2020, 19:54. Редактировалось 4 раза, последний — 1 мая 2020, 15:02#1
Решил сделать на одном из VDSов собственное облачное хранилище. Каких-либо особых требований не было, поэтому пошел самым примитивным образом: просто создал на VDS еще одного пользователя и стал его домашний каталог монтировать по sshfs (причем даже не из командной строки, а из GUI файл-менеджера, введя там sftp://сервер/home/пользователь и указав «запомнить пароль»). В этом случае время доступа к файлу получается намного лучше, чем при использовании WebDAV с HTTPS.
Но возник вопрос: можно ли как-то сделать так, чтобы сохранялась локальная копия файла, которая оставалась бы доступна тогда, когда нет соединения с Интернет? Скажем, с помощью unionfs или чего-то подобного?
Еще обнаружилось, что использовать такое облако под Android довольно сложно: хотя есть приложение EasySSHFS, оно работает только при наличии прав рута, что в моем случае неприемлемо.

4X_Pro
Создатель форума
Всего сообщений: 1320
Зарегистрирован: 9 дек 2015, 19:20
Рейтинг пользователя: 670

0
26 января 2020, 20:16#2
Впрочем, для Android, хоть и кривое, но решение нашлось: открывать файлы по SFTP умеют Cx Проводник и ES Explorer.

10geek
Единомышленник
Всего сообщений: 102
Зарегистрирован: 29 июн 2018, 09:36
Рейтинг пользователя: 2

0
26 января 2020, 22:38. Редактировалось 1 раз, последний — 26 января 2020, 22:49#3
чтобы сохранялась локальная копия файла

А в каких случаях должна будет создаваться локальная копия? При чтении/записи файла на sshfs? Если есть локальная копия файла, то при чтении этого файла с sshfs он должен загружаться с сервера или из локальной копии (т. е. должна ли локальная копия использоваться в качестве кэша)?

Вот, посмотри, может что-то из этого подойдёт:

4X_Pro
Создатель форума
Всего сообщений: 1320
Зарегистрирован: 9 дек 2015, 19:20
Рейтинг пользователя: 670

0
26 января 2020, 23:59#4
10geek написал(а):
При чтении/записи файла на sshfs? Если есть локальная копия файла, то при чтении этого файла с sshfs он должен загружаться с сервера или из локальной копии (т. е. должна ли локальная копия использоваться в качестве кэша)?

В идеале они должны быть все время синхронизированы. Т.е., допустим, я редактирую текстовый файл. Тогда при каждом сохранении, если у меня включен Интернет, он должен сохраняться и локально, и удаленно. Если Интернет отключен, то я могу редактировать локальную копию, а при включении она должна уйти на сервер. Если же я отредактировал его с другого компьютера, а потом и локальную копию тоже, то приоритет определяется временем: сохраняться тот, у которого время модификации новее.

Глянул, вроде mcachefs и catfs подходят. Правда, последняя — все еще в alpha state. Впрочем, есть мысль, что можно поступить проще: написать скрипт, который будет раз в несколько минут запускать обычный rsync для нужных мест, а сами файлы сохранять локально как обычно.

Но в итоге, поразмыслив еще раз, я все же решил проблему иначе: вместо собственного облака поставил клиент Яндекс.Диска и насоздавал в его каталоге symlinkов на все те места, которые я хочу синхронизировать, а также прописал в конфиге, что старое содержимое (у меня там куча архивов и фото лежит) синхронизировать не надо. Вроде получилось вполне приемлемо, с учетом того, что у Яндекса сервера ближе расположены, чем у прочих облачных служб.
Единственное что, не уверен, что будут хорошо синхронизироваться большие проекты типа IntB, но для них, по идее, нужно вообще git использовать.
Это и проблему доступа из под Windows/Android решит, если вдруг она станет актуальна.

10geek
Единомышленник
Всего сообщений: 102
Зарегистрирован: 29 июн 2018, 09:36
Рейтинг пользователя: 2

0
27 января 2020, 07:57#5

И всё-таки, если бы ты решил синхронизировать файлы на сервер, то чем не устроил бы вариант с rsync или unison? И кстати, надо заметить, что sshfs весьма тормозная штука при высоких пингах. И даже с низким пингом синхронизация происходила бы намного медленнее, чем через unison, который работает в несколько потоков. Правда, у unison есть одна не самая приятная особенность: ему для работы требуются одинаковые версии unison на сервере и на клиенте.

4X_Pro
Создатель форума
Всего сообщений: 1320
Зарегистрирован: 9 дек 2015, 19:20
Рейтинг пользователя: 670

0
27 января 2020, 18:00#6
Про такую штуку как unison, я просто не знал. А так, да, вполне подходит для таких задач. А она постоянно в памяти висит и мониторит изменения или работает как утилита ком. строки, по вызову?

10geek
Единомышленник
Всего сообщений: 102
Зарегистрирован: 29 июн 2018, 09:36
Рейтинг пользователя: 2

0
27 января 2020, 23:32#7
Работает она по вызову, но может и постоянно мониторить изменения (опция -repeat). При первом запуске в базу добавляются отсутствующие файлы, поэтому, в зависимости от их количества и размера, этот процесс может длиться долго.

10geek
Единомышленник
Всего сообщений: 102
Зарегистрирован: 29 июн 2018, 09:36
Рейтинг пользователя: 2

0
19 мая 2020, 17:37. Редактировалось 2 раза, последний — 19 мая 2020, 17:40#8
Пока изучал документацию по systemd, нашёл ещё одно решение на случай, если изменения нужно выгружать автоматически. Можно воспользоваться systemd-юнитом *.path с директивой PathModified=. Она отвечает за мониторинг изменений файла или каталога средствами inotify, при изменении которого будет запускаться юнит, указанный в директиве Unit=, который будет иметь Type=oneshot и команду rsync, указанную в ExecStart=.

4X_Pro
Создатель форума
Всего сообщений: 1320
Зарегистрирован: 9 дек 2015, 19:20
Рейтинг пользователя: 670

0
21 мая 2020, 00:47#9
Не знал про такое. Полезная возможность! А отслеживание идёт со всеми подкаталогами?

10geek
Единомышленник
Всего сообщений: 102
Зарегистрирован: 29 июн 2018, 09:36
Рейтинг пользователя: 2

0
21 мая 2020, 06:18. Редактировалось 1 раз, последний — 21 мая 2020, 06:20#10
Документация об этом умалчивает, а мне пока что не на чем проверить. Но, судя по комментарию Поттеринга на GitHub systemd не отслеживает изменения в подкаталогах рекурсивно и что есть какие-то проблемы с тем, чтобы эту возможность реализовать. Может быть сейчас уже это реализовано, надо проверять.

Одна страница
Распечатать

У вас нет прав для отправки сообщений в эту тему.

Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.