Oi Habr.
Certamente muitas pessoas pensaram sobre isso, talvez alguém tenha essa idéia no TODO. Ela ficou comigo por cerca de um ano, mas ainda conseguiu implementá-lo na forma de um protótipo funcional.
TgCloud:
- CĂłdigo g **** do sistema de arquivos virtuais de cĂłdigo aberto.
- No disco local - apenas metadados: nomes, tamanho, estrutura de pastas etc.
- Os dados sĂŁo armazenados no Telegram e sĂŁo baixados apenas ao trabalhar com um arquivo
- O tamanho e o tipo de arquivos não são limitados, podem ser usados ​​com qualquer sistema operacional
Detalhes da implementação e um link para o repositório sob o gato.

Idéia
A ideia de criar VFS com base no Telegram surgiu enquanto trabalhava no
AudioTubeBot e no
VideoTubeBot - depois de encontrar uma maneira
de contornar o limite de 50mb para baixar arquivos para bots - estudei o
cĂłdigo-fonte do
Telegram - descobri muitas coisas interessantes. Por exemplo, a velocidade de download Ă© limitada principalmente no prĂłprio cliente, e nĂŁo no servidor.
Como resultado, aumentei a velocidade de download da nuvem do Telegram para ~ 240mbit / s por sessão (ela está funcionando de maneira estável por mais de um ano), o que é 15 vezes mais rápido que a velocidade do cliente oficial.
O passo lógico era usar armazenamento ilimitado de arquivos com alta velocidade de download como uma unidade de rede - provavelmente muitos o fazem, mas o problema é que os clientes de telegrama são inconvenientes para usar para pesquisar e organizar arquivos. Além disso, há um limite de 1,5 GB por tamanho de arquivo.
FusĂvel
Para resolver esses problemas, primeiro decidi fazer um patch do kernel do Linux e criar meu prĂłprio sistema de arquivos virtual, que agruparia convenientemente os arquivos carregados no Telegram, usando apenas metadados.
No processo de estudo da questão, verificou-se que não é necessário corrigir o kernel. O Linux possui um
mĂłdulo de kernel FUSE especial que permite que os desenvolvedores criem novos tipos de sistemas de arquivos acessĂveis aos usuários para montar sem privilĂ©gios. Existem wrappers para quase todos os idiomas populares do mĂłdulo.

Telethon
Para acessar o Telegram, eu uso a biblioteca
Telethon versĂŁo 0.19.1 com o upload de arquivo multithread modificado (TelegramClientX).
Vfs
Para nĂŁo escrever um sistema de arquivos do zero - o python
dedupfs é usado, usando o fuse e o sqlite para armazenar metadados, que dividem os arquivos em blocos, consideram o hash sha1 e reutilizam os mesmos blocos - você só precisa substituir os métodos de carregamento de dados no armazenamento.
Tgcloud
Combinando tudo isso, acabou sendo um protĂłtipo funcional do
tgcloud , até agora sem velocidade espacial, mas ainda funcionando, espero atrair a comunidade para o desenvolvimento. Os arquivos baixados são divididos em blocos de 10 MB, sha1 é calculado e carregado em SavedMessages, o hash é armazenado no banco de dados local e, ao ler o bloco, o arquivo está localizado nele. Os blocos são colados na ordem necessária e um fluxo de bytes é emitido - como se você os estivesse lendo do disco.
Para executar o cĂłdigo
- VocĂŞ precisa obter api_hash e api_id em my.telegram.org e inserir esses dados juntamente com o nĂşmero de telefone da sua conta em tg_access.py
- Crie uma sessĂŁo executando a partir da pasta do projeto
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
.
P.S. ( )
— , .. — « », — — , , — — . — , , 90% , VFS — .
— , — , Telegram — « — .. ..»Telegram
GitHub
DEDIC.SH Intel Scalable 2019 :
- 2x Xeon Silver 4214 — 24
- 2x Xeon Gold 5218 — 32
- 2x Xeon Gold 6240 — 36 .
Xeon Silver 4214 —
15210 /—
!
—
VDS 150 / — , !