- PVSM.RU - https://www.pvsm.ru -

Telegram. Безлимитный сетевой диск. Бесплатный

Привет.
Наверняка многие об этом задумывались, возможно у кого то эта идея лежит в TODO. У меня она пролежала примерно год, но таки удалось ее реализовать в виде работающего прототипа.

TgCloud:

  • Виртуальная файловая система с открытым исходным г****кодом.
  • На локальном диске — только метаданные: имена, размер, структура папок и т.д.
  • Данные хранятся в Telegram и загружаются только при работе с файлом
  • Размер и тип файлов не ограничен, можно использовать с любой ОС

Telegram. Безлимитный сетевой диск. Бесплатный - 1
Подробности реализации и ссылка на репозиторий — под катом

Идея

Идея создать VFS на базе Telegram появилась во время работы над AudioTubeBot [1] и VideoTubeBot [2] — после того как был найден способ обойти ограничение в 50мб на загрузку файлов для ботов [3] — я изучил исходники Telegram [4] — открыл много интересного. Например скорость загрузки ограничивается большей частью на самом клиенте, а не сервером.
В результате — увеличил скорость загрузки в облако Telegram до ~240мбит/с на сессию(стабильно работает больше года), что в 15 раз превышает скорость официального клиента.
Логичным шагом было использовать неограниченное файловое хранилище с высокой скоростью загрузки в качестве сетевого диска — наверняка многие так и делают, но проблема в том, что клиентами telegram достаточно неудобно пользоваться для поиска и систематизации файлов. Кроме того — существует лимит в 1.5ГБ на размер одного файла.

FUSE

Для решения этих проблем я сперва решил сделать патч ядра Linux и сделать свою виртуальную файловую систему, которая позволяла бы удобным образом группировать файлы загруженные в Telegram, при этом используя только метаданные.
В процессе изучения вопроса выяснилось что патчить ядро совсем не обязательно т.к. в Linux существует специальный модуль ядра FUSE [5], который позволяет разработчикам создавать новые типы файловых систем, доступные для монтирования пользователями без привилегий. Для модуля есть обертки почти под все популярные языки.
Telegram. Безлимитный сетевой диск. Бесплатный - 2

Telethon

Для доступа к Telegram я использую библиотеку Telethon [6] версии 0.19.1 с модифицированной мной многопоточной загрузкой файлов(TelegramClientX).

VFS

Чтобы не писать с нуля файловую систему — за основу взята dedupfs [7] на python, использующая fuse и sqlite для хранения метаданных, которая разбивает файлы на блоки, считает sha1 хэш и переиспользует одинаковые блоки — нужно всего лишь заменить методы загрузки данных в хранилище на свои.

TgCloud

Объединив это все — получился рабочий прототип tgcloud [8], пока что без космических скоростей, но все же рабочий, надеюсь привлечь сообщество к разработке. Загружаемые файлы разбиваются на блоки по 10МБ, рассчитывается sha1 и загружаются в SavedMessages, хеш сохраняется в локальной базе данных и при чтении блока по нему находится файл. Блоки склеиваются в нужном порядке и выдается поток байт — будто вы читаете их с диска.

Для запуска кода

  • Необходимо получить api_hash и api_id на my.telegram.org [9] и вставить эти данные вместе с номером телефона вашего аккаунта в tg_access.py
  • Создать сессию запустив из папки с проектом
    python3.6 download_service.py

    и введя код подтверждения

  • Установить
    sudo yum install python-fuse
  • Создать папку для монтирования
    mkdir storage
  • Запустить VFS:
    с отладкой

    python dedupfs/dedupfs.py -df --block-size 10240000 storage/

    в фоне

    python dedupfs/dedupfs.py --block-size 10240000 storage/

  • Можно, например указать эту папку как источник для filebrowser [10]

Благодарю за внимание.

Мой канал в Telegram [11]
Чат для вопросов [12]
VDS в России и Нидерландах [13]
Выделенные серверы в России и Нидерландах [14]

Автор: SlavikMIPT

Источник [15]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/320998

Ссылки в тексте:

[1] AudioTubeBot: http://t.me/AudioTubeBot

[2] VideoTubeBot: http://t.me/VideoTubeBot

[3] обойти ограничение в 50мб на загрузку файлов для ботов: https://habr.com/ru/post/348234/

[4] исходники Telegram: https://github.com/telegramdesktop/tdesktop/tree/dev/Telegram/SourceFiles

[5] модуль ядра FUSE: https://ru.wikipedia.org/wiki/FUSE_(модуль_ядра)

[6] Telethon: https://github.com/LonamiWebs/Telethon

[7] dedupfs: https://github.com/xolox/dedupfs

[8] tgcloud: https://github.com/SlavikMIPT/tgcloud

[9] my.telegram.org: https://my.telegram.org

[10] filebrowser: https://github.com/filebrowser/filebrowser

[11] Мой канал в Telegram: https://t.me/mediatube_stream

[12] Чат для вопросов: https://t.me/mediatube_chat

[13] VDS в России и Нидерландах: http://www.vds.sh

[14] Выделенные серверы в России и Нидерландах: https://dedic.sh

[15] Источник: https://habr.com/ru/post/456290/?utm_campaign=456290&utm_source=habrahabr&utm_medium=rss