Хабрахабр

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

Привет, Хабр.

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

TgCloud:

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


Подробности реализации и ссылка на репозиторий — под катом

Идея

Идея создать VFS на базе Telegram появилась во время работы над AudioTubeBot и VideoTubeBot — после того как был найден способ обойти ограничение в 50мб на загрузку файлов для ботов — я изучил исходники Telegram — открыл много интересного. Например скорость загрузки ограничивается большей частью на самом клиенте, а не сервером.

В результате — увеличил скорость загрузки в облако Telegram до ~240мбит/с на сессию (стабильно работает больше года), что в 15 раз превышает скорость официального клиента.

Кроме того — существует лимит в 1. Логичным шагом было использовать неограниченное файловое хранилище с высокой скоростью загрузки в качестве сетевого диска — наверняка многие так и делают, но проблема в том, что клиентами telegram достаточно неудобно пользоваться для поиска и систематизации файлов. 5ГБ на размер одного файла.

FUSE

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

в Linux существует специальный модуль ядра FUSE, который позволяет разработчикам создавать новые типы файловых систем, доступные для монтирования пользователями без привилегий. В процессе изучения вопроса выяснилось что патчить ядро совсем не обязательно т.к. Для модуля есть обертки почти под все популярные языки.

Telethon

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

VFS

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

TgCloud

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

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

  • Необходимо получить api_hash и api_id на my.telegram.org и вставить эти данные вместе с номером телефона вашего аккаунта в 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

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

Мой канал в Telegram
Чат для вопросов
Исходники на GitHub
VDS в России и Нидерландах
Выделенные серверы в России и Нидерландах

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть