Pull to refresh

Comments 57

Я правильно понял, что всё это работает только с 1 аккаунтом в облаке? На сколько мне известно прикрутить несколько аккаунтов не так сложно, но придутся немного изменить структуру самой ФС

Всё верно, поддержку авторизации по нескольким аккаунтам сделать несложно. Потом нужно ввести балансировку файлов по разным аккаунтам с нормальный распределением. Ну и да, это всё если маилру ещё не забанят вас за твинководство на этапе тестирования ;)

С банами верно подмечено, пока тестил, заблочили пару учеток за такие тесты, якобы из-за подозрительной активности)
А по поводу балансировки, я думал можно разбить файл но количество аккаунтов и залить в каждый по кусочку

Можно и так, верно, полезно было бы как раз для крупных файлов > 2 Гб, после разбивки их не пришлось бы распиливать как сейчас.

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

Судя по манам mhddfs, он пишет на один диск пока там не закончится место, и только потом переключается на следующий:


При записи файлов в файловую систему файлы пишутся на первый hdd до
тех пор пока там есть место (см опцию mlimit), затем они пишутся на
второй hdd, третий итп.
mhddfs и unonfs — очень старые проекты. Используйте aufs3, там есть балансировка записи. Использую его дома, для объединения нескольких HDD в «один большой» на уровне файлов, а не блочных устройств, как в RAID.

Балансировка в данном случае не сильно нужна… Потому что если на 2 облака писать одно и то же. Или на 2 облака писать с одного и того же ip — подозрительно как-то...


А на счёт работоспособности mhddfs могу сказать так: работает отлично) Вот я у себя запустил такое интересное сочетание, и оно работает! Правда память отжирает… Но с памятью могут проблемы из-за доступа программы к файлам в /tmp… Хотя туда вроде как писать можно всем и всё.

В нынешних дистрибутивах /tmp монтируется как tmpfs, напрямую из памяти, будьте осторожны.

Хм… Не знал, спасибо. Попробую тогда использовать другую папку для сохранения кеша.

Я отказался от mhddfs несколько лет назад потому, что она криво работает с «дырявыми» файлами и время от времени подвисает… Использовал для объединения 4 дисков.
/tmp/ был на диске.
Можно сделать что-то типа RAID и выделить один из акков под резервную часть, тогда блокировка одного аккаунта не скажется на целостности файлов
если на обоих учетках будут в точности одинаковые операции — будет не сложно забанить обе по паттерну… Вот если бы второй аккаунт был в другом облаке… :-)

Кстати говоря, я тут ночью как раз думал, на счёт другого облака. С помощь webdavfs можно подключиться к яндексу, а объединить marcfs и webdavfs с помощью mhddfs уже тоже не проблема)

А вообще было бы неплохо, на самом деле, с балансировкой то. А на счёт твинководства… Можно через tor попробовать пустить весь трафик)

Я этим могу заняться позже, скорее всего, когда опакечу ФС для популярных дистрибутивов. Пока что можете внести в issues с пометкой enhancement.

И обязательно через выходные узлы одной страны. Иначе блокировка из-за подозрения на взлом учётной записи.

Ну тогда легче просто сделать свой прокси, раскидывающий запросы на другие прокси...

Но зачем, если есть mhddfs, UnionFS и всё такое?

О, напишите пример использования, если вас не затруднит? Я добавлю в README.

Трудно: самому понадобится читать маны.

Кроме того пример использования и не нужен, достаточно отсылки: «для объединения нескольких аккаунтов можете использовать mhddfs, UnionFS или Aufs». Если по справке этих технологий нельзя быстро понять, как ими пользоваться, то это их маны нужно улучшать, а не раздувать ридми вашего проекта.

Честный ответ. Спасибо за наводку в любом случае, уже читаю доки.

Сам пользуюсь вариантом, схожим с таким: https://enztv.wordpress.com/2016/10/19/using-amazon-cloud-drive-with-plex-media-server-and-encrypting-it/ Часть его решений в том или ином виде применяю с некоторыми доработками.
Да, тоже в основном для Plex. Использую безлимитный GDrive, ACD тоже, например. Объем данных — десятки терабайт. Думаю, что после половины петабайта насыщение произойдет и больше не нужно будет, поглядим. Начну еще больше внимания уделять отказоустойчивости. Сейчас только три копии в разных концах планеты. Важно все это дело использовать только для себя и не шэрить, тем более с доходом. Просто на всякий случай.

Проблема в том, что config.json пока что только один… А в нём, как я понял из того, что видел в readme, не поддерживается несколько файловых систем за раз. Поэтому придётся писать какой-то свой скрипт, который будет в несколько команд включать сначала marcfs, а потом их объединять с помощью того же mhddfs.

Правильнее: монтировать разные инстансы выставив различные переменные окружения $HOME, чтобы config.json читался из разных путей.

Ну да, нужно будет автоматизировать монтирование всего добра в нужном порядке. Но и без того автор предлагал бутерброд из MARC-FS + encfs, добавляется только один слой.

Автоматизировать монтирование в нужном порядке в современных реалиях видимо правильнее через systemd. А умеючи и удобнее.

Я думаю вы сами согласитесь, что танцы с бубном переменными $HOME — не лучшая идея.


бутерброд из MARC-FS + encfs, добавляется только один слой.

Ну тут палка о двух концах. Да, если мне нужно будет 2 облачка в одно сливать, то это красиво, но если я порядочный гражданин, который имеет только 1 акк у майла? Мне кажется, что лучше уж пусть закононепослушные, типа меня, будут сами объединять несколько marcfs с помощью того же mhddfs, чем заставлять человека писать ещё один велосипед.


А вот сделать в marcfs возможность из одного конфига делать много точек монтирования — будет очень полезной.

Я, скорее, добавлю поддержку $XDG_CONFIG_DIR, так что не придётся менять целиком $HOME. Или того лучше, сделаю опцию --config=/path/to/conf

Я думаю вы сами согласитесь, что танцы с бубном переменными $HOME — не лучшая идея.

Да, но это лучше, чем последовательно скриптом запускать разные инстансы монтирования, перед каждым очередным запуском вписывая в config.json разные значения.

Мне кажется, что лучше уж пусть закононепослушные, типа меня, будут сами объединять несколько marcfs с помощью того же mhddfs, чем заставлять человека писать ещё один велосипед.

Если под человеком, которому писать велосипед, подразумевался Kanedias, то это полностью совпадает с моим отношением к ситуации.

А вот сделать в marcfs возможность из одного конфига делать много точек монтирования — будет очень полезной.

Я больше голосую за возможность указать путь к конфигу параметром командной строки.

Да, человек именно Kanedias...


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

А у меня вопрос есть, тупой скорее всего, но всё же. В Readme сказано, что нужно сначала отмонтировать прошлую encfs, из этого я делаю вывод, что работать с несколькими примонтированными системами я не могу. Это я делаю правильный вывод или нет?

Почему, можете примонтировать, скажем, одну фс в ~/remote-1, encfs для него в ~/remote-decrypted-1, вторую фс в ~/remote-2, encfs в ~/remote-decrypted-2. В README имелось в виду, что нужно отмонтировать encfs, которая смотрит на ту фс, которую вы хотите отключить.

Окей, тогда понятно. Просто подумал, что в реализации что-то не так у Вас)
Тогда, возвращаясь к балансировке, можно установить балансировщик на локальной машине, который будет балансировать между 2 marcfs.

UFO just landed and posted this here

А почему бы просто не смонтировать облако mail.ru в davFS, и EncFS создать внутри точки монтирования davFS? Mail.ru не поддерживает webdav? Или encFS так просто внутри davFS не работает?

Mail.ru не поддерживает webdav?

Нет, к сожалению. Анонс был, но… на этом всё.


Или encFS так просто внутри davFS не работает?

Тоже легко может быть. Как и говорил, encFS требует поддержки read/write блоками по файлу, что не в каждой ФС есть.

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

Хеш считается уже в облаке или на локальном клиенте?


Если на клиенте то нет смысла передавать в облако файл который там уже есть. А в таком случае можно "загрузить" в облако файл от которого у тебя только хеш и размер и забрать его оттуда.

Скорее всего на сервере, иначе можно было бы украсть файл, не имея содержимое, а имея только его хеш...

Копирование это не кража. Но на клиенте же выгодней. Кроме хеша и размера ничего передавать тогда не надо.

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


А если брать по чесноку, то сейчас есть много дебилов, которые отправляют какие-нибудь важные документы через облака… А так же бекапы, которые вообще-то зашифрованы обычно ключём, но хеш можно узнать на сервере, ведь много проще сидеть спокойно дома и качать с майла, чем через ssh тунель, да и шансов спалиться в разы меньше.


Короче, если хеш вычисляется на клиенте, то это потенциальная дыра в безопасности.

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

Окей, тогда вопрос, вот я посчитал хеш, отправил, и оказался уже такой файл в облаке. Что сервер будет делать? Файл то изначально не мой… Заставлять качать файл и потом разрешать мне доступ на тот, который уже есть?


Короче говоря, легче и безопаснее сделать это на стороне сервера, учитывая, что облако майла изначально работает по стандартному http, то там и не может быть каких-то изысков.

Как решение вижу, такой вариант, если файл больше размера 2-х блоков, то разбивать файл на блоки, для каждого блока считать хэш сумму и пересылать этот набор хэш сумм. Если размер файла меньше, то пересылать файл целиком и все расчеты делать на сервере. При таком подходе пересылать придется значительно меньше, а угадать хеш каждого блока в файле и при этом угадать, существование файла, становится труднее. Дополнительно можно использовать автобан, на случай, когда после нескольких попыток клиент прислал, только хэш суммы, но не разу по запросу сервера не предоставил содержимое файла.

Но в целом, я согласен, что легче все манипуляции сделать на стороне сервера.

Хэш считается на облаке, после заливки.

А вы не знаете, каким алгоритмом высчитывается хэш-сумма файла на сервере?

Не знаю. Там какой-то 160-битный хэш. Я перепробовал все функции, которые были в наличии у openssl dgst, не подошли. Возможно, хэшируется не только содержимое файла, но и какие-то метаданные.

Туда файл нулевого размера залить можно? Если да то какой у него хеш будет?

Можно. Хэш 0000000000000000000000000000000000000000.

Либо хеш совсем простой. Либо это специальное значение для файла нулевого размера.

Отличная работа, коллега!
Пара камментов:
* не указана версия GPL (а еще лучше — положить в гитхаб текст лицензии — это как бы «прилично»)
* бы еще в README.md добавить requirements — что нужно для сборки; понятно, что по сообщениям cmake можно сделать некие выводы — но довольно сложно (например libcurl-devel, fuse-devel, jsoncpp-devel, jemalloc-devel для RH-based)
* еще можно напилить примочку для mc — там не совсем fuse, поэтому оверхед должен быть меньше.
* ну и зарелизить, что ли :-)

Самое важное-то и забыл! Спасибо! Лицензия GPLv3.


бы еще в README.md добавить requirements — что нужно для сборки

Я все комментарии с этой темы к себе понемногу в TODO переношу, как вынырну в очередной раз из работы и релизов, сделаю вики. Пока что можно посмотреть зависимости для наиболее популярных дистрибутивов в gitlab-CI скрипте

У меня есть задача хранить в облаке резервные копии. Причём шифрование не является необходимостью, более того, лучше обойтись без него.
Пробовал Яндекс.Диск через davfs, но кеширование, которое ещё и оставляет недокачанные куски, убивает всю вкусность WEBDAV.
Насколько просто исключить шифрование из вашего кода?

Шифрования вообще нет в коде, оно идёт поверх, с помощью EncFS/cryptfs. См. README в корне проекта.


Но у меня кэшированные куски тоже могут остаться, если будете пользоваться -o cachedir.
В общем, попробуйте, если вас устроит, сразу поймёте.

Привет, Автор. Скажи пожалуйста, а почему может быть так медленно? mc показывает корневую папку облака через минуту, хотя интернет у меня хороший и официальный клиент под маком нормально работает. Коннекчусь так:

marcfs MYDIR -o max-download-rate=30,max-upload-rate=1,cachedir=MYDIR.cache,username=MYEMAIL,password=MYPASSWORD

MYDIR -- абсолютный путь.

max-upload-rate=1

я думаю, дело в этом, нужно убрать

Sign up to leave a comment.

Articles